1. momentum动量
下图给出了梯度公式和增加了动量的梯度公式,β
z
k
z^k
zk其中的
z
k
z^k
zk就是上次的梯度,而β决定了
w
k
+
1
w^{k+1}
wk+1更偏向于上次梯度还是本次梯度。也就是说梯度增加了动量后,梯度更新要同时考虑上次的惯性和本次的梯度。
未加动量
加了动量
从两幅图可以看出加了动量比未加动量要平滑的多,未加动量很难找到全局极小值,而加了动量后找到全局极小值的概率要大的多。
2. pytorch增加momentum
如图中SGD优化器增加momentum参数,而Adam优化器是不支持输入动量参数的
3. 学习率衰减
下图为三种学习率模型曲线的不同表现,学习率太低训练比较慢,比如本来4天训完,结果可能10天才能训完,学习率太高loss震荡比较厉害很难找到极小值。
所谓学习率衰减就是开始使用较大的学习率,之后使用一定的策略使学习率不断减小,比如:有60k数据每训练10k学习率减小1/2
4. 学习率衰减的方式
4.1 loss连续几次无改善衰减
torch.optim.lr_scheduler.ReduceLROnPlateau函数的功能是,当loss在patience个连续epoch后没有改善时,就减小学习率factor倍
CLASS torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08, verbose='deprecated')
optimizer-优化器
mode-min或max,min:当度量的量停止减小时,减小学习率,max:当度量的量停止增大时,减小学习率,默认min
factor-每次减少倍率
4.2 步进式衰减
比如:每30k衰减0.1