前向传播从输入计算输出,反向传播用链式法则求梯度,二者构成神经网络训练的核心循环。
核心概念
| 概念 | 说明 |
|---|---|
| 模型 | 参数(权重 $w$、偏置 $b$)+ 计算流程 |
| 损失函数 | 衡量预测值与真实值差距 |
| 梯度下降 | 用梯度调整参数,最小化损失 |
前向传播
从输入出发,沿计算流程正向计算到输出,同时记录中间结果。
单神经元示例
输入 $x=2$,参数 $w=3$,$b=1$:
$$y_{pred} = w \cdot x + b = 3 \times 2 + 1 = 7$$
损失($y_{true}=8$,MSE):
$$L = \frac{1}{2}(y_{pred} - y_{true})^2 = 0.5$$
神经网络示例
输入 $x=[1, 2]$ → 隐藏层 → 输出层:
- 隐藏层输入:$z_1 = 0.1 \times 1 + 0.2 \times 2 + 0.3 = 0.8$
- 隐藏层输出:$h = \sigma(0.8) \approx 0.69$
- 输出预测:$y_{pred} = 0.4 \times 0.69 + 0.5 \approx 0.776$
特点
- 纯计算过程,依赖输入和当前参数
- 中间值被框架记录,构建计算图
- 主要消耗 FLOPs,受内存带宽限制
反向传播
从损失出发,反向求导,计算每个参数的梯度。
链式法则
若 $y = f(g(x))$,则:
$$\frac{dy}{dx} = \frac{dy}{dg} \times \frac{dg}{dx}$$
单神经元反向传播
求 $\frac{dL}{dw}$、$\frac{dL}{db}$:
- $\frac{dL}{dy_{pred}} = y_{pred} - y_{true} = -1$
- $\frac{dy_{pred}}{dw} = x = 2$
- $\frac{dL}{dw} = -1 \times 2 = -2$
梯度下降更新($lr=0.1$):
$$w = w - lr \cdot \frac{dL}{dw} = 3 - 0.1 \times (-2) = 3.2$$
训练循环
| |
实践要点
- 框架自动实现:PyTorch/TensorFlow 自动记录计算图,
.backward()自动求导 - 分布式训练:反向传播后 AllReduce 同步梯度
- 性能优化:前向优化内存带宽,反向利用通信-计算重叠
张芷铭的个人博客
Comments