曾经多次看到别人说起,在选择Optimizer的时候默认就选Adam。这样的建议其实比较尴尬,如果有一点科学精神的人,其实就会想问为什么,并搞懂这一切,这也是我开这个Optimizer系列的原因之一。前面介绍了Momentum,也介绍了RMSProp,其实Adam就是二者的结合,再加上偏差修正(Bias Correction)。
首先,在Adam算法迭代过程中,需要计算各个时刻梯度的Exponential Moving Average,这一步骤来源于Momentum算法:
第二,计算各个时刻梯度平方的Exponential Moving Average,这一步骤来源于RMSProp算法:
第三步,分别对二者最Bias Correction:
最后,将算法合并: