前言
在pytorch常用的优化器有:Adam、SGD、Adaw,这里主要介绍Adam的来源
一、常用方法
1.梯度下降法
x += - learning_rate * dx
分为
batch梯度下降:训练样本数量巨大时,单次迭代耗时太长
mini-batch梯度下降:batch_size一般取2的几次方,取64到512
随机梯度下降(batch_size=1):失去所有向量化带给你的加速,一次性只处理一个样本,效率过于低下
2.动量法(Momentum)
v = beta1* v - (1-beta1) * dx 梯度影响速度,dx的移动平均数
x += - learning_rate*v 速度决定位置
可以减小梯度下降的幅度,beta1取0.9
3.RMSprop
以指数式递减加权的移动平均。各数值的加权而随时间而指数式递减,越近期的数据加权越重,但较旧的数据也给予一定的加权。
cache = beta2 * cache + (1 - beta2) * dx**2 # 梯度平方的指数加权平均(EMA)
x += - learning_rate * dx / (np.sqrt(cache) + eps) # 基于梯度更新
指数加权平均的好处是它极少占用内存
当dx较大时,cache较大,除以np.sqrt(cache),减缓该方向的变化
当dx较小时,cache较小,除以np.sqrt(cache),加快该方向的变化
消除梯度下降的摆动
防止np.sqrt(cache)趋于0,加上eps,论文作者取eps=1e-8
4.Adam
Momentum与RMSprop的结合
m = beta1*m + (1-beta1)*dx #动量法
v = beta2*v + (1-beta2)*(dx**2) #RMSprop
x += - learning_rate * m / (np.sqrt(v) + eps) #
吴恩达深度学习中介绍到:beta1默认0.9,beta2默认0.999,eps=1e-8
总结
这里主要介绍深度学习中常用的优化器,后续还有在bert中专门用到的AdamW优化器。