更好的优化方法
当损失在一些方向敏感,而在其他方向不敏感的话,更新线效率会很低。另一个问题是在鞍点或局部最低点时,会让函数卡住。还有一个问题是SGD的随机性:当处在噪音环境下时,SGD的随机性会是使计算速度大幅下降。
为了改善上述问题,我们引入了动量项:
它是保持一个时间变化的速度,并且将梯度估计添加到这个速度上,然后在这个速度的方向上步进。
在速度上还有一个表示摩擦系数的超参数来对速度进行衰减。
于是,当搜索到局部最低点或鞍点时,即使梯度为0,但因为仍然具有速度,所以会冲破该点(听上去就像是给搜索点加了惯性和摩擦力)。
对这个方法,还有另一种方案:Nesterov Momentum。前者是在搜索点分别计算梯度和速度,然后计算其合方向;后者则是先计算速度,然后在使用这个速度到达的点处计算梯度,然后再朝着梯度的方向前进(按照直觉,后者的效率应该更高些)。
但是Nesterov Momentum的问题是,它将速度和梯度的计算分开,这会造成应用上的不便。为了解决这个问题,我们使用换元法: