前向传播是输入数据逐层计算得到预测输出的过程,反向传播则基于链式法则将损失梯度从输出层逐层回传以更新参数;二者构成“预测→计算损失→回传梯度→更新参数”的训练闭环。

前向传播和反向传播是深度学习模型训练的核心机制。理解它们,等于摸清了神经网络“怎么学”和“怎么改”的底层逻辑。
前向传播:数据怎么流过网络
前向传播就是输入数据从输入层出发,逐层经过加权求和、偏置相加、激活函数变换,最终得到预测输出的过程。它不更新参数,只做一次“推理推演”。
关键步骤包括:
- 每一层计算 z = W·x + b(线性组合)
- 再通过激活函数(如ReLU、Sigmoid)得到该层输出:a = f(z)
- 上一层的输出作为下一层的输入,直到输出层
例如,一个两层全连接网络:输入 x → 隐层 z₁=W₁x+b₁ → a₁=ReLU(z₁) → 输出层 z₂=W₂a₁+b₂ → ŷ=sigmoid(z₂),ŷ 就是模型当前的预测结果。
立即学习“Python免费学习笔记(深入)”;
反向传播:误差怎么回传并更新参数
反向传播基于链式法则,把损失函数对每个参数的梯度从输出层逐层“倒着”算回来。有了梯度,就能用优化器(如SGD、Adam)更新权重和偏置。
核心逻辑是:
- 先计算损失 L(比如交叉熵或均方误差)相对于输出 ŷ 的梯度 ∂L/∂ŷ
- 再逐层乘上本层激活函数导数、前一层输出等中间项,回传到 ∂L/∂W 和 ∂L/∂b
- 最终用 W ← W − η·∂L/∂W 更新参数(η 是学习率)
PyTorch 或 TensorFlow 会自动构建计算图并完成梯度计算,但手动推一遍单层的反向传播(比如线性层+ReLU)能极大加深理解。
为什么必须两者配合?
只做前向传播,模型永远不知道自己错在哪;只算梯度不前向,就没有误差信号可传播。二者构成一个闭环:前向给出预测 → 比较真实标签得损失 → 反向算出改进方向 → 参数更新 → 下一轮前向……
这个循环反复进行,模型才逐渐收敛。训练卡住、梯度爆炸/消失、loss不下降等问题,往往都能从前向或反向的某一步异常中找到线索。
动手小提示:用NumPy写个极简两层网络
不依赖框架,纯用NumPy实现前向+反向,是检验理解是否到位的好方法。重点不是代码多优雅,而是确保:
- 前向每层的形状对得上(比如 W.shape = (out_dim, in_dim),x.shape = (in_dim,))
- 反向时梯度维度匹配(∂L/∂W 应与 W 同形)
- 更新后重新前向,loss 确实缓慢下降
哪怕只跑通一个样本的完整流程,也会比读十遍公式更管用。










