搜索

耀世资讯

公司动态
行业新闻

联系我们

Contact us

电话:400-123-4567
Q Q:1234567890
邮箱:admin@youweb.com
地址:广东省广州市天河区88号

【优化器】(三) RMSProp原理 & pytorch代码解析

发布时间:2024-04-15 12:45:26 作者:佚名

在上一篇文章里,我们介绍了AdaGrad,引入了二阶动量来调整不同参数的学习速率,同时它的缺点就是不断地累加二阶动量导致最终学习率会接近于0导致训练提前终止,RMSProp主要针对这个问题进行了优化。


AdaGrad的二阶动量计算公式为

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

其中,V_{t}为当前时刻的二阶动量,g_{	au }^{}是某一时刻的梯度,\sum_{	au =1}^{t}g_{	au }^{2}表示迄今所有梯度的平方和。问题就在于这个求和上,不断地累加导致学习率为0。

RMSProp在AdaGrad的基础上,对二阶动量的计算进行了改进:我想有历史梯度的信息,但是我又不想让信息一直膨胀,那么只要让历史信息一直衰减就好了。因此得到RMSProp的二阶动量计算公式:

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

其中,V_{t}为当前step的二阶动量,V_{t-1}为上一个step的二阶动量,\beta为历史二阶动量的衰减率,这是二阶动量会更加注重于近期的梯度,同时也不会叠加到无穷大。


看到RMSProp的二阶动量公式会觉得似曾相识,这个是不是和SGD的Momentum很像呢?但是这两者其实是不同的东西。

不加Momentum的RMSProp更新梯度公式为:

\eta_{t} = \alpha \cdot g_{t}/\sqrt{V_{t}}

w_{t+1} = w_{t} - \eta _{t}

加了Momentum的RMSProp更新梯度公式为:

\eta_{t} = \gamma \eta _{t-1} + \alpha \cdot g_{t}/\sqrt{V_{t}}

w_{t+1} = w_{t} - \eta _{t}

可以看到RMSProp的惯性公式主要针对二阶动量V_{t},而Momentum的惯性公式主要针对更新的梯度参数,两者可以同时应用。


RMSProp的伪代码流程如下,可以看到除了weight_decay和刚才我们说的Momentum之外,还多了一个centered的参数,其主要是对梯度通过估计方差来进行归一化,主要操作就是让二阶动量去减去平均梯度的平方,这样会使得结果更加平稳:

以下代码为pytorch官方RMSProp的代码。

 

业务合作/学习交流+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博客

热线电话:400-123-4567
电子邮箱:admin@youweb.com
Q Q:1234567890
地址:广东省广州市天河区88号
备案号:
耀世娱乐-耀世平台-耀世加盟站

关注我们

Copyright © 2002-2017 耀世-耀世平台-耀世加盟站 版权所有

平台注册入口