在前面六篇文章里,我们按照发展顺序分别介绍了六种经典的优化器,以及其内部的原理和公式。在这片文章里,我们将这几种优化器整理为统一框架,并横向对比它们的区别和优缺点。
首先我们介绍参与优化过程的变量及其含义:
优化的流程如下:
1. 根据目标函数计算梯度值。一般来说目标函数即为损失函数,计算求导为0的极值点就可以最小化损失函数,即梯度。同时为了解决权重过大导致梯度爆炸和过拟合的问题,加入了正则化项。
2. 根据历史梯度计算一阶动量和二阶动量。动量这个概念可能听上去不好理解,但是实际上它就是将历史的数据进行累加,在现有数据上考虑到了历史的数据。一阶动量就是累加一阶梯度,二阶动量就是累加二阶梯度。
3. 更新权重。一阶动量使得在计算当前梯度的同时考虑到历史惯性,二阶动量根据历史更新频率对学习率进行适应性调整。
SGD是最基础的梯度下降方法,没有动量的概念,只单纯的考虑当前梯度:
SGD Momentum在SGD上加入了一阶动量,考虑了历史梯度信息:
AdaGrad首次引入了二阶动量,每个权重可以自适应的调整学习率:
RMSprop在AdaGrad基础上加入了二阶动量的历史衰减信息,类似于Momentum的一阶动量累加方式:
AdaDelta在RMSProp的基础上使二阶的描述更加精准,加入类似一阶动量的指数衰减移动均方根(RMS):
Adam直接集成了一阶动量和二阶动量:
AdamW在Adam的基础上,不再在梯度上加上惩罚项,而是直接对权重进行衰减:
业务合作/学习交流+v:lizhiTechnology
?如果想要了解更多优化器相关知识,可以参考我的专栏和其他相关文章:
【优化器】(一) 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博客
如果想要了解更多深度学习相关知识,可以参考我的其他文章:
公司名称: 亚游-亚游娱乐-注册登录站
手 机: 13800000000
电 话: 400-123-4567
邮 箱: admin@youweb.com
地 址: 广东省广州市天河区88号