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

前言 如果只看 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 字 · 👁️ 次阅读

线性代数进阶:矩阵微积分如何服务反向传播

前言 这一篇不是基础线性代数笔记。矩阵乘法、转置、逆矩阵、特征值这些基础概念默认你已经见过。我们只关心一个更具体的问题:为什么深度学习里的反向传播经常要用矩阵微积分来描述? 在标量函数里,导数告诉我们“输入变化一点,输出会怎么变”。但神经网络里大量对象都不是标量:输入是向量,权重是矩阵,中间特征是高维张量,损失函数最后才压成一个标量。因此,普通的一元导数不够用,我们需要用 Jacobian、梯度向量和链式法则来描述这些对象之间的局部关系。 从标量导数到 Jacobian 设一个函数把向量 $x \in \mathbb{R}^n$ 映射到向量 $y \in \mathbb{R}^m$: $$ y = f(x) $$它的 Jacobian 矩阵定义为: $$ \begin{aligned} J_f(x) &= \frac{\partial y}{\partial x} \\\\ &= \begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \cdots & \frac{\partial y_1}{\partial x_n} \\\\ \vdots & \ddots & \vdots \\\\ \frac{\partial y_m}{\partial x_1} & \cdots & \frac{\partial y_m}{\partial x_n} \end{bmatrix} \end{aligned} $$Jacobian 的含义不是“又多了一个复杂矩阵”,而是:它描述了函数 $f$ 在某一点附近的局部线性近似。 $$ f(x + \Delta x) \approx f(x) + J_f(x)\Delta x $$这就是 AI 中 Jacobian 最重要的直觉:非线性网络在局部可以近似看成线性变换。 ...

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