ByteNoteByteNote

字节笔记本

2026年5月31日

反向传播为什么是深度学习的核心

API中转
¥120

反向传播是深度学习最核心的算法,没有之一。整个深度学习领域的蓬勃发展,都建立在反向传播这个基础之上。从最简单的全连接网络到最复杂的 Transformer,从图像识别的 CNN 到自然语言处理的 GPT,所有现代深度学习模型的训练都依赖反向传播。

要理解反向传播,首先要理解神经网络是怎么工作的。神经网络由多层神经元组成,每一层对输入数据进行变换,然后把结果传递给下一层。这个过程叫前向传播。输入数据从第一层开始逐层计算,每一层的计算包括两个步骤:第一步,对输入做加权求和;第二步,通过一个非线性激活函数做变换,比如 ReLU 或 Sigmoid。最终在输出层得到计算结果。

有了前向传播,模型就能对输入数据产生输出。但问题是输出的结果往往和真实值有差距。差距用损失函数来衡量,常用的有均方误差(MSE)用于回归任务,交叉熵(Cross-Entropy)用于分类任务。损失函数的值越大,说明模型的输出越不准确。训练的目标就是最小化这个损失。

反向传播要解决的核心问题是:知道了损失值之后,怎么调整每一层的参数才能让损失变小?这个问题的答案藏在微积分的链式法则里。损失相对于某个参数的梯度,告诉了我们参数朝哪个方向调整、调整多少就能让损失减小。反向传播就是用链式法则从输出层开始逐层计算这些梯度。

具体来说,从输出层开始,先计算损失相对于输出层参数的梯度。然后利用链式法则,用输出层的梯度计算上一层参数的梯度,依此类推,一直计算到第一层。这个过程叫"反向传播",因为梯度是从输出层向输入层反向传递的。每一层的梯度都依赖于它后面那一层的结果,所以必须从后往前计算。

有了每个参数的梯度之后,用梯度下降法更新参数:参数朝着梯度相反的方向调整。每次调整一点点,经过大量迭代后,损失逐渐减小,模型的输出越来越接近真实值。

一个完整的训练过程包含多次迭代。每次迭代中,模型先做一次前向传播计算输出和损失,再做一次反向传播计算梯度,然后用梯度下降法更新参数。这个"前向-反向-更新"的循环会重复成千上万次,直到模型收敛。

Batch 大小、学习率、优化器选择等因素都会影响反向传播的效果。Batch 大小决定了每次更新使用的数据量,小 batch 引入更多噪声但能逃离局部最优,大 batch 更稳定但容易陷入鞍点。学习率控制每次更新的步长,太大容易跳过最优解,太小导致收敛过慢。优化器从最基础的 SGD 发展到 Adam、AdamW 等衍生版本,Adam 通过自适应学习率和动量机制在大多数场景下表现更好。

反向传播虽然强大,但也有局限性。梯度消失和梯度爆炸是深层网络中常见的问题。梯度消失是指网络层数太多时,靠近输入层的梯度趋近于零,导致这些层的参数几乎无法更新。梯度爆炸则相反,梯度越来越大,导致训练不稳定。ResNet 的残差连接和 Batch Normalization 等技术就是为了缓解这些问题而设计的。

梯度累积是一个重要的工程技巧。当显存不足以容纳较大的 batch size 时,你可以分成多个小 batch 分别计算梯度,在内存中累加梯度,达到目标 batch size 后再统一更新参数。这种做法能让显存受限的情况下也能训练大模型。

混合精度训练通过使用半精度浮点数来加速训练过程。大部分计算使用 FP16,关键步骤使用 FP32 保证精度。这种方法在保持训练质量的同时,能显著提升训练速度和降低显存占用。NVIDIA 的 A100 和 H100 GPU 对混合精度训练有专门的硬件优化。

理解反向传播,就理解了深度学习是怎么学习的。它是一切深度学习技术的基础,掌握了反向传播,你才能理解更高级的训练技术,比如分布式训练、模型并行、数据并行等。

分享: