RMSProp(Root Mean Square Propagation)
RMSProp(Root Mean Square Propagation)是一种自适应学习率优化算法,用于加速梯度下降过程并提高收敛性。它通过引入梯度的移动平均和学习率的自适应调整,使得参数更新能够更好地适应不同的梯度尺度。
RMSProp的原理
RMSProp 的核心思想是保持梯度平方的移动平均,并使用这个移动平均值来调整学习率,从而使参数更新更加稳定和高效。具体来说,RMSProp的更新公式如下:
-
计算梯度平方的移动平均:
E [ g 2 ] t = β E [ g 2 ] t − 1 + ( 1 − β ) g t 2 E[g^2]_t = \beta E[g^2]_{t-1} + (1 - \beta) g_t^2 E[g2]t=βE[g2]t−1+(1−β)gt2
其中:
- E [ g 2 ] t E[g^2]_t E[g2]t是第 t t t次迭代的梯度平方的移动平均。
- β \beta β是衰减率,通常取值在0到1之间,控制移动平均的权重。
- g t g_t gt是第 t t t次迭代的梯度。 -
更新参数:
θ t = θ t − 1 − α E [ g 2 ] t + ϵ g t \theta_t = \theta_{t-1} - \frac{\alpha}{\sqrt{E[g^2]_t + \epsilon}} g_t θt=θt−1−E[g2]t+ϵαgt
其中:
- θ t \theta_t θt是第 t t t次迭代的参数。
- α \alpha α是学习率。
- ϵ \epsilon ϵ是一个小常数,用于防止除零错误,通常取 1 0 − 8 10^{-8} 10−8。
具体数据示例
假设我们有一个简单的线性回归问题,训练数据集如下:
x | y |
---|---|
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
我们要拟合的线性模型为 h ( θ ) = θ 0 + θ 1 x h(\theta) = \theta_0 + \theta_1 x h(θ)=θ0+θ1x。
步骤1:初始化参数
假设 θ 0 = 0 \theta_0 = 0 θ0=0, θ 1 = 0 \theta_1 = 0 θ1=0,学习率 α = 0.01 \alpha = 0.01 α=0.01,衰减率 β = 0.9 \beta = 0.9 β=0.9,并且初始化梯度平方的移动平均 E [ g 2 ] 0 = 0 E[g^2]_0 = 0 E[g2]0=0。
步骤2:计算梯度
损失函数
J
(
θ
)
J(\theta)
J(θ)为均方误差(MSE):
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
(
θ
)
−
y
i
)
2
J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h(\theta) - y_i)^2
J(θ)=2m1∑i=1m(h(θ)−yi)2
其中,
m
m
m是训练样本的数量。
对于第一个样本
(
x
1
,
y
1
)
=
(
1
,
2
)
(x_1, y_1) = (1, 2)
(x1,y1)=(1,2),模型预测值为:
h
(
θ
)
=
θ
0
+
θ
1
x
1
=
0
h(\theta) = \theta_0 + \theta_1 x_1 = 0
h(θ)=θ0+θ1x1=0
计算损失函数对参数的梯度:
∂
J
∂
θ
0
=
h
(
θ
)
−
y
1
=
0
−
2
=
−
2
\frac{\partial J}{\partial \theta_0} = h(\theta) - y_1 = 0 - 2 = -2
∂θ0∂J=h(θ)−y1=0−2=−2
∂
J
∂
θ
1
=
(
h
(
θ
)
−
y
1
)
x
1
=
−
2
⋅
1
=
−
2
\frac{\partial J}{\partial \theta_1} = (h(\theta) - y_1) x_1 = -2 \cdot 1 = -2
∂θ1∂J=(h(θ)−y1)x1=−2⋅1=−2
步骤3:更新梯度平方的移动平均和参数
-
更新梯度平方的移动平均:
E [ g 2 ] 1 = β E [ g 2 ] 0 + ( 1 − β ) g 1 2 = 0.9 × 0 + 0.1 × ( − 2 ) 2 = 0.4 E[g^2]_1 = \beta E[g^2]_0 + (1 - \beta) g_1^2 = 0.9 \times 0 + 0.1 \times (-2)^2 = 0.4 E[g2]1=βE[g2]0+(1−β)g12=0.9×0+0.1×(−2)2=0.4 -
更新参数:
θ 0 = θ 0 − α E [ g 2 ] 1 + ϵ g 1 = 0 − 0.01 0.4 + 1 0 − 8 × ( − 2 ) ≈ 0.01 \theta_0 = \theta_0 - \frac{\alpha}{\sqrt{E[g^2]_1 + \epsilon}} g_1 = 0 - \frac{0.01}{\sqrt{0.4 + 10^{-8}}} \times (-2) \approx 0.01 θ0=θ0−E[g2]1+ϵαg1=0−0.4+10−80.01×(−2)≈0.01
θ 1 = θ 1 − α E [ g 2 ] 1 + ϵ g 1 = 0 − 0.01 0.4 + 1 0 − 8 × ( − 2 ) ≈ 0.01 \theta_1 = \theta_1 - \frac{\alpha}{\sqrt{E[g^2]_1 + \epsilon}} g_1 = 0 - \frac{0.01}{\sqrt{0.4 + 10^{-8}}} \times (-2) \approx 0.01 θ1=θ1−E[g2]1+ϵαg1=0−0.4+10−80.01×(−2)≈0.01
第二次迭代
假设下一次随机选择的样本是 ( x 2 , y 2 ) = ( 2 , 3 ) (x_2, y_2) = (2, 3) (x2,y2)=(2,3)。
-
计算新的预测值:
h ( θ ) = θ 0 + θ 1 x 2 = 0.01 + 0.01 × 2 = 0.03 h(\theta) = \theta_0 + \theta_1 x_2 = 0.01 + 0.01 \times 2 = 0.03 h(θ)=θ0+θ1x2=0.01+0.01×2=0.03 -
计算新的梯度:
∂ J ∂ θ 0 = h ( θ ) − y 2 = 0.03 − 3 = − 2.97 \frac{\partial J}{\partial \theta_0} = h(\theta) - y_2 = 0.03 - 3 = -2.97 ∂θ0∂J=h(θ)−y2=0.03−3=−2.97
∂ J ∂ θ 1 = ( h ( θ ) − y 2 ) x 2 = − 2.97 × 2 = − 5.94 \frac{\partial J}{\partial \theta_1} = (h(\theta) - y_2) x_2 = -2.97 \times 2 = -5.94 ∂θ1∂J=(h(θ)−y2)x2=−2.97×2=−5.94 -
更新梯度平方的移动平均:
E [ g 2 ] 2 = β E [ g 2 ] 1 + ( 1 − β ) g 2 2 = 0.9 × 0.4 + 0.1 × ( − 2.97 ) 2 = 0.9 × 0.4 + 0.1 × 8.8209 = 0.88209 + 0.36 = 1.24209 E[g^2]_2 = \beta E[g^2]_1 + (1 - \beta) g_2^2 = 0.9 \times 0.4 + 0.1 \times (-2.97)^2 = 0.9 \times 0.4 + 0.1 \times 8.8209 = 0.88209 + 0.36 = 1.24209 E[g2]2=βE[g2]1+(1−β)g22=0.9×0.4+0.1×(−2.97)2=0.9×0.4+0.1×8.8209=0.88209+0.36=1.24209 -
更新参数:
θ 0 = θ 0 − α E [ g 2 ] 2 + ϵ g 2 = 0.01 − 0.01 1.24209 + 1 0 − 8 × ( − 2.97 ) ≈ 0.037 \theta_0 = \theta_0 - \frac{\alpha}{\sqrt{E[g^2]_2 + \epsilon}} g_2 = 0.01 - \frac{0.01}{\sqrt{1.24209 + 10^{-8}}} \times (-2.97) \approx 0.037 θ0=θ0−E[g2]2+ϵαg2=0.01−1.24209+10−80.01×(−2.97)≈0.037
θ 1 = θ 1 − α E [ g 2 ] 2 + ϵ g 2 = 0.01 − 0.01 1.24209 + 1 0 − 8 × ( − 5.94 ) ≈ 0.037 \theta_1 = \theta_1 - \frac{\alpha}{\sqrt{E[g^2]_2 + \epsilon}} g_2 = 0.01 - \frac{0.01}{\sqrt{1.24209 + 10^{-8}}} \times (-5.94) \approx 0.037 θ1=θ1−E[g2]2+ϵαg2=0.01−1.24209+10−80.01×(−5.94)≈0.037
第三次迭代
假设下一次随机选择的样本是 ( x 3 , y 3 ) = ( 3 , 4 ) (x_3, y_3) = (3, 4) (x3,y3)=(3,4)。
-
计算新的预测值:
h ( θ ) = θ 0 + θ 1 x 3 = 0.037 + 0.037 × 3 = 0.148 h(\theta) = \theta_0 + \theta_1 x_3 = 0.037 + 0.037 \times 3 = 0.148 h(θ)=θ0+θ1x3=0.037+0.037×3=0.148 -
计算新的梯度:
∂ J ∂ θ 0 = h ( θ ) − y 3 = 0.148 − 4 = − 3.852 \frac{\partial J}{\partial \theta_0} = h(\theta) - y_3 = 0.148 - 4 = -3.852 ∂θ0∂J=h(θ)−y3=0.148−4=−3.852
∂ J ∂ θ 1 = ( h ( θ ) − y 3 ) x 3 = − 3.852 × 3 = − 11.556 \frac{\partial J}{\partial \theta_1} = (h(\theta) - y_3) x_3 = -3.852 \times 3 = -11.556 ∂θ1∂J=(h(θ)−y3)x3=−3.852×3=−11.556 -
更新梯度平方的移动平均:
E [ g 2 ] 3 = β E [ g 2 ] 2 + ( 1 − β ) g 3 2 = 0.9 × 1.24209 + 0.1 × ( − 3.852 ) 2 = 1.117881 + 1.4849 = 2.602781 E[g^2]_3 = \beta E[g^2]_2 + (1 - \beta) g_3^2 = 0.9 \times 1.24209 + 0.1 \times (-3.852)^2 = 1.117881 + 1.4849 = 2.602781 E[g2]3=βE[g2]2+(1−β)g32=0.9×1.24209+0.1×(−3.852)2=1.117881+1.4849=2.602781 -
更新参数:
θ 0 = θ 0 − α E [ g 2 ] 3 + ϵ g 3 = 0.037 − 0.01 2.602781 + 1 0 − 8 × ( − 3.852 ) ≈ 0.061 \theta_0 = \theta_0 - \frac{\alpha}{\sqrt{E[g^2]_3 + \epsilon}} g_3 = 0.037 - \frac{0.01}{\sqrt{2.602781 + 10^{-8}}} \times (-3.852) \approx 0.061 θ0=θ0−E[g2]3+ϵαg3=0.037−2.602781+10−80.01×(−3.852)≈0.061
θ 1 = θ 1 − α E [ g 2 ] 3 + ϵ g 3 = 0.037 − 0.01 2.602781 + 1 0 − 8 × ( − 11.556 ) ≈ 0.071 \theta_1 = \theta_1 - \frac{\alpha}{\sqrt{E[g^2]_3 + \epsilon}} g_3 = 0.037 - \frac{0.01}{\sqrt{2.602781 + 10^{-8}}} \times (-11.556) \approx 0.071 θ1=θ1−E[g2]3+ϵαg3=0.037−2.602781+10−80.01×(−11.556)≈0.071
总结
RMSProp通过保持梯度平方的移动平均并使用它来调整学习率,使得参数更新更加稳定和高效。通过具体数据的示例,我们可以看到RMSProp如何在每次迭代中逐步计算移动平均并更新参数,从而加速模型的收敛。