优化算法进阶——学习打卡

在这里插入图片描述
为最小化损失函数进行参数更新时,对于noisy gradient,我们需要谨慎的选取学习率和batch size, 来控制梯度方差和收敛的结果。
损失函数中的参数,单独进行更新时参数们的收敛速度一般是不同的,这种不同造成了更新过程中损失值的震荡,或者难以收敛。如:f(x)=0.1 * x1^2 + 2 * x2^2中,x2与x1的梯度更新速度相差20倍。

给定学习率,梯度下降迭代自变量时会使自变量在竖直方向比在水平方向移动幅度更大。那么,我们需要一个较小的学习率从而避免自变量在竖直方向上越过目标函数最优解。然而,这会造成自变量在水平方向上朝最优解移动变慢。但将学习率调得稍大一点,此时自变量在竖直方向不断越过最优解并逐渐发散

为缓解上述问题,可以采取两种方法。
1:Preconditioning的做法:在二阶优化中,我们使用Hessian matrix的逆矩阵(或者pseudo inverse)来左乘梯度向量。
2:Averaging history gradient。

Momentum

增加动量m,momentum算法更新参数的两种写法:
优化算法进阶——学习打卡_第1张图片
由指数加权移动平均理解动量法。由指数加权移动平均的形式可得,动量m 实际上对序列nt*gt/(1-B) 做了指数加权移动平均。指数加权移动公式:在这里插入图片描述在实际中,我们常常将yt看作是对最近1/(1-B) 个时间步的y值的加权平均。所以,在动量法中,自变量在各个方向上的移动幅度不仅取决于当前梯度,还取决于(考虑了)过去的各个梯度在各个方向上是否一致。

这样,我们就可以使用较大的学习率,从而使自变量向最优解更快移动。

AdaGrad

在“动量法”一节里我们看到当和的梯度值有较大差别时,需要选择足够小的学习率使得自变量在梯度值较大的维度上不发散。但这样会导致自变量在梯度值较小的维度上迭代过慢。

而AdaGrad算法中目标函数自变量中每个元素都分别拥有自己的学习率。更新公式为:
在这里插入图片描述
在这里插入图片描述
gt为小批量随机梯度。

RMSProp

我们在“AdaGrad算法”一节中提到,因为调整学习率时分母上的变量一直在累加按元素平方的小批量随机梯度,所以目标函数自变量每个元素的学习率在迭代过程中一直在降低(或不变)。

类似于“动量法”,RMSProp算法将梯度按元素平方做指数加权移动平均。
在这里插入图片描述
类似于AdaGrad,RMSProp目标函数自变量中每个元素都分别拥有自己的学习率。
在这里插入图片描述

AdaDelta

AdaDelta算法也是AdaGrad的改进版,其没有学习率这一超参数,但增加了一个状态变量:
在这里插入图片描述
该算法参数更新公式如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Adam

Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均

mt,时间步t的动量变量。gt,梯度。m0,v0=0,0
在这里插入图片描述
在这里插入图片描述
mt,vt均作偏差修正。
优化算法进阶——学习打卡_第2张图片
在这里插入图片描述
在这里插入图片描述

上述总结自:https://www.kesci.com/org/boyuai/project/5e47c7ac17aec8002dc5652a
感谢!

你可能感兴趣的:(深度学习,python)