1. 梯度下降的核心:一步

想象一个盲人站在山坡上想走到谷底。他只能通过脚感受当前位置的坡度(梯度),然后朝着下坡最陡的方向(梯度的反方向)迈出一小步(学习率)。这就是梯度下降的核心思想。

动手试试:

下图的抛物线是山坡 `J(w) = w²`,红点是盲人。调整学习率(步长),点击“走一步”,观察红点如何根据当前位置的切线(坡度)移动。

# 损失函数 J(w) = w^2 # 梯度 dJ/dw = 2w # 更新规则 w_new = w_old - learning_rate * (2*w_old)
计算过程:

2. 梯度下降法动画

梯度下降就是不断重复“走一步”的过程。通过多次迭代,参数点会逐渐逼近损失函数的最小值。学习率的大小至关重要:太大可能会在谷底来回“震荡”甚至“飞出”,太小则收敛速度过慢。

动手试试:

设置一个起始点和学习率,然后点击“运行梯度下降”,观察参数 `w` 留下的“足迹”,看看它如何自动走向谷底。

w = 4.0 # 初始位置 learning_rate = 0.10 for i in range(20): # 迭代20次
gradient = 2 * w
w = w - learning_rate * gradient

3. 局部最优与全局最优

如果山坡不止一个谷底(非凸函数),盲人可能会走到一个较浅的谷底(局部最优)就停下了,而错过了那个最深的谷底(全局最优)。这是梯度下降法面临的一大挑战。

动手试试:

下图是一个有多个谷底的函数。选择不同的起始点,运行梯度下降,观察它会陷入哪个“山谷”。

# 复杂函数 # f(x) = x^4 - 4x^2 + 5 # f'(x) = 4x^3 - 8x # 梯度下降可能会陷入局部最优 # 而不是找到全局最优解 x=0
最终收敛结果: