常见的梯度下降算法有:全局梯度下降算法、随机梯度下降算法、小批量梯度下降算法
基本表示方法为:
但是梯度学习算法也会有一些问题,如学习率(即更新步长)的设定对于最终的求解效果有较大的影响,还有可能会陷入局部最优。为了解决这些问题,便有人研究一些梯度下降的优化算法:
- Momentum(动量)
在一些比较多局部极值的函数,采用梯度下降会在这些地方进行徘徊,从而收敛速度回下降,在这中情况下我们添加动量记性结局。原理就是当此刻梯度下降的方向与前一时刻的梯度下降方向相同,就会增大此刻的梯度下降速度。如果与前一时刻的方向相反,则需要减低该方向上的梯度下降速度。这样就会保证在错误的方向上不会偏移太多,让梯度下降更加迅速,如下公式所示,m为超参数,一般设置为0.9:
- ADAM算法(Adaptive Moment Estimation)
在论文的摘要里面说了,这个算法是使用基于自适应低阶矩估计的一阶梯度算法来优化目标函数(这里矩估计MM和最大似然估计MLM是概率论里面常见的模型参数估计方法),
Beta1=0.9, beta2=0.999
对一阶矩m进行矫正,因为m的初始值为0,所以它会向0偏置,这样处理后会减少这种偏置的影响,的作用同理,上标t代表的是指数为t,该论文使用了 Zinkevich 2003 年提出的在线学习框架分析了 Adam 算法的收敛性。
我写了一个简单的matlab程序(需要使用matconvnet),分别比较了SGD、momentum、ADAM算法,可以去我的资源库下载,不需要积分
主要链接
https://arxiv.org/pdf/1412.6980.pdf
https://blog.csdn.net/sinat_36618660/article/details/100026261
矩估计:https://wenku.baidu.com/view/9fd23cfe03d276a20029bd64783e0912a3167c31.html
论文翻译:http://www.ijiandao.com/2b/baijia/63540.html