400-123-4567

RMSProp/Momentum/Adam/AdamW,多种优化器详解及伪代码实现发布日期:2024-07-29 14:40:04 浏览次数:
多种梯度更新方法——都是对Gradient Descent的优化
 
 

在这里插入图片描述

  • 为了解决不同方向上梯度涨落速度不一致的情况,所以相当于给每个方向不同的learning_rate。
  • 具体每个方向的lr大小要怎么拟定?——之前该方向上grad大的,就给小lr——即梯度变化幅度缓慢,那么就拉开步子大胆走。如上图的公式,历史grad总量和lr大小成反比,即该方向的总grad越小,则lr就越大。
  • 但该方法解决不了,在该方向上梯度先大再小的情况(如 RMSProp 图一)。

在这里插入图片描述

在这里插入图片描述

  • 如图一, RMSProp 可解决这种grad在某一方向一会儿变化缓慢一会儿变化剧烈的情况
    具体公式如图2.注意公式中的 ,可将之看作“decay_rate”,它相乘的 ,保存了全部的历史的grad,即 。通过调整 的大小,可权衡新的lr是偏向新grad还是历史grad。
  • 实际上的RMSProp公式和这里的稍有出入,见下图3。RMSProp共有2个超参数,对下图而言,就是 和 ,这里 对应李宏毅教程就是,我们还是称之为 。

在这里插入图片描述

 

超参数: ,

在这里插入图片描述

  • 思路:梯度的更新,应考虑到此前梯度的变化情况——这次是在方向上的考虑,即加上“惯性”。其中,原梯度越大,对下一步梯度的“转向影响程度”越大。
  • 该方法有一个超参数,每一步真实的梯度 ,从原求导结果 变为了。
  • 需要注意的是,momentum和以上两个方法不太一样。以上两个还可以被称为对学习率的调整,但momentum和学习率无关,它的改动项直接加在学习率和原梯度的乘积上。
 

超参数:

在这里插入图片描述

如图所示,是Adam优化器的伪代码。我们详细来看

  • 首先,看数字1标识处:对参数进行初始化。其中是Momentum,指的是动量,即使用历史梯度平滑过的梯度; 是RMSProp式中的 (见李宏毅RMSProp部分的slide截图),即记录了全部历史grad,并用此进行梯度的指数加权平均。
  • 绿色五角星:循环条件——被优化的参数没有收敛。这个没啥可说的~
  • 数字2标识处:首先,当然是通过当前batch计算这一步的梯度
  • 数字3标识处:先计算即动量momentum,并涉及第一个超参数 。其实这里算法和momentum是几乎一样的,所以 这里的作用也是对历史梯度和当前梯度的衡量;
  • 数字4标识处:RMSProp的因数计算,和RMSProp里 计算步骤完全一样,略
  • 5.1、5.2:bias-纠正计算,没仔细了解就不妄下结论了
  • 数字6:将 结果整合到一起,更新参数的梯度
 
 

简单来说,AdamW就是Adam优化器加上L2正则,来限制参数值不可太大,这一点属于机器学习入门知识了。以往的L2正则是直接加在损失函数上,比如这样子:
L o s s = L o s s + 1 2 λ ∑ θ i ∈ Θ θ i 2 Loss = Loss + \frac{1}{2}\lambda\sum_{ heta_i \in \Theta} heta_i ^2 Loss=Loss+21?λθi?Θ?θi2?
但AdamW稍有不同,如下图所示:
在这里插入图片描述
粉色部分,为传统L2正则施加的位置;而AdamW,则将正则加在了绿色位置。至于为何这么做?直接摘录BERT里面的原话看看——

 

总之就是说,如果直接将L2正则加到loss上去,由于Adam优化器的后序操作,该正则项将会与和产生奇怪的作用。具体怎么交互的就不求甚解了,求导计算一遍应该即可得知。
因而,AdamW选择将L2正则项加在了Adam的和等参数被计算完之后、在与学习率lr相乘之前,所以这也表明了weight_decay和L2正则虽目的一致、公式一致,但用法还是不同,二者有着明显的差别。以BERT中的AdamW代码为例,具体是怎么做的一望便知:

 

如code,注意BERT这里的 就是当前的learning_rate。而最后两行就涉及的计算。如果我们将AdamW伪代码第12行的公式稍加化简,会发现实际上这一行大概是这样的:
θ t = θ t ? 1 ? l r ? g r a d θ ? l r ? λ ? θ t ? 1 heta_t = heta_{t-1} - lr * grad_ heta - lr * \lambda* heta_{t-1} θt?=θt?1??lr?gradθ??lr?λ?θt?1?
此处 λ \lambda λ就是。再将上述公式最后一项和code最后一行对比,是不是一模一样呢。


平台注册入口