Adam算法是最常用的自适应学习率算法。对于优化器而言,学习率显然是最为重要的超参数之一。
https://zhuanlan.zhihu.com/p/32626442
总结:无论是SGD系列的优化算法或者是Adam系列的优化算法,其根本的依据都是先使用反向传播算法求出损失函数相对于网络模型每层网络权值的梯度,然后再根据对于当前batch size的训练样本得到的梯度值对网络权值进行更新,仅仅是更新使用的策略不同而已,假设梯度向量记作g,进行权值更新之前的权值为θ,用粗体字标出的是向量,未用粗体字标出的是标量
随机梯度下降法:(今天面试被问到,随机梯度下降法的随机体现在哪里?我当时说的是通常说的随机梯度下降法是batch size=1,但是现在理解可能还有一个地方是随机的:从整个训练数据集中随机采样出 mini batch的样本进行当前批次的训练样本,这个采样的过程是随机的),
θ=θ-lr*g
带有动量学习率的随机梯度下降法:
θ=momentum*θ-(1-momentum)*lr*g 一阶动量
自适应学习率算法系列(所谓的自适应并不仅仅是说能够自动地调整学习率的大小,并且还能对于不同的网络模型参数分量,自适应的采用不同的学习率)
Adagrad
初始的累计梯度平方和,初始化为0 r=0
r=r+g(element wise product)g 更新完r后,用r来动态地调整学习率
θ=θ-(lr/sqrt(r+delta))*g element wise operation
RMSprop
考虑到Adagrad使用的累计梯度平方和是从开始训练一直到当前时刻所累积的平方和,RMS prop仅仅使用上一次的r和当前的梯度值来更新r,二阶动量
初始的累计梯度平方和,初始化为0 r=0
r=moment*r+(1-momentum)*g(element wise product)g 更新完r后,用r来动态地调整学习率
θ=θ-(lr/sqrt(r+delta))*g element wise operation
Adam
Adam相当于momentum-SGD中的一阶动量(对于梯度本身引入动量)和RMS Prop中的二阶动量(对于梯度的变化率即自适应的学习率这一项引入了动量)的结合
Adam的全局学习率通常设置成lr=1e-3
beta1=0.9 beta2=0.999 delta=1e-8 累积一阶动量s 累计二阶动量 r
首先计算一阶动量更新