反向传播算法
在上一篇文章中,我们构建了一个神经网络,了解了前向传播是如何产生预测的,也知道了损失函数可以衡量预测有多差。但我们遗留了最核心的问题:那13,002个参数到底该怎么调整,才能让网络变得更好? 这就是反向传播算法(Backpropagation)要回答的问题。它是神经网络学习的核心引擎,几乎所有现代深度学习的训练都建立在它之上。 一、梯度下降:从直觉开始 1.1 一个简单的类比 想象你站在一片浓雾中的山地上,看不到全貌,但你能感受到脚下地面的倾斜方向。你的目标是找到最低的山谷。最自然的策略是什么? 顺着脚下最陡的下坡方向走一小步。 这就是**梯度下降(Gradient Descent)**的核心思想。 1.2 数学表述 假设损失函数 $L$ 取决于所有参数 $\theta = (w_1, w_2, ..., w_n, b_1, b_2, ..., b_m)$。 梯度是一个向量,指向损失增长最快的方向: $$\nabla L = \left(\frac{\partial L}{\partial w_1}, \frac{\partial L}{\partial w_2}, \cdots, \frac{\partial L}{\partial b_m}\right)$$梯度的每个分量告诉我们:如果微微增大某个参数,损失会增加多少。 要降低损失,我们朝梯度的反方向迈步: $$\theta_{\text{new}} = \theta_{\text{old}} - \eta \cdot \nabla L$$其中 $\eta$ 是学习率(learning rate),控制每一步的步长。 1.3 学习率的微妙之处 学习率 下降行为 结果 太小 每步挪动极小,到达局部最小值后就停住了,无法跳出 收敛极慢,可能困在局部最小值 太大 一步跨过了最低点,又跨回来,反复来回 在最低点附近震荡,甚至发散 合适 每步大小适中,沿着曲面稳步走向谷底 稳步下降,逐渐逼近最优解 1.4 梯度下降的关键问题 现在整个问题归结为一件事:怎么高效地计算 $\nabla L$,即损失对每一个参数的偏导数? 你可能会想:对每个参数微微扰动一下,看看损失变化了多少。但如果有13,002个参数,每个参数都扰动一次,就需要做13,002次前向传播——太慢了。 ...