A#Optimization Algorithm
SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam
Framework
Before we begin, we should define some definition:
SGD
the most simple optimization algorithm
Update:
Because SGD doesn’t use momentum, so
$m_t=g_t,V_t=I^2$
SGDM(SGD with Momentum)
$m_t=\beta_1\cdot m_{t-1}+(1-\beta_1)\cdot g_t$
$\eta_t=\alpha\cdot g_t$
t时刻的下降方向,不仅由当前点的梯度方向决定,而且由此前累积的下降方向决定
Nesterov Accelerated Gradient(NAG)
NAG在步骤1,不计算当前位置的梯度方向,而是计算如果按照累积动量走了一步,那个时候的下降方向:
然后用下一个点的梯度方向,与历史累积动量相结合,计算步骤2中当前时刻的累积动量。
AdaGrad
The beginning of using Second order momentum
二阶动量越大,学习率就越小。
也存在一些问题:因为$\sqrt{V_t} $是单调递增的,会使得学习率单调递减至0,可能会使得训练过程提前结束,即便后续还有数据也无法学到必要的知识。
AdaDelta / RMSProp
由于AdaGrad单调递减的学习率变化过于激进,我们考虑一个改变二阶动量计算方法的策略:不累积全部历史梯度,而只关注过去一段时间窗口的下降梯度。这也就是AdaDelta名称中Delta的来历。
Adam
Adam 运用上了一阶动量和二阶动量
Nadam
…继续进化,加上Nesterov