目录
老饼讲解:一步一步上手学习

【优化】一篇入门之-RMSProp-算法

作者 : 老饼 发表日期 : 2025-12-17 00:02:39 更新日期 : 2026-05-11 01:00:11
老饼讲解-简单易懂,干货满满,爽过嗦螺!


RMSProp算法(均方根传播,Root Mean Square Propagation‌)是2012年提出的一种优化算法,它是AdaGrad算法的一种简单改进,它就是在AdaGrad算法的基础上引入了衰减系数,从而避免AdaGrad算法中出现的学习率衰减现象,下面我们就来具体看看RMSProp算法的具体公式和原理。

一、RMSProp算法-原理与公式

RMSProp算法是对AdaGrad算法的一种改进,它的提出就是为了解决AdaGrad算法学习率消失的问题。所以要了解RMSProp算法,需要先了解《AdaGrad算法》,好了,下面我们直接基于AdaGrad算法,来讲RMSProp算法。

不妨把第个待优化参数记为,则,RMSProp算法的更新公式如下:

           

                    

其中,:参数的梯度                                  

          :衰减系数,取值范围为[0,1]               

                :初始值为0,它实际就是的累计平方和

:学习率                                   

                 :一个极小的常数,它的作用避免分母为0 

可以看到,RMSProp就是在AdaGrad算法的基础上,对的更新公式进行了修改,RMSProp通过引入衰减系数来避免的无限增大,从而解决AdaGrad算法中学习率消失的问题。


二、RMSProp算法-代码与实现

下面我们来实现一下RMSProp算法,配合代码,就非常具体的理解AdaGrad算法了。

不妨设目标函数为:

下面我们使用RMSProp算法来求它的最小值。

由于RMSProp算法需要使用目标函数的梯度,所以需要先算出梯度,如下:

  ,

求出梯度后我们就可以编写代码了,RMSProp算法的具体实现代码如下:


"""
本代码展示RMSProp算法求y= (x1-2)^2+(x2-3)^2的最小解
本代码来自《老饼讲解-机器学习》www.bbblearn.com 
"""
import numpy as np
x     = np.array([0,0])                                             # 初始化x
lr    = 0.1                                                         # 设置学习率
gamma = 0.9                                                         # 设置衰减系数
s     = np.array([0,0])                                             # 初始化梯度累计量
esp   = 0.000001                                                    # 很小的常数
for i in range(100):                                                # 最大迭代100次
    g = np.array([2*x[0]-4, 2*x[1]-6])                              # 计算x的梯度  
    s  = gamma*s + (1-gamma)*g*g                                    # 更新梯度累计量
    x  = x - lr/np.sqrt(s+esp)*g                                    # 调整x
    y = (x[0]-2)**2+(x[1]-3)**2                                     # 当前函数值
    print("第 %d 轮迭代:x=[%.4f,%.4f],y=%.5f"%(i+1,x[0],x[1],y))    # 打印当前结果
    if((max(abs(g))< 0.0001) ):break                                # 如果梯度过小,则退出迭代

代码运行结果如下:

RMSProp优化结果

可以看到,经过了59轮迭代,所得到解已经非常接近真实极小解[2,3] 。

总结

总的来说,RMSProp算法就是AdaGrad算法的改进,它与AdaGrad算法是类似的,仅仅是引入衰减系数来避免学习率衰减的问题。所以总的来说,RMSProp算法就是既有自适应学习率,同时学习率稳定、不衰减。



图标 评论
添加评论