梯度下降的基本思想
假设你现在被困在云雾缭绕的山顶,需要找水。按照梯度下降的思想,就是每走一段路,测量出最陡的方向,然后向前,重复这个过程就能成功抵达山谷。
在这个故事中,大山代表了什么,又该如何确定梯度(陡峭度)呢?
梯度下降的基本原理
- 确定一个小目标——预测函数。如 y = w x y=wx y=wx,使其尽量拟合数据的分布。
- 找到差距——代价函数。首先需要量化数据的偏离程度,也就是误差,最常见的方法是均方误差,即所有点误差的平均值,表示了学习所需要付出的代价,因此常称为代价函数。在这个例子中,代价函数可以表示为
e
=
a
w
2
+
b
w
+
c
e=aw^2+bw+c
e=aw2+bw+c,是一个开口向上的抛物线。
通过定义预测函数,然后根据误差公式推导代价函数,将样本点拟合过程映射到了一个函数图像上。 - 明确搜索方向——梯度计算。机器学习的目标是拟合出最接近训练数据分布的函数,在这个例子中,也就是找到使训练参数误差最小的
w
w
w,对应在代价函数图像上,就是它的最低点,这个寻找最低点的过程就是梯度下降。
假定起始点在曲线上任意一处,直觉告诉我们,只要选择向陡峭程度最大的方向走,就能更快到达最低点,这个陡峭程度就是梯度,Gradient。它是代价函数的导数,对抛物线而言就是曲线斜率。 - 学习率。通过学习率调整权重的方式就是新 w w w=旧 w − w- w−斜率 ∗ * ∗学习率。
- 循环迭代。
梯度下降的基本步骤
-
初始化参数:随机初始化模型参数。
-
计算梯度:计算损失函数相对于参数的梯度。
-
更新参数:按照梯度下降公式更新参数:
θ = θ − η ∇ θ L ( θ ) \theta = \theta - \eta \nabla_\theta L(\theta) θ=θ−η∇θL(θ)
其中, θ \theta θ为参数, η \eta η 为学习率, ∇ θ L ( θ ) \nabla_\theta L(\theta) ∇θL(θ)为梯度。 -
迭代:重复计算梯度和更新参数,直到损失函数收敛。
变种
-
批量梯度下降(Batch Gradient Descent):
- 使用整个训练集计算梯度。
- 收敛稳定但计算量大。
-
随机梯度下降(Stochastic Gradient Descent, SGD):
- 使用单个训练样本计算梯度。
- 更新频繁但可能震荡。
-
小批量梯度下降(Mini-Batch Gradient Descent):
- 使用小批量训练样本计算梯度。
- 结合批量和随机梯度下降的优点,收敛效果好且效率高。
优化算法
-
动量法(Momentum):
- 加速收敛,减小振荡。
v = γ v + η ∇ θ L ( θ ) v = \gamma v + \eta \nabla_\theta L(\theta) v=γv+η∇θL(θ)
θ = θ − v \theta = \theta - v θ=θ−v
- 加速收敛,减小振荡。
-
AdaGrad:
- 自适应调整学习率。
θ = θ − η G t + ϵ ∇ θ L ( θ ) \theta = \theta - \frac{\eta}{\sqrt{G_t + \epsilon}} \nabla_\theta L(\theta) θ=θ−Gt+ϵη∇θL(θ)
- 自适应调整学习率。
-
RMSProp:
- 解决AdaGrad累加历史梯度问题。
E [ g 2 ] t = γ E [ g 2 ] t − 1 + ( 1 − γ ) g t 2 E[g^2]_t = \gamma E[g^2]_{t-1} + (1 - \gamma) g_t^2 E[g2]t=γE[g2]t−1+(1−γ)gt2
θ = θ − η E [ g 2 ] t + ϵ ∇ θ L ( θ ) \theta = \theta - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \nabla_\theta L(\theta) θ=θ−E[g2]t+ϵη∇θL(θ)
- 解决AdaGrad累加历史梯度问题。
-
Adam:
- 结合动量法和RMSProp,自适应学习率。
m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t mt=β1mt−1+(1−β1)gt
v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 vt=β2vt−1+(1−β2)gt2
m ^ t = m t 1 − β 1 t \hat{m}_t = \frac{m_t}{1 - \beta_1^t} m^t=1−β1tmt
v ^ t = v t 1 − β 2 t \hat{v}_t = \frac{v_t}{1 - \beta_2^t} v^t=1−β2tvt
θ = θ − η m ^ t v ^ t + ϵ \theta = \theta - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} θ=θ−ηv^t+ϵm^t
- 结合动量法和RMSProp,自适应学习率。
总结
梯度下降法通过不断更新模型参数来最小化损失函数,是训练机器学习模型的基本方法。不同的变种和优化算法可以针对不同的问题提供更高效和稳定的解决方案。