张芷铭的个人博客

前向传播从输入计算输出,反向传播用链式法则求梯度,二者构成神经网络训练的核心循环。

核心概念

概念说明
模型参数(权重 $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]$ → 隐藏层 → 输出层:

  1. 隐藏层输入:$z_1 = 0.1 \times 1 + 0.2 \times 2 + 0.3 = 0.8$
  2. 隐藏层输出:$h = \sigma(0.8) \approx 0.69$
  3. 输出预测:$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}$:

  1. $\frac{dL}{dy_{pred}} = y_{pred} - y_{true} = -1$
  2. $\frac{dy_{pred}}{dw} = x = 2$
  3. $\frac{dL}{dw} = -1 \times 2 = -2$

梯度下降更新($lr=0.1$):

$$w = w - lr \cdot \frac{dL}{dw} = 3 - 0.1 \times (-2) = 3.2$$

训练循环

1
初始化参数 → 前向传播 → 计算损失 → 反向传播 → 更新参数 → 循环

实践要点

  • 框架自动实现:PyTorch/TensorFlow 自动记录计算图,.backward() 自动求导
  • 分布式训练:反向传播后 AllReduce 同步梯度
  • 性能优化:前向优化内存带宽,反向利用通信-计算重叠

Comments