Press "Enter" to skip to content

ADAM 与二阶优化算法的联系

广告:

 

ADAM(Adaptive Moment Estimation)对参数向量 的更新式子是这样的:

 

 

表示“赋值”,将右面的式子计算出来赋给左边的变量。我们先看第一个更新式。它用一个位于 区间的参数 乘上当前的 向量(数乘),再用 乘上损失函数 在当前参数 处的梯度 。迭代更新过程一开始时将 设为零向量。 一般取接近 1 的值,比如 0.9 。这一更新其实是用滑动平均将损失函数 在迭代过程中每一个参数向量 位置处的梯度积累到向量 中。如果我们用 向量更新参数向量 ,这其实本质上就是冲量法(Momentum)。向量 积累了损失函数的(在迭代更新过程中的)历史梯度,降低了梯度的随机变化。这本质上也是也是一种正则化手段。 作为滑动平均的衰减系数,它接近 1 时会更多保留梯度历史信息,当前位置的梯度经过很小的缩放( )才进入 中。 越大则惯性越大。

 

第二个式子仍是一个滑动平均,衰减系数为 (一般取 0.99)。信息被积累在向量 中。这次积累的信息是 。符号 表示两两个向量对应元素相乘得到一个新向量,于是 就是每个分量是梯度向量 对应分量的平方的向量。可以简单说它是梯度 的“平方”。

 

最后终于来到了参数向量 的更新式。 是学习率(Learning Rate)。首先 表示将向量 的个分量开平方。 积累了历史梯度的分量平方,到使用的时候需要把它的每个分量再开方,使它回到与梯度同样的数量级。 表示用 的每个分量除以 的对应分量。如果这里不是 ,而是梯度 ,则 就是用积累的历史梯度各分量的平方的开方,来除当前梯度的各个分量。这其实就是 RMSProp 法。本质上,它是对当前梯度的各个分量施加不同的“惩罚”。若梯度的某个分量在历史上一直有较大的绝对值,则 的相应分量会积累一个较大的值。用 的这个分量的开方去除当前梯度的对应分量,相当于对当前梯度的这个分量施加了一个较大的“惩罚”。若梯度的某个分量的绝对值在历史上一直较小,则对当前梯度对应分量的“惩罚”就会较轻。滑动平均衰减系数 小于 1 ,过于久远的历史梯度就会被慢慢“遗忘”掉。我们通过一个具体情况来看一下这幺做的意义:

 

上图中待优化的函数 是一个比较“病态”的二元(两个自变量)二次函数,它的何森矩阵正定,两个特征值都为正,但是差距较大。赫森矩阵的一个特征值大,一个特征值小,所以在大特征值的特征方向上二阶导大,在小特征值的特征方向上二阶导小。于是这个函数的等高线是非常“扁”的椭圆:长轴长,短轴小。图中的四个子图是采用了不同学习率的朴素梯度下降法。但无论学习率是大是小,梯度在大特征值的特征方向上的分量总是大于在小特征值方向上的分量。于是梯度总是指向“狭长峡谷”的“对岸”而不是指向谷底最低位置。这就导致了朴素梯度下降法的“震荡”(如左上)。若学习率取得再大,甚至有可能跃上“对岸”的更高处,导致训练过程不收敛。后面三个子图采用了更小的学习率,从轨迹上看是抑制了震荡,但是代价是更多的迭代步数,更长的训练时间。现在若我们采用 RMSProp 法,则起到的效果如下图示意:

 

上图展示了“峡谷”损失函数的等高线图。注意这里我们取了一个比较简单的情况,即损失函数的赫森矩阵是对角阵(非对角线元素为 0 ),所以它的两个特征方向就是自变量的两个坐标轴。纵轴是较大特征值的特征方向。损失函数在该方向上有较大二阶导,所以函数值快速下降又快速上升,这就是横穿峡谷的方向。横轴是较小特征值的特征方向,损失函数在改方向上有较小的二阶导,函数值缓慢下降再缓慢上升,这是沿着谷底行走的方向。假设某位置 位于图中所示的位置。损失函数在该位置的(反向)梯度是图中标记为 的箭头。它指向了对岸,而不是最优点(原点)。

 

