深度学习中的Momentum算法原理

一、介绍

    在深度学习中,Momentum(动量)优化算法是对梯度下降法的一种优化, 它在原理上模拟了物理学中的动量,已成为目前非常流行的深度学习优化算法之一。在介绍动量优化算法前,需要对 指数加权平均法 有所了解,它是动量优化算法的理论基础,可参见本人另外一篇博文:深度学习: 指数加权平均

物理学中动量的定义: 设物体的质量为 m,速度为 v,则动量 p=mv。Momentum算法模拟了动量,但是其核心公式和动量一点关系都没有。

 

二、背景

    下图表明了传统的梯度下降法会存在的问题,即训练轨迹会呈现锯齿状,这无疑会大大延长训练时间。同时,由于存在摆动现象,学习率只能设置的较小,才不会因为步伐太大而偏离最小值。

 

出现锯齿状的原因是: 

1、每一轮迭代使用的训练数据一般是小批量的,没有使用全部的训练数据,因此更新方向会发生锯齿状甚至随机震荡状;

2、某些梯度分量的值比另外一些分量的值要大的多,导致个别分量主导了梯度的更新方向,而期望的梯度更新方向却行进的非常缓慢,这正是Momentum算法要解决的问题。

 

三、优化思路

     一个很朴素的想法便是让纵向的摆动尽量小,同时保持横向的运动方向比较平稳。为此,需要知道梯度在过去的一段时间内的大致走向,以消除当前轮迭代梯度向量存在的方向抖动

    设第 t 轮迭代的梯度向量为 \textit{\textbf{w}}^t=\left [ w^t_1,w^t_2,w^t_3 \right ]^T,可以简单的通过对每个分量的历史取值进行加和来实现该目的,并将 \textit{\textbf{w}}^{t}_{ave} 作为新的梯度更新方向。

                                                                      \begin{bmatrix} w^1_1 & +\ w^2_1 & ... & +\ w^t_1\\ w^1_2 & +\ w^2_2 & ... & +\ w^t_2\\ w^1_3 & +\ w^2_3 & ... & +\ w^t_3 \end{bmatrix}=\begin{bmatrix} \sum_{i=0}^{t-1}w^i_1\\ \sum_{i=0}^{t-1}w^i_2\\ \sum_{i=0}^{t-1}w^i_3 \end{bmatrix}=\textit{\textbf{w}}^{t}_{ave}

    这种方法很简单,但每一轮梯度的计算权重相同,这会存在几点问题:

1、较早的梯度对梯度的大致走向预测几乎失去了作用;

2、较早的梯度抖动的较为严重,最近的梯度抖动要弱一些,如果权重都相同,梯度的大致走向预测可能不精确;

