优化器
文章平均质量分 91
Lcm_Tech
这个作者很懒,什么都没留下…
展开
-
【优化器】(七) 优化器统一框架 & 总结分析
在前面六篇文章里,我们按照发展顺序分别介绍了六种经典的优化器,以及其内部的原理和公式。在这片文章里,我们将这几种优化器整理为统一框架,并横向对比它们的区别和优缺点。优化的流程如下:1. 根据目标函数计算梯度值。一般来说目标函数即为损失函数,计算求导为0的极值点就可以最小化损失函数,即梯度。同时为了解决权重过大导致梯度爆炸和过拟合的问题,加入了正则化项。2. 根据历史梯度计算一阶动量和二阶动量。动量这个概念可能听上去不好理解,但是实际上它就是将历史的数据进行累加,在现有数据上考虑到了历史的数据。原创 2023-07-20 13:01:19 · 744 阅读 · 0 评论 -
【优化器】(六) AdamW原理 & pytorch代码解析
在之前的文章里,我们介绍了集成一阶动量和二阶动量的优化器Adam。AdamW其实是在Adam的基础上加入了weight decay正则化,但是我们上一篇文章里也看到了Adam的代码中已经有正则化,那么两者有什么区别呢?其实AdamW和Adam唯一的区别,就是weight decay的加入方式。在Adam当中,weight decay是直接加入到梯度当中原创 2023-07-19 19:39:03 · 21784 阅读 · 0 评论 -
【优化器】(五) Adam原理 & pytorch代码解析
在之前的文章了,我们学习了SGD,以及在其基础上加了一阶动量的SGD Momentum,还有在其基础上加了二阶动量的AdaGrad、AdaDelta、RMSProp。那么自然而然就会想到把一阶动量和二阶动量结合起来,这样就形成了我们常用的优化器Adam原创 2023-07-18 14:47:39 · 13879 阅读 · 4 评论 -
【优化器】(四) AdaDelta原理 & pytorch代码解析
在上一篇文章里,我们介绍了RMSProp,在AdaGrad的基础上引入了衰减量,从而解决不断地累加二阶动量导致最终学习率会接近于0以及训练提前终止的问题,AdaDelta在这基础上做了进一步改进。类似于RMSProp,也使用了衰减的方法使得二阶动量不会一直累加,公式如下:其中,为当前step的二阶动量,为上一个step的二阶动量,为历史二阶动量的衰减率。同时AdaDelta还不光考虑了二阶动量,还应该考虑一阶的影响,认为应该在学习率上去乘以一个描述的项原创 2023-07-17 14:59:30 · 1690 阅读 · 1 评论 -
【优化器】(三) RMSProp原理 & pytorch代码解析
在上一篇文章里,我们介绍了AdaGrad,引入了二阶动量来调整不同参数的学习速率,同时它的缺点就是不断地累加二阶动量导致最终学习率会接近于0导致训练提前终止,RMSProp主要针对这个问题进行了优化。AdaGrad的二阶动量计算公式为其中,为当前时刻的二阶动量,是某一时刻的梯度,表示迄今所有梯度的平方和。问题就在于这个求和上,不断地累加导致学习率为0。在AdaGrad的基础上,对二阶动量的计算进行了改进:我想有历史梯度的信息,但是我又不想让信息一直膨胀,那么只要让历史信息一直衰减就好了。原创 2023-07-14 15:04:29 · 2672 阅读 · 1 评论 -
【优化器】(二) AdaGrad原理 & pytorch代码解析
在上一篇文章里,我们介绍了SGD这个最朴素的梯度下降方法,以及其Momentum和NAG的优化改进方法。我们现在又回过头来看这个没加Momentum的图,可以看到在垂直方向上的梯度较大,走得很快,而水平方向上的位移较小,走的很慢,看着就很急!但你先别急,那么能不能不使用Momentum就让水平方向上的位移大一点,垂直方向上的位移小一点呢?我们想要迄今为止梯度大的参数(即垂直方向)更新得慢一点,梯度小的参数(即水平方向)更新得快一点,这个就是二阶动量的定义原创 2023-07-13 16:44:44 · 1752 阅读 · 1 评论 -
【优化器】(一) SGD原理 & pytorch代码解析
很多情况下,我们调用优化器的时候都不清楚里面的原理和构造,主要基于自己数据集和模型的特点,然后再根据别人的经验来选择或者尝试优化器。下面分别对SGD的原理、pytorch代码进行介绍和解析。原创 2023-07-12 18:11:00 · 9185 阅读 · 8 评论