在当前以及历史上,梯度严纵轴的分量一直(绝对值)较大,沿横轴的分量一直(绝对值)较小。 在纵轴上的分量较大,在横轴上的分量较小。经过除以 的“惩罚”,(反)梯度的纵轴分量被缩短较多,横轴分量被缩短较小。于是我们看到,经过调整后的 向量一定程度偏向了指向原点的方向。这就是 RMSProp 的作用。它以不同的强度惩罚梯度的不同分量,调整(反)梯度方向,减弱二阶导较大的坐标轴方向的影响。ADAM 综合了梯度法和 RMSProp 法。现在我们从一个更有趣、更深刻的角度来看待这些方法。

 

一个函数(数学上需要满足的精确条件我们不说了,就默认满足) 可以在自变量 处泰勒展开:

 

 

是对于变化向量 长度 的二阶无穷小量。这不是重点,我们不详述。就认为它是可忽略的误差即可。 是从 出发的一个变化向量。函数 在变化后的新位置 的值等于右边。右边第一项是函数 在原位置 处的值。第二项是函数 在原位置 处的梯度 与变化向量 的内积。到这一项为止是一阶泰勒展开。函数 在 处沿任意方向(用任意单位向量 表示)的方向导数等于 在 处的梯度向量 与 的内积。沿着变化向量 方向的单位向量是 ,于是 沿该方向的方向导数是导数是: 。沿着个方向前进的距离是 ,所以自变量发生变化 后函数值变化量的一阶(线性)近似是(方向导数乘上移动距离) 。这正是泰勒展开的第二项。方向导数既然是 , 是 与 之间的(锐)夹角,那幺当 ,即 ,也就是 取梯度反方向时,函数有最小(负)的方向导数。梯度反方向是函数值瞬时下降最快的方向。这就是梯度下降法的动机。

 

一阶泰勒展开是在局部用线性函数近似拟合原函数。纳入上式的第二项,就是函数在 处的二阶泰勒展开。这一项是关于变化向量 的二次型(Quadratic Form)。二阶泰勒展开是在局部用二次函数近似拟合原函数。矩阵 是函数 在 处的赫森矩阵(Hessian Matrix),它是:

 

 

赫森矩阵的第 行,第 列元素是函数 在 出先对 再对 的二阶偏导数。在满足连续性条件时(我们默认 满足),求偏导的顺序没影响,所以 是对称矩阵(这很重要,后文自明)。所有二阶偏导数都是关于 的函数,所以赫森矩阵也随着自变量 变化而变化。还有一点,我们假设赫森矩阵是正定的,也就是它的两个特征值都为正,它对应的二次函数是开口向上的“碗”。

 

以变化量 为自变量,赫森矩阵正定的二次函数有全局最小值,也是这个二次函数唯一的驻点 —— 梯度向量为零向量的点。要求这个全局最小点,只要求得该二次函数对 的梯度,零该梯度为零,解方程即可。二次函数(二阶泰勒展开)对 的梯度是:

 

 

解得: 。也就是说当变化向量 取这个值是,就一步走到了函数 在 处的近似二次函数的全局最小点。这就是“牛顿法”。梯度下降法根据函数局部的线性一阶近似判断函数值下降最快的方向,牛顿法根据函数的局部二阶(二次)近似直接来到二次近似的全局最小点。梯度下降法利用了函数的局部一阶信息。牛顿法利用了函数的局部二阶信息,它是基于二阶信息的优化算法。下图展示了在一个(我构造的)函数上牛顿法迭代的四步:

 

牛顿法的四步迭代

我们看到:牛顿法每一步的更新量 也基本上是 处的梯度反方向。但是梯度经过了一个修正,被左乘了 处的赫森矩阵 的逆矩阵。这会起到一个什幺效果呢?我们之前说了, 是对称矩阵,对阵矩阵可以进行特征值分解(谱分解):

 

 

