Adam的优点
现在很多深度网络都优先推荐使用Adam做优化算法,我也一直使用,但是对它的参数一知半解,对它的特性也只是略有耳闻,今天我终于花时间看了一下论文和网上的资料。整理如下。
Adam是从2个算法脱胎而来的:AdaGrad和RMSProp,它集合了2个算法的主要优点,同时也做了自己的一些创新,大概有这么几个卖点:
计算高效,方便实现,内存使用也很少。
更新步长和梯度大小无关,只和alpha、beta_1、beta_2有关系。并且由它们决定步长的理论上限。
对目标函数没有平稳要求,即loss function可以随着时间变化
能较好的处理噪音样本,并且天然具有退火效果
能较好处理稀疏梯度,即梯度在很多step处都是0的情况
Adam算法
Adam的伪代码其实很好理解,贴图如下:来自原文
从while循环往下看,第一行是更新step,
第二行是计算梯度,
第三行计算一阶矩的估计,即mean均值
第四行计算二阶距的估计,即variance,和方差类似,都是二阶距的一种。
第五、六行则是对mean和var进行校正,因为mean和var的初始值为0,所以它们会向0偏置,这样处理后会减少这种偏置影响。
第七行是梯度下降。注意alpha后的梯度是用一阶距和二阶距估计的。
Adam设计原理
为什么这么设计呢?Andrew Ng在他