先看前向计算
神经网络可以看成一张计算图:节点保存中间结果,边表示数据如何参与下一步计算。 前向传播从输入开始,依次计算预测值和损失,并保留反向计算需要的局部信息。
z = wx + b ŷ = σ(z) L = ℓ(ŷ, y)
反向传播在传什么
反向传播传递的是“损失对当前节点输出的导数”。每个节点只需要把上游梯度乘以自己的局部导数, 再把结果传给它的输入。
∂L/∂w = ∂L/∂ŷ · ∂ŷ/∂z · ∂z/∂w
这就是链式法则。复杂网络只是拥有更多节点、分支和共享参数,基本动作没有改变。
为什么计算图很重要
- 每个算子只实现自己的局部导数,不需要理解整个模型。
- 同一个中间结果被多条路径使用时,来自不同路径的梯度需要相加。
- 自动微分框架按图的逆拓扑顺序执行这些局部计算。
参数如何更新
得到梯度后,优化器沿着降低损失的方向更新参数。最简单的梯度下降写作:
w ← w − η · ∂L/∂w
学习率 η 决定每次迈多大一步。反向传播负责求梯度,优化器负责使用梯度;两者是相邻但不同的过程。