正向传播与反向传播:神经网络到底如何学习

前言 如果只看 PyTorch 代码,训练神经网络似乎很简单:写一个 forward,算出 loss,调用 loss.backward(),再让优化器更新参数。但这几行代码背后,其实压缩了深度学习最核心的一条数学主线: 正向传播负责把输入变成预测,反向传播负责把误差变成每个参数应该调整的方向。 理解这条主线之后,再看 CNN、ResNet、Transformer 或 LoRA,很多公式就不再像突然冒出来的符号。它们本质上都在回答同一个问题:信息如何向前流动,梯度又如何向后流动。 从一个神经元开始 一个最简单的神经元可以写成: $$ z = w^\top x + b $$其中 $x$ 是输入向量,$w$ 是权重向量,$b$ 是偏置。线性部分 $z$ 再经过一个非线性激活函数: $$ a = \sigma(z) $$如果没有激活函数,很多层线性变换叠在一起仍然只是一个线性变换,网络无法表示复杂的非线性关系。激活函数的作用,就是让每一层都能在“线性组合”之外引入弯曲和分段变化。 一层网络在做什么 把一个神经元扩展成一层全连接网络,可以写成矩阵形式: $$ \begin{aligned} z^{(l)} &= W^{(l)} a^{(l-1)} + b^{(l)} \\\\ a^{(l)} &= \sigma\left(z^{(l)}\right) \end{aligned} $$这里的上标 $(l)$ 表示第 $l$ 层。$a^{(l-1)}$ 是上一层输出,$W^{(l)}$ 和 $b^{(l)}$ 是这一层参数,$a^{(l)}$ 是这一层输出。 从这个角度看,神经网络并不是一个神秘黑盒,而是一串函数复合: $$ x \xrightarrow{f_1} a^{(1)} \xrightarrow{f_2} a^{(2)} \xrightarrow{f_3} \cdots \xrightarrow{f_L} \hat{y} $$正向传播就是沿着这条链从左到右计算。 ...

📅 August 1, 2026 · ⏱️ 11 min · 📝 约 1687 字 · 👁️ 次阅读
Comments