是对角矩阵,对角线元素是 的从大到小(顺序不是必须的)排列的 个可重复的特征值(Eigenvalue): 。 是赫森矩(方)阵的行/列数,也是函数 的“元数”,即自变量空间的维数。 也是 方阵。它的 个列是 个特征值对应的特征向量(Eigenvector)。这 个特征向量是标准正交的,即它们本身是标准向量(模为 1),且它们两两之间正交。 是 的转置,它的每一行是每个特征向量“躺平”。最大特征值 的特征向量 是函数 在 处二阶导最大的方向,这个最大的二阶导就是 。第二大特征值 的特征向量 是函数 在 处在与 正交(垂直)的前提下,二阶导最大的方向,这个“次”大的二阶导就是 。以此类推。

 

这 个特征向量彼此正交,于是它们线性独立,所以它们构成 维向量空间(也就是自变量空间)的一组标准正交基,也就是说,它们构成了自变量空间的一个坐标系。 的列两两正交,且都是标准向量,所以 是正交矩阵: 。有了谱分解, 的逆矩阵就很容易得到了:

 

 

现在我们再来看牛顿法的更新式:

 

 

最右边是 。这是 方阵乘 维向量,还是一个 维向量。它的每个分量是每个特征向量(坐标轴)与反梯度的内积,也就是将反梯度向 表示的坐标系的各个坐标轴的投影。之后,再左乘矩阵 ,等于是用每个特征方向对应的特征值去除相应的投影分量。前文说过这些特征向量是函数 在各个特征方向上的二阶导,这就是用各个特征方向的二阶导数去除反梯度在各个特征方向上的投影分量。于是这些投影分量就受到了“惩罚”。二阶导大的特征方向上的分量受到的惩罚重,二阶导小的特征方向上的的分量受到的惩罚小。最后,再用受到惩罚后的各个分量将各个特征向量(坐标轴)线性组合起来。这个过程其实就是将反梯度向各个特征方向投影,用那些方向上的二阶导数缩放(惩罚)各分量,然后再组合回来。组合回来的就不再是反梯度了,它对反梯度进行了调整,惩罚削弱了二阶导大的方向上。直观看下图:

 

牛顿法对反梯度方向的调整

上图展示了四个二元( )二次函数。二次函数的赫森矩阵是“常数”,它不随自变量变化而变化。图中展示了某位置处的反梯度向量,两个特征值以及对应的特征向量(特征方向),反梯度向两个特征方向的投影分量(灰色),经过惩罚(除特征值/二阶导数)后的分量,用惩罚后的分量再将两个特征向量线性组合回来的向量(即 ,对反梯度进行了调整)。我们看到,经过调整后的向量直接指到了二次函数全局最小点 —— 在上图的例子中是原点,因为我们构造的这四个二次函数都是二次型,没有常数项和一次项。因为二次函数的二阶泰勒展开就精确是它自身(余项为 0 ),牛顿法一步定位到二阶泰勒展开的全局最小点,当然也就是原二次函数的全局最小点。对于普通函数,二阶泰勒展开不是原函数本身,只是一个足够好的二次近似,所以牛顿法起到的作用是根据二阶信息调整反梯度,惩罚二阶导较大的方向,削弱不平衡的二阶导造成的恶劣影响。

 

现在我们回顾比较一下 RMSProp 和 ADAM ,它们记录了历史上梯度各个分量的平方。这些分量不是在赫森矩阵的特征向量上的分量,而就是在原坐标系上的分量。根据这些分量平方惩罚梯度的各个分量。我们知道,导数是变化率,二阶导是一阶导的变化率。根据历史可以估计变化率,就好像你记录苏炳添所在位置的历史,可以近似计算他的速度。记录梯度各分量的历史就可以估计各分量的变化率,也就是原函数的二阶变化率(二阶导)。RMSProp 和 ADAM 不计算赫森矩阵,它依然不是二阶优化算法,而只是一阶优化算法。它们记录一阶信息(梯度)的历史,以之估计二阶信息。对(估计)二阶导较大的方向施加惩罚。但这些方向不是真正的二阶导最大、次大 …… 的方向,那雪妖计算赫森矩阵。它们只是在天然坐标系的各个方向上估二阶导并惩罚。所以 :RMSProp 和 ADAM 是对类似牛顿法这种二阶优化算法的模拟。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注