机器学习优化器总结

摘要:
从表达式来看,模型参数的更新调整,与代价函数关于模型参数的梯度有关,即沿着梯度的方向不断减小模型参数,从而最小化代价函数。

一、梯度下降法

1、标准梯度下降法(GD)

公式:Wt+1=WtηtΔJ(Wt)

其中,WtWt表示tt时刻的模型参数。

从表达式来看,模型参数的更新调整,与代价函数关于模型参数的梯度有关,即沿着梯度的方向不断减小模型参数,从而最小化代价函数。

基本策略可以理解为”在有限视距内寻找最快路径下山“,因此每走一步,参考当前位置最陡的方向(即梯度)进而迈出下一步。可以形象的表示为:

机器学习优化器总结第1张

缺点:

训练速度慢:每走一步都要要计算调整下一步的方向,下山的速度变慢。在应用于大型数据集中,每输入一个样本都要更新一次参数,且每次迭代都要遍历所有的样本。会使得训练过程及其缓慢,需要花费很长时间才能得到收敛解。
容易陷入局部最优解:由于是在有限视距内寻找下山的反向。当陷入平坦的洼地,会误以为到达了山地的最低点,从而不会继续往下走。所谓的局部最优解就是鞍点。落入鞍点,梯度为0,使得模型参数不在继续更新。
2、批量梯度下降法(BGD)

假设批量训练样本总数为nn,每次输入和输出的样本分别为X(i),Y(i),模型参数为W,代价函数为J(W),每输入一个样本i代价函数关于W的梯度为ΔJi(Wt,X(i),Y(i)),学习率为ηt,则使用批量梯度下降法更新参数表达式为:

Wt+1=Wtηti=1nΔJi(Wt,X(i),Y(i))

从表达式来看,模型参数的调整更新与全部输入样本的代价函数的和(即批量/全局误差)有关。即每次权值调整发生在批量样本输入之后,而不是每输入一个样本就更新一次模型参数。这样就会大大加快训练速度。

基本策略可以理解为,在下山之前掌握了附近的地势情况,选择总体平均梯度最小的方向下山。

评价:批量梯度下降法比标准梯度下降法训练时间短,且每次下降的方向都很正确。

3、随机梯度下降法(SGD)

对比批量梯度下降法,假设从一批训练样本n中随机选取一个样本is。模型参数为W,代价函数为J(W),梯度为ΔJ(W),学习率为ηt,则使用随机梯度下降法更新参数表达式为:

Wt+1=Wt−ηtgt

其中,gt=ΔJis(Wt;X(is);X(is)), is∈{1,2,...,n}表示随机选择的一个梯度方向,Wt表示tt时刻的模型参数。
E(gt)=ΔJ(Wt),这里虽然引入了随机性和噪声,但期望仍然等于正确的梯度下降。
基本策略可以理解为随机梯度下降像是一个盲人下山,不用每走一步计算一次梯度,但是他总能下到山底,只不过过程会显得扭扭曲曲。
机器学习优化器总结第2张

优点:

虽然SGD需要走很多步的样子,但是对梯度的要求很低(计算梯度快)。而对于引入噪声,大量的理论和实践工作证明,只要噪声不是特别大,SGD都能很好地收敛。
应用大型数据集时,训练速度很快。比如每次从百万数据样本中,取几百个数据点,算一个SGD梯度,更新一下模型参数。相比于标准梯度下降法的遍历全部样本,每输入一个样本更新一次参数,要快得多。
缺点:

SGD在随机选择梯度的同时会引入噪声,使得权值更新的方向不一定正确。

此外,SGD也没能单独克服局部最优解的问题。

二、动量优化法

动量优化方法是在梯度下降法的基础上进行的改变,具有加速梯度下降的作用。一般有标准动量优化方法Momentum、NAG(Nesterov accelerated gradient)动量优化方法。

1、Momentum

使用动量(Momentum)的随机梯度下降法(SGD),主要思想是引入一个积攒历史梯度信息动量来加速SGD。
从训练集中取一个大小为nn的小批量{X(1),X(2),...,X(n)}{X(1),X(2),...,X(n)}样本,对应的真实值分别为Y(i)Y(i),则Momentum优化表达式为:
机器学习优化器总结第3张

其中,vt表示t时刻积攒的加速度。α表示动力的大小,一般取值为0.9(表示最大速度10倍于SGD)。ΔJ(Wt,X(is),Y(is))含义见SGD算法。Wt表示tt时刻模型参数。

