示例:简单神经网络中的链式法则与反向传播
网络结构:
- 输入: x = 2
- 线性层: z = w \cdot x + b (参数: w = 1 , b = 0 )
- 激活函数:Sigmoid a = \sigma(z) = \frac{1}{1 + e^{-z}}
- 损失函数:平方损失 L = (a - y)^2 ,真实值 y = 0.5
步骤 1:前向传播计算
- 线性层输出:
z = w \cdot x + b = 1 \cdot 2 + 0 = 2
- 激活值:
a = \sigma(2) = \frac{1}{1 + e^{-2}} \approx 0.8808
- 损失值:
L = (0.8808 - 0.5)^2 \approx 0.145
步骤 2:反向传播(链式法则逐层计算梯度)
目标:计算损失 L 对 w 和 b 的梯度 \frac{\partial L}{\partial w} 和 \frac{\partial L}{\partial b} 。
计算步骤 | 公式与结果 |
---|---|
1. 损失对激活值的导数 | \frac{\partial L}{\partial a} = 2(a - y) = 2(0.8808 - 0.5) \approx 0.7616 |
计算步骤 | 公式与结果 |
2. Sigmoid 导数 | \frac{\partial a}{\partial z} = \sigma(z)(1 - \sigma(z)) = 0.8808 \cdot 0.1192 \approx 0.1045 |
3. 线性层导数 | \frac{\partial z}{\partial w} = x = 2, \quad \frac{\partial z}{\partial b} = 1 |
4. 链式法则合并 | \frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w} = 0.7616 \cdot 0.1045 \cdot 2 \approx 0.1593 \frac{\partial L}{\partial b} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial b} = 0.7616 \cdot 0.1045 \cdot 1 \approx 0.0796 |
关键总结
- 链式法则的本质:
\frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w}
通过分解复合函数的导数,将复杂问题拆解为局部可计算的步骤。
- 反向传播的意义:
- 反向顺序:从损失 L 开始,按计算图逆序( L \rightarrow a \rightarrow z \rightarrow w/b )传播梯度。
- 局部计算:每一层只需计算自己的导数(如 \frac{\partial a}{\partial z} ),无需全局信息。
- 梯度数值解释:
- \frac{\partial L}{\partial w} \approx 0.1593 表示:增大 w 会轻微增加损失 L ,需减小 w 以优化模型。
- \frac{\partial L}{\partial b} \approx 0.0796 同理指导偏置 b 的更新方向。
评论区