损失函数有关自变量的梯度代表了损失函数在自变量当前位置下降最快的方向。因此,梯度下降也叫作最陡下降。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量,然而,如果自变量的迭代方向仅仅取决于自变量当前位置,可能会带来一些问题。
例如:损失函数为f(x)=0.1x12+2x22
该函数在x1,x2的斜率相差较大,如果给定学习率,梯度下降迭代自变量时,会使自变量在x2比在x1的移动幅度更大,可能会越过最优解;如果降低学习率,会造成在x1方向上朝最优解移动缓慢,收敛速度变慢。
动量法
动量法的提出就是为了解决上述问题。
设损失函数在时间步t的小批量随机梯度为gt,时间步t的自变量为xt,学习率为ηt。在时间步0,动量法创建速度变量v0,并将其初始化为0。在时间t>0,动量法对每次迭代的步骤做如下修改:
vt←γvt−1+ηtgtxt←xt−1−vt
其中动量超参数γ满足0<γ<1。且当γ=0时,动量法等价于小批量随机梯度下降。
动量法原理解释
(1)指数加权移动平均
给定超参数0≤γ<1,当前时间步t的变量yt是上一时间步t−1的变量yt−1和当前时间步另一变量xt的线性组合:
yt=γyt−1+(1−γ)xt
yt展开是:
yt=(1−γ)xt+γyt−1=(1−γ)xt+(1−γ)γxt−1+γ2yt−2=(1−γ)xt+(1−γ)γxt−1+(1−γ)γ2xt−2+γ3yt−3
令n=1/(1−γ),那么(1−1/n)n=γ1/(1−γ)
因为n→∞lim(1−n1)n=exp(−1)≈0.3679
所以当γ→1时,γ1/(1−γ)=exp(−1),如0.9520≈exp(−1)。如果把exp(−1)当作一个比较小的数,可以在近似中忽略所有含γ1/(1−γ)和比γ1/(1−γ)更高阶的系数的项。
例如,当γ=0.95时,yt≈0.05i=0∑190.95ixt−i
实际上,常常将yt看作是对最近1/(1−γ)个时间步的xt值加权平均。
(2)由指数加权移动平均理解动量法
对动量法的速度变量做变性
vt←γvt−1+(1−γ)(1−γηtgt)
由指数加权移动平均的形式可得,速度变量vt实际上对序列{ηt−igt−i/(1−γ):i=0,...,1/(1−γ)−1}做了指数加权移动平均。
相对于小批量随机梯度下降,动量法在每个时间步的自变量更新量近似于将前者对应的最近1/(1−γ)个时间步的更新量做了指数加权移动平均后再除以(1−γ)。所以在动量法中,自变量在各个方向上的移动幅度不仅取决于当前梯度,还取决于过去的各个梯度在各个方向上是否一致。