动量主要解决SGD的两个问题:一是随机梯度的方法(引入的噪声);二是Hessian矩阵病态问题(可以理解为SGD在收敛过程中和正确梯度相比来回摆动比较大的问题)。
理解策略为:由于当前权值的改变会受到上一次权值改变的影响,类似于小球向下滚动的时候带上了惯性。这样可以加快小球向下滚动的速度。
2、NAG

牛顿加速梯度(NAG, Nesterov accelerated gradient)算法,是Momentum动量算法的变种。更新模型参数表达式如下:

机器学习优化器总结第4张

其中,vt表示t时刻积攒的加速度;α表示动力的大小;ηt表示学习率;Wt表示tt时刻的模型参数,ΔJ(Wtαvt1)表示代价函数关于Wt的梯度。

Nesterov动量梯度的计算在模型参数施加当前速度之后,因此可以理解为往标准动量中添加了一个校正因子。
理解策略:在Momentun中小球会盲目地跟从下坡的梯度,容易发生错误。所以需要一个更聪明的小球,能提前知道它要去哪里,还要知道走到坡底的时候速度慢下来而不是又冲上另一个坡。计算Wt−αvt−1可以表示小球下一个位置大概在哪里。从而可以提前知道下一个位置的梯度,然后使用到当前位置来更新参数。
在凸批量梯度的情况下,Nesterov动量将额外误差收敛率从O(1/k)(k步后)改进到O(1/k2)。然而,在随机梯度情况下,Nesterov动量对收敛率的作用却不是很大。
三、自适应学习率优化算法

自适应学习率优化算法针对于机器学习模型的学习率,传统的优化算法要么将学习率设置为常数要么根据训练次数调节学习率。极大忽视了学习率其他变化的可能性。然而,学习率对模型的性能有着显著的影响,因此需要采取一些策略来想办法更新学习率,从而提高训练速度。
目前的自适应学习率优化算法主要有:AdaGrad算法,RMSProp算法,Adam算法以及AdaDelta算法。
1、AdaGrad算法

AdaGrad算法,独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平均值总和的平方根。具有代价函数最大梯度的参数相应地有个快速下降的学习率,而具有小梯度的参数在学习率上有相对较小的下降。

AdaGrad算法优化策略一般可以表示为:

机器学习优化器总结第5张

假定一个多分类问题,i表示第i个分类,t表示第t迭代同时也表示分类i累计出现的次数。η0表示初始的学习率取值一般为0.01,ϵ是一个取值很小的数(一般为1e-8)为了避免分母为0。Wt表示t时刻即第t迭代模型的参数,gt,i=ΔJ(Wt,i)表示tt时刻,指定分类i,代价函数J(⋅)关于WW的梯度。
从表达式可以看出,对出现比较多的类别数据,Adagrad给予越来越小的学习率,而对于比较少的类别数据,会给予较大的学习率。因此Adagrad适用于数据稀疏或者分布不平衡的数据集。
Adagrad 的主要优势在于不需要人为的调节学习率,它可以自动调节;缺点在于,随着迭代次数增多,学习率会越来越小,最终会趋近于0。
2、RMSProp算法

RMSProp算法修改了AdaGrad的梯度积累为指数加权的移动平均,使得其在非凸设定下效果更好。

RMSProp算法的一般策略可以表示为:

机器学习优化器总结第6张

其中,Wt表示tt时刻即第t迭代模型的参数,gt=ΔJ(Wt)表示t次迭代代价函数关于W的梯度大小,E[g2]t表示前t次的梯度平方的均值。α表示动力(通常设置为0.9),η0表示全局初始学习率。ϵ是一个取值很小的数(一般为1e-8)为了避免分母为0。
RMSProp借鉴了Adagrad的思想,观察表达式,分母为机器学习优化器总结第7张。由于取了个加权平均,避免了学习率越来越低的的问题,而且能自适应地调节学习率。
RMSProp算法在经验上已经被证明是一种有效且实用的深度神经网络优化算法。目前它是深度学习从业者经常采用的优化方法之一。
3、AdaDelta算法

AdaGrad算法和RMSProp算法都需要指定全局学习率,AdaDelta算法结合两种算法每次参数的更新步长即:

机器学习优化器总结第8张