3、在梯度下降的后期,参数的搜索空间基本上处于一个凸集上,梯度的每个分量的大小和方向基本固定,不断的将大小和方向基本固定的分量做累加,梯度会变得非常大,造成无法收敛到局部最优。

    这个时候指数加权平均开始派上用场了。将上式的加和平均变成指数移动加权平均,并加入衰减率 \beta\in (0,1),并将 \dpi{120} v_{\textit{\textbf{w}}}^{'} 作为梯度的更新方向。这样较早的梯度权重几乎为 0,最近的梯度权重接近1。

                                                                \begin{bmatrix} \beta ^{t-1}w^1_1 & +\ \beta^{t-2} w^2_1 & ... & +\ \beta^0w^t_1\\ \beta ^{t-1}w^1_2 & +\ \beta ^{t-2}w^2_2 & ... & +\ \beta^0w^t_2\\ \beta ^{t-1}w^1_3 & +\ \beta ^{t-2}w^2_3 & ... & +\ \beta^0w^t_3 \end{bmatrix}=\begin{bmatrix} \sum_{i=0}^{t-1}\beta ^iw^i_1\\ \sum_{i=0}^{t-1}\beta ^iw^i_2\\ \sum_{i=0}^{t-1}\beta ^iw^i_3 \end{bmatrix}=v_\textit{\textbf{w}}^{'}

     通过指数加权平均,纵向的分量基本可以抵消,原因是锯齿状存在一上一下的配对向量,方向基本反向。因为从长期的一段时间来看,梯度优化的大方向始终指向最小值,因此,横向的更新方向基本稳定。新的梯度更新的轨迹如下图所示。

 

 

四、基于Momentum的梯度更新

     基本的梯度更新规则如下,其中 \eta 表示学习率。

                                                                              w\rightarrow w^{'}=w-\eta\frac{\partial C}{\partial w}

                                                                              b\rightarrow b^{'}=b-\eta\frac{\partial C}{\partial b}

     根据上述分析,引入指数加权平均后, v_{\textit{\textbf{w}}} 的更新规则为:

                                                                             v_w\rightarrow v^{'}_w=\beta v_w + \frac{\partial C}{\partial w}

                                                                             v_b\rightarrow v^{'}_b=\beta v_b + \frac{\partial C}{\partial b}

     新的梯度更新规则变为

                                                                             \dpi{120} w\rightarrow w^{'}=w- \eta v_w

                                                                             b\rightarrow b^{'}=b - \eta v_b

     关于摩擦系数 \beta

1、为 0 时,退化为未优化前的梯度更新;

2、为 1 时, 表示完全没有摩擦,如前所述,这样会存在大的问题;

3、取 0.9 是一个较好的选择。可能是 0.960 次方约等于 0.001,相当仅考虑最近的60轮迭代所产生的的梯度,这个数值看起来相对适中合理。

     注: 两个方向大致一致的向量 v_1 和 v_2 相加,其相加后的向量 v_3 的方向介于两个向量之间,但范数要大于任何其中一个向量的范数。

 

五、Momentum算法的本质

    该算法将一段时间内的梯度向量进行了加权平均,分别计算得到梯度更新过程中 w 和 b 的大致走向,一定程度上消除了更新过程中的不确定性因素(如摆动现象),使得梯度更新朝着一个越来越明确的方向前进。

  • 33
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
深度学习,优化器算法用于调整模型的参数以最小化损失函数。常见的优化器算法包括随机梯度下降(SGD)、动量法(Momentum)、AdaGrad、RMSProp和Adam等。 随机梯度下降(SGD)是最基本的优化器算法之一,它在每个训练样本上计算梯度并更新参数。然而,SGD的收敛速度较慢,并且容易陷入局部最优。 动量法(Momentum)通过引入动量项来加速收敛速度。它基于梯度的移动指数加权平均,使梯度的摆动幅度更加平缓。动量法的更新公式为:v = 0.8v - 0.2∇w, w = w - αv,其v表示动量,∇w表示梯度,α表示学习率。 AdaGrad算法根据参数的历史梯度信息来调整学习率。它对于稀疏数据和非平稳目标函数效果较好,但在训练过程学习率会不断减小,可能导致训练过早停止。 RMSProp算法通过对梯度的平方进行指数加权平均来调整学习率。它可以自适应地调整学习率,适用于非平稳目标函数。 Adam算法是一种结合了动量法和RMSProp的优化器算法。它不仅计算每个参数的对应学习率,还计算每个参数的对应动量变化并独立存储。Adam算法在实践表现良好,被广泛应用于深度学习。 总结来说,深度学习的优化器算法有多种选择,每种算法都有其优点和适用场景。根据具体的问题和数据集特点,选择合适的优化器算法可以提高模型的训练效果和收敛速度。 #### 引用[.reference_title] - *1* [深度学习 优化算法](https://blog.csdn.net/u012655441/article/details/121029471)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [深度学习之优化器(优化算法)](https://blog.csdn.net/qq_38375203/article/details/125142769)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [深度学习常见的优化算法](https://blog.csdn.net/qq_41296039/article/details/125194889)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值