参考文章:Adam那么棒,为什么还对SGD念念不忘
1.优化算法的历程:
SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam
SGDM、NAG - 只加入了一阶动量 AdaGrad、AdaDelta - 只加入了二阶动量 Adam、Nadam - 既有一阶动量,又有二阶动量
目前最常用的只剩SGD(相当于单反,需要手动配置光圈等参数)、Adam(相当于手机,自动调节各参数)。建议:如果能够熟悉每个参数的意义,更推荐使用SGD来自行调整参数的学习率。一阶动量的解释:更多地保持前有样本的梯度方向,减少当前样本梯度的随机性导致对网络优化左右跳动。二阶动量的解释:对于经常更新的参数,已经积累了大量关于它的知识,不希望被单个样本影响太大,希望这些参数的学习率慢一些;对于偶尔更新的参数,了解的信息较少,希望能从每个偶然出现的样本身上多学一些,即学习率大一些。β(指数加权参数)的作用:避免一阶持续累积导致当前样本很难影响学习方向的问题;二阶动量持续累积导致训练过程提前结束的问题。指数加权平均值的偏差修正: –疑问:β的值往往接近于1,使用一阶动量/(1- β)的方法,会不会导致修正后的值过大? 答:一阶、二阶动量的初始值均为0,在初期的一段时间,也非常接近于0,这个估计是 有问题的,因此采用1-β的方法进行修正。各个变量的下标t,表示的是每次迭代iter(而非epoch)。一 阶动量、二阶动量均为矩阵,每个元素分别对应网络中的某个参数 w i w_{i} wi。