演化策略(Evolutionary Strategies)

本文介绍了优化算法在机器学习中的重要性,特别是黑盒优化方法,如网格搜索、随机搜索和贝叶斯优化。接着详细探讨了梯度优化,包括随机梯度下降(SAG)及其变种。文章的重点在于演化策略,特别是协方差矩阵自适应进化策略(CMA-ES)和自然进化策略(NES)。最后,简要概述了强化学习的基本概念和与优化的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        演化策略是一种求解参数优化问题的方法,所以我先介绍一下什么是优化。        

1. 优化(Optimization)

      优化就是计算一个函数的最大值或者最小值的问题,下面以求解单变量的最小值为例进行介绍。

       假设函数f(x)的具体表达式是未知的,把它看作一个黑盒函数,我们只能通过向盒子输入得到输出。它可能存在局部最小点和全局最小点,很显然进行坐标点穷举然后对比出最小值的方法是不可行的,这时就需要我们根据一定的策略一步步地向我们的最小值逼近,不同策略就对应着不同的优化算法。

       因为,在机器学习的过程中,根据我们搭建的模型并不是一开始就能根据输入获得我们想要的结果,所以就需要对我们的模型进行优化,以使误差函数值(loss)达到最小或者适应度函数值(fitness)达到最大。优化分为黑盒优化和白盒优化。

      黑盒优化:所谓的黑盒优化就是指寻找黑盒函数的全局最优化解。非形式化的来说,一个黑盒函数可以理解为从 输入 X(x1,x2,x3...) 到 输出 的一个映射.但是映射关系 F 的具体表达式及梯度信息均未知,我们只能通过不断地将数据输入到黑盒函数中然后通过得到的输出值来猜测黑盒函数的结构信息。下图表示一个黑盒问题的映射关系。

preview

 

1.2 黑盒优化方法

        介绍超参数优化之前先介绍一下参数的概念。模型中的参数分为模型参数和超参数,模型参数就是我们的模型根据训练数据训练学习到的参数,不需要人为设定;而超参数是模型开始训练前人为设定的参数,通过不断调整超参数使模型最后的输出越来越复合我们的预期,下面三种是常见的超参数优化方法(属于黑盒优化)。

1.2.1 网格搜索(Grid Search)

        以机器学习中的分类问题为例,在模型训练过程中,我们通常需要多次调整超参数以使我们的输出准确率更高,如果涉及到参数过多就需要多次的人工修改,这时我们可以采用网格搜索---也就是多参数的交叉组合,从而在所有组合中一次性找出最优超参数,比如我们有两个超参数,设定超参数x的范围(0,1),步长0.3,y的范围(0,1),步长0.3,那么两个超参数的组合方式有3*3=9种。

1.2.2 随机搜索(Random Search)

       与网格搜索相比,随机搜索并未尝试所有参数值,而是从指定的分布中采样固定数量的参数设置。它的理论依据是,如果随机样本点集足够大,那么也可以找到最优的超参数,或它的近似值。通过对搜索范围的随机取样,随机搜索一般会比网格搜索要快一些,以了sklearn中的RandomizedSearchCV接口通过设定n_iter 的值来决定采样的数量。

1.3 网格搜索和随机搜索遇到的问题

1.2.3贝叶斯优化(Bayesian Optimization)

       网格搜索穷举地搜索整个超参数空间,随着待优化超参数的增加计算量呈指数增长,速度非常慢。而对于随机搜索来说,进行稀疏的简单随机抽样并不会遇到该问题,但采样过少很难找到全局最优解。贝叶斯优化算法能很好地解决前两种搜索算法遇到的问题。贝叶斯优化能利用先验知识动态缩小超参数搜索空间,并且迭代次数少,速度更快。

