Adam优化算法介绍

Adam是一种优化算法,全称时adaptive moment estimation(适应性矩估计)

SGD 和Adam

SGD( stochastic gradient descent随机梯度下降)与Adam(adaptive
随机梯度下降方法在权重更新时一直学习率是相同的,对于每个网络权重(参数),学习率不变。Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。

Adam原理

Adam结合了Adaptive Gradient Algorithm (AdaGrad,适应性梯度算法,为每个参数保留一个学习率,从而提高稀疏梯度问题的性能)和Root Mean Square Propagation (RMSProp,方根传播基于权重梯度最近量级的均值为每一个参数适应性地保留学习率。,该算法在在线和非平稳问题上都表现出色)的 优势

Adam 算法的偏差修正令其在梯度变得稀疏时要比 RMSprop 算法更快速和优秀。Insofar 和 Adam 优化算法基本是最好的全局选择。

优势

在非凸优化问题上使用Adam的吸引人的好处

  • 实现简单
  • 计算效率高。
  • 很少的内存需求
  • 非常适合于数据和/或参数较大的问题。
  • 适用于不稳定问题。
  • 噪音很多/稀疏的梯度计算
  • 超参数有直观的解释,通常不需要调整

Adam配置参数

  • alpha。也称为学习率或步长。权重的比例已更新(例如0.001)。较大的值(例如0.3)会导致更新速率之前的初始学习速度更快。较小的值(例如1.0E-5)会在beta1训练期间逐渐降低学习速度。

  • beta1 一阶矩估计的指数衰减率估算值(例如0.9)。

  • beta2。二阶矩估计的指数衰减率(例如0.999)。对于梯度稀疏的问题(例如NLP和计算机视觉问题),此值应设置为接近1.0。

  • epsilon。是一个很小的数字,以防止在实现中被零除(例如10E-8)。

测试机器学习问题比较好的默认参数设定为:alpha=0.001、beta1=0.9、beta2=0.999 和 epsilon=10E−8。

实践

问题:文本分类时,用了两种不同的优化器,SGD和Adam,Adam参数为

pytorch

optim.Adam(model.paramters(),lr=0.001,betas=(0.9,0.999),eps=1e-8,weight_decay=0,amsgrad=False)

发现第二轮loss几乎不变,而SGD正常。

网上搜索答案:有人也遇到过这种问题(https://stackoverflow.com/questions/47813715/pytorch-loss-value-not-change),但是别人的weight_decay=0.1,解决方法有两个,1. weight_decay设置为0.01,(weight_decay term is set to be 0.1. weight_decay is used to regularize the network’s parameters. This term maybe too strong so that the regularization is too much. Try to reduce the value of weight_decay),2.不要weight_decay(I realised that L2_loss in Adam Optimizer make loss value remain unchanged (I haven’t tried in other Optimizer yet). It works when I remove L2_loss)都不适用自己

解决:该SGD参数,只设置模型参数

参考:
https://machinelearningmastery.com/adam-optimization-algorithm-for-deep-learning/

你可能感兴趣的:(深度学习)