诚信为本,市场在变,诚信永远不变...
  咨询电话:400-123-4567

公司新闻

【优化器】(七) 优化器统一框架 & 总结分析

在前面六篇文章里,我们按照发展顺序分别介绍了六种经典的优化器,以及其内部的原理和公式。在这片文章里,我们将这几种优化器整理为统一框架,并横向对比它们的区别和优缺点。

首先我们介绍参与优化过程的变量及其含义:

  • 	heta:模型的权重,也是我们优化器更新的目标
  • f(w):损失函数,也是要优化的目标函数
  • g_{t}:在t时刻根据求解目标函数计算出来的梯度
  • m_{t}:在t时刻梯度的一阶动量
  • V_{t}:在t时刻梯度的二阶动量
  • \gamma:学习率
  • \lambda:正则化参数,用于减少权重大小

优化的流程如下:

1. 根据目标函数计算梯度值。一般来说目标函数即为损失函数,计算求导为0的极值点就可以最小化损失函数,即梯度。同时为了解决权重过大导致梯度爆炸和过拟合的问题,加入了正则化项。

g_{t} = \bigtriangledown f(w_{t})+\lambda 	heta _{t-1}

2. 根据历史梯度计算一阶动量和二阶动量。动量这个概念可能听上去不好理解,但是实际上它就是将历史的数据进行累加,在现有数据上考虑到了历史的数据。一阶动量就是累加一阶梯度,二阶动量就是累加二阶梯度。

m_{t}=\phi (g_{1},g_{2},...,g_{t})

V_{t}=\varphi (g_{1}^{2},g_{2}^{2},...,g_{t}^{2})

3. 更新权重。一阶动量使得在计算当前梯度的同时考虑到历史惯性,二阶动量根据历史更新频率对学习率进行适应性调整。

	heta _{t} = 	heta _{t-1} - \gamma \cdot m_{t}/\sqrt{V_{t}}


SGD是最基础的梯度下降方法,没有动量的概念,只单纯的考虑当前梯度:

m_{t}=g_{t}

V_{t}=I^{2}

  • 优点:简单易理解易实现,对小数据集有效
  • 缺点:学习率固定导致收敛震荡或缓慢,可能陷入局部最优解

SGD Momentum在SGD上加入了一阶动量,考虑了历史梯度信息:

m_{t}=\beta _{1}\cdot m_{t-1}+(1-\beta_{1})\cdot g_{t}

V_{t}=I^{2}

  • 优点:引入动量,加速收敛减少震荡,缓解陷入局部最优解的问题
  • 缺点:仍然可能陷入局部最优解

AdaGrad首次引入了二阶动量,每个权重可以自适应的调整学习率:

m_{t}=g_{t}

V_{t}=\sum_{	au =1}^{t}g_{	au }^{2}

  • 优点:自适应调整不同权重的学习率,收敛快
  • 缺点:二阶动量不断累加导致学习率逐渐减少,最后提前停止训练

RMSprop在AdaGrad基础上加入了二阶动量的历史衰减信息,类似于Momentum的一阶动量累加方式:

m_{t}=g_{t}

V_{t}=\beta _{2}\cdot V_{t-1}+(1-\beta _{2})\cdot g_{t}^{2}

  • 优点:通过衰减系数解决二阶动量逐渐减少的问题
  • 缺点:需要手动调整基础学习率

AdaDelta在RMSProp的基础上使二阶的描述更加精准,加入类似一阶动量的指数衰减移动均方根(RMS):

m_{t}=g_{t}

V_{t}=\beta _{2}\cdot V_{t-1}+(1-\beta _{2})\cdot g_{t}^{2}

u_{t}=\beta _{2}\cdot u_{t-1}+(1-\beta_{2})\cdot \bigtriangleup 	heta _{t}^{2}

	heta _{t} = 	heta _{t-1} - \gamma \cdot m_{t}\cdot \sqrt{u_{t}}/\sqrt{V_{t}}

  • 优点:没有学习率超参数,收敛快
  • 缺点:内存开销更大,计算量更大

Adam直接集成了一阶动量和二阶动量:

m_{t}=\beta _{1}\cdot m_{t-1}+(1-\beta_{1})\cdot g_{t}

V_{t}=\beta _{2}\cdot V_{t-1}+(1-\beta _{2})\cdot g_{t}^{2}

  • 优点:结合了动量和自适应学习率的优点,收敛较快
  • 缺点:对基础学习率较敏感,容易过拟合

AdamW在Adam的基础上,不再在梯度上加上惩罚项,而是直接对权重进行衰减:

	heta_{t} = 	heta _{t-1}-\gamma\cdot \lambda\cdot 	heta _{t-1}

m_{t}=\beta _{1}\cdot m_{t-1}+(1-\beta_{1})\cdot g_{t}

V_{t}=\beta _{2}\cdot V_{t-1}+(1-\beta _{2})\cdot g_{t}^{2}

  • 优点:解决Adam的过拟合问题,在大数据集上表现更优
  • 缺点:同样需要调整超参数

业务合作/学习交流+v:lizhiTechnology

?如果想要了解更多优化器相关知识,可以参考我的专栏和其他相关文章:

优化器_Lcm_Tech的博客-CSDN博客

【优化器】(一) SGD原理 & pytorch代码解析_sgd优化器-CSDN博客

【优化器】(二) AdaGrad原理 & pytorch代码解析_adagrad优化器-CSDN博客

【优化器】(三) RMSProp原理 & pytorch代码解析_rmsprop优化器-CSDN博客

【优化器】(四) AdaDelta原理 & pytorch代码解析_adadelta里rho越大越敏感-CSDN博客

【优化器】(五) Adam原理 & pytorch代码解析_adam优化器-CSDN博客

【优化器】(六) AdamW原理 & pytorch代码解析-CSDN博客

【优化器】(七) 优化器统一框架 & 总结分析_mosec优化器优点-CSDN博客

如果想要了解更多深度学习相关知识,可以参考我的其他文章:

【损失函数】(一) L1Loss原理 & pytorch代码解析_l1 loss-CSDN博客

【图像生成】(一) DNN 原理 & pytorch代码实例_pytorch dnn代码-CSDN博客

平台注册入口