下面简单介绍一下贝叶斯优化:

       首先明确我们的目标,通过不断调整输入(超参数)来最大化目标函数值(比如对于线性回归调优时的评估函数是均方误差(fitness),我们的目标就是最大化 -1*fitness),也即我们的目标并不是使用尽可能多的数据点完全推断未知的目标函数,而是希望能求得最大化目标函数值的参数。

        贝叶斯优化用于机器学习调参的主要思想是:给定优化的目标函数(广义的函数,只需指定输入和输出即可,无需知道具体的函数形式),根据已知的样本点在函数上的分布(先验知识)不断地添加样本点来更新目标函数的最大值。

        上图可以直观地解释贝叶斯优化。其中红色的曲线为实际的目标函数,并且我们并不知道该函数确切的表达式。所以我们希望使用高斯过程逼近该目标函数。把采样点(上图有 4 个抽样点)根据高斯过程我们能够得出绿色的置信区间,即目标曲线最有可能处于的区域。从上面的先验知识中,我们确定了第二个点(f+)为最大的样本观察值,所以下一个最大点应该要比它大或至少与之相等。因此,我们绘制出一条蓝线,并且下一个最大点应该位于这一条蓝线之上。因此,下一个采样在交叉点 f+和置信域之间,我们能假定在 f+点以下的样本是可以丢弃的,因为我们只需要搜索令目标函数取极大值的参数。所以现在我们就缩小了观察区域,我们会迭代这一过程,直到搜索到最优解。(有关网格搜索、随机搜索、贝叶斯优化的具体实例代码及函数可以跳转https://www.jianshu.com/p/5378ef009cae

 

1.4 梯度优化

        在高数课本中我们可以找到梯度这个概念, 梯度是一个矢量,是函数一个点上导数最大值的方向,也就是函数值在该方向上变化最快,因此只要随着梯度的方向,便能最快的到达极值点。梯度下降(gradient descent)的方法就是这么得来的。梯度下降法的基本思想可以类比为一个下山的过程:想象我们在山顶,只要我们每一步都沿着最陡的方向迈出下一步,那么我们一定可以最快到达山脚。因此,找到了梯度,我们也需要小心注意步长值,若步长值太大,我们可能一步迈出过大,错过了极值点,若步长值太小,我们到达极值点的次数会增加。

1.4.1 随机梯度下降(SAG)

        在模型训练的过程中,梯度下降是常用的最小化误差函数loss的方法。一般而言,梯度下降需要在遍历所有的数据后才进行梯度计算然后更新参数。假设现有数据集有10,000条数据,那么在这10,000条数据都进行训练之后才会确定梯度,这样的计算会耗时很长。

        随机梯度下降也称小批量梯度下降(mini-batch gradient decent),它解决了需要遍历所有数据才更新一次参数的问题。随机梯度下降根据每一个小批量数据进行更新参数。也就是说,10,000个数据,假设分成10个批量,每个批量是1,000个数据,那么在遍历完每个批量后,计算这个小批量的梯度然后进行更新参数,这样在遍历完10,000个多有数据后,梯度下降实际上已经进行了十次,相比于普通梯度下降而言,速度快了10倍。实验结果表明,在数据打乱情况下,随机梯度下降的每一个批量是可以很好近似整个数据集的。随机梯度下降的参数更新公示如下,gt为目标函数关于参数w的梯度:

g_{t}=\bigtriangledown_{w} f(w)

w=w-\alpha g_{t}

1.4.2  SAG + Momentum

        SGD最大的缺点是下降速度慢,而且可能会在沟壑的两边持续震荡,停留在一个局部最优点。为了抑制SGD的震荡,Momentum 通过保持前一步的行动势头从而加速误差函数loss的收敛过程。如果当前一步与前一步的方向保持一致,那么即将迈出的步伐就会大一些,如果方向不一致则会因为受到上一步的权值影响减小反方向的步伐,从而对传统的梯度下降产生优化。

v=(1-\alpha )v+\alpha g_{t}
w=w-v

α表示的是学习率(learning rate),也就是下山例子中的步长值,所以学习率的设置影响着优化过程,通常设为0-0.1之间。v是实际迈出的步长,w是待优化的目标函数。        

1.4.3 自适应矩估计(Adam)

        Adam ( adaptive moment estimation)自适应矩估计算法是目前比较流行的一种优化算法 ,于2015 年在ICLR论文 Adam: A Method for Stochastic Optimisation被提出。Adam 算法根据梯度grad的一阶动量和二阶动量动态调整步长。动量我理解为历史上每一代t 的梯度对下一步步长的影响程度。Adam算法的步骤如下:

首先定义:待优化参数: w,目标函数: f(w) ,初始学习率 α。

而后,开始进行迭代优化。对每一代 t 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值