AdaDelta算法策略可以表示为:

机器学习优化器总结第9张

其中Wt为第t次迭代的模型参数,gt=ΔJ(Wt)为代价函数关于W的梯度。E[g2]t表示前t次的梯度平方的均值。∑i=1t−1ΔWi表示前t−1次模型参数每次的更新步长累加求根。
从表达式可以看出,AdaDelta不需要设置一个默认的全局学习率。
评价:

在模型训练的初期和中期,AdaDelta表现很好,加速效果不错,训练速度快。

在模型训练的后期,模型会反复地在局部最小值附近抖动。

4、Adam算法

首先,Adam中动量直接并入了梯度一阶矩(指数加权)的估计。其次,相比于缺少修正因子导致二阶矩估计可能在训练初期具有很高偏置的RMSProp,Adam包括偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩估计。

Adam算法策略可以表示为:

机器学习优化器总结第10张

其中,mt和vt分别为一阶动量项和二阶动量项。β1,β2为动力值大小通常分别取0.9和0.999;m^t,v^t分别为各自的修正值。Wt表示t时刻即第t迭代模型的参数,gt=ΔJ(Wt)表示t次迭代代价函数关于W的梯度大小;ϵ是一个取值很小的数(一般为1e-8)为了避免分母为0
评价:

Adam通常被认为对超参数的选择相当鲁棒,尽管学习率有时需要从建议的默认修改。

免责声明:文章转载自《机器学习优化器总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇oracle double和float,number 羽毛uniapp画布基本使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

对偶上升

强对偶条件成立(对偶问题和原问题最优解一致) 原问题转化为最小化含最优对偶变量的拉格朗日函数 利用梯度上升法。更新x和对偶变量第一步x最小化,第二步对偶变量更新。 利用了梯度上升法求极大值(梯度下降是求极小值) 梯度用了约束条件的残差有点费解! 对偶分解: 一个f(x)是separable,能分成n个 这n个就可以并行运算了。 为了计算总的残差residu...

梯度下降和EM算法,kmeans的em推导

I. 牛顿迭代法给定一个复杂的非线性函数f(x),希望求它的最小值,我们一般可以这样做,假定它足够光滑,那么它的最小值也就是它的极小值点,满足f′(x0)=0,然后可以转化为求方程f′(x)=0的根了。非线性方程的根我们有个牛顿法,所以 然而,这种做法脱离了几何意义,不能让我们窥探到更多的秘密。我们宁可使用如下的思路:在y=f(x)的x=xn这一点处,我...

计算流体模拟理论2

二维的NS-方程:   这个方程一定要拆分成部分才能解出来。 这里面我感觉只要把泊松方程解法搞定,基本快出山写最简单的 "计算流体" 完全没问题 以下是做了个初始的source field,用python numpy 先快速撸了一遍算法。 并且重新实现3d版本在Houdini中,houdini有更好的可视化. velocity advection 是RK...

梯度

1. 梯度 梯度的本质:梯度是方向导数最大值的反方向,因此梯度是函数值下降最快的方向。 在谈梯度之前我们需要先了解导数,跟方向导数的概念 1.1 导数 导数大家都很熟悉,即某个点在函数上的变化率。这个点不止是一元函数上的点,即只有一个变量。也有可能是二元,三元函数上的点不止一个自变量。但都表示某个点的在函数上的变化率。比如下面分别表示一元函数导数跟二元函数...

9个最佳的大数据处理编程语言(转载自物联网智库)

大数据的浪潮仍在继续。它渗透到了几乎所有的行业,信息像洪水一样地席卷企业,使得软件越发庞然大物,比如Excel看上去就变得越来越笨拙。数据处理不再无足轻重,并且对精密分析和强大又实时处理的需要变得前所未有的巨大。 刚开始学习数据科学的人都会面对同一个问题: 不知道该先学习哪种编程语言。 不仅仅是编程语言,像Tableau,SPSS等软件系统也是同样的情况...

机器学习——正则化与交叉验证

0正则化 模型选择的典型方法是正则化。正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项或惩罚项。正则化一般是模型复杂度的单调递增函数,模型越越复杂,正则化的值就越大,比如,正则化项可以是模型参数向量的范数: 其中,第1项是经验风险,第二项是正则化项,a>=0为调整两者之间的关系函数。 正则化项可以取不同的形式。例如,回归问题中,损失函...