常用的优化方法有梯度下降法,牛顿法,共轭梯度法,启法式和拉格朗日乘数法。
梯度下降法,最速下降法,越接近目标值,步长越小,前进越慢。可能会出现之字形下降。
BGD和SGD
牛顿法,二阶收敛。使用一阶导数做拟合,在拟合函数上求最优,得到二阶最优。
必须是二阶可导的。收敛比梯度下降要快。而且要计算Hessian阵。
共轭梯度法 共轭方向可以说是正交的
从任意初始点出发,依次沿nn个G的共轭方向d1,d2,⋯,dmd1,d2,⋯,dm进行一维寻优,最多经过nn次寻优就可以找到二次函数的极小值点
深度学习中的优化方法(两个思路,梯度方向,学习率)
普通的SGD 公式表示为
存在的问题:全局学习率无法确定,收敛于局部最优解。
两种解决思路有对梯度方向和学习率加动量项,通过求得的梯度对学习率做约束。
Momentum
在梯度相关时可以加速学习过程。
netsterov 动量项可以影响到梯度的计算
adagrad
动态的调整学习率的大小 。。借鉴了L2正则化的思想,当梯度较小时,正则项可以增加梯度,当梯度较大小,可以减小梯度。还是需要一个全局学习率,最后正则项不断加大,会使得学习率趋向于0。
RMSpro 只计算最近的W个梯度的平方和做为正则项,使用类似于动量计算的方式来做平均,得到正则项的计算公式为:。当p=0.5时,正则项可以用圴方根来描述。
adadelta 使用牛顿迭代法的方式来计算学习率,对于Hessisan逆矩阵计算的困难,做了两次近似,1、用矩阵对角线元素元素近似逆矩阵。
adam
在RMSPro的基础上,对梯度和学习率正则项加入了动量,移动平均的方法在迭代的前期,因为初值为0,会导致数值不准确,所以使用了一个修正项
梯度下降法在使用的时候可以使用:
重排法对数据进行洗牌,来增加模型的泛化性能,有一个研究领域叫做课程学习。
BatchNormal
早停来防止过拟合。
给梯度增加随机噪声。帮助跳出局部最小值。
参考文献:
https://zhuanlan.zhihu.com/p/22252270
https://www.cnblogs.com/neopenx/p/4768388.html
https://www.jiqizhixin.com/articles/2016-11-21-4
https://zh.gluon.ai/chapter_optimization/adadelta-scratch.html