准备知识(可选择跳过)
momentum
参数初始化:m:momentum 系数;lr:learning rate 学习率;权重w
计算梯度和更新数度:g(t);v(t) = m*v(t-1)+lr*g(t)
更新参数:w(t) = w(t-1) - v(t)
备注:优点是学习速度快。避免sgd算法梯度更新幅度摆动大的问题。缺点是依赖全局的学习率。
adagrade和RMSprop
adagrade适应性梯度算法(adagrade、adadelta、RMSprop都是梯度自适应算法)
参数初始化:防止分母为0的很小的数(m);学习率lr;权重w
计算梯度:g(t)
计算累计梯度平方和:G(t) = G(t-1) + g(t)*g(t)
更新参数:w(t) = w(t-1) - lr*g(t)/sqrt(G(t)+m)
备注:累计梯度平方和,使得学习速度具有自适应性。出现频率高的特征学习率较小,出现频率低的学习率较大。缺点是累计梯度平方和最后容易过大,导致训练提前结束
RMSprop是adagrade的变体:采用历史累计梯度平方和当前梯度平方的加权平均
参数初始化:防止分母为0的很小的数(m);学习率lr;权重w;加权系数p;
梯度计算:g(t)
累计梯度:G(t) = (1-p)*G(t-1) +p*g(t)*g(t)
权重更新:w(t) = w(t-1) - lr*g(t)/sqrt(G(t)+m)
备注:善于处理非平稳目标
adam(adaptive moment estimation 自适应矩估计)
G(t) = beta2*G(t-1) + (1-beta2) * g(t)
初始化参数:学习率lr;beta1;beta2;权重w;防止分母为0的很小的数(e)
计算梯度:g(t)
计算有偏的一阶矩估计:m(t) = beta1*m(t-1) +(1-beta1)*g(t)(敲黑板,看看这是不是和momentum一样)
计算有偏的二阶矩估计:G(t) = beta2*G(t-1) +(1-beta2)*g(t)*g(t)(敲黑板,看看这是不是和RMSprop一样)
一阶矩的无偏估计:m'(t) = m(t)/(1-beta1)
二阶矩的无偏估计:G'(t) = G(t)/(1-beta2)
参数更新:w(t) =w(t-1) - lr*m'(t)/sqrt(G'(t)+)
备注:结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点
参考链接:
https://zhuanlan.zhihu.com/p/22252270
https://www.zhihu.com/question/325651810