神经网络基石:梯度、传播与激活函数

神经网络基石:梯度、传播与激活函数

本文档整理了关于神经网络如何“学习”的几个最核心、最基础的概念,包括前向/反向传播、梯度消失/爆炸问题,以及ReLU激活函数的关键作用,并包含了相关的深入问答。

1. 神经网络的学习过程:一个四步循环

想象教一个机器人射箭,整个学习过程可以分为四步:

  1. **猜测 (前向传播)**:机器人根据当前姿势,射出一箭。
  2. **评估 (计算损失)**:你看靶子,告诉它射偏了多少。
  3. **学习 (反向传播 & 更新)**:你根据偏差,指导它如何调整姿势和力度。
  4. **指导可能遇到的问题 (梯度问题)**:你的指导声音可能太小(听不见)或太大(变成噪音)。

a. 前向传播 (Forward Propagation)

这是神经网络进行预测或推断的过程。数据从输入层开始,逐层向前流动,直到输出层得到最终结果。

  • 流程:在每一层,输入数据经过“加权求和”与“激活函数”的处理,然后将结果传递给下一层。
  • 核心:这是一个纯计算过程,不涉及任何学习,只是利用当前参数“算”出一个答案。

b. 反向传播 (Backpropagation)

这是神经网络的核心学习机制。在计算出预测结果与真实目标之间的差距(损失/误差)后,反向传播算法会从后向前,计算出网络中每个参数(权重和偏置)对这个最终误差的“贡献”或“责任”有多大。

  • 核心:它本身不更新权重,而是高效地计算出应该如何更新的“指导信号”,即**梯度 (gradient)**。梯度指明了能让损失函数下降最快的调整方向。

2. 核心挑战:梯度消失与梯度爆炸

在深层网络中,通过反向传播计算的梯度(“指导信号”)在层层传递时,其大小会因连乘效应而发生剧烈变化,导致两种严重问题。

特性 梯度消失 (Vanishing Gradients) 梯度爆炸 (Exploding Gradients)
现象 梯度值变得极其微小,接近于 0 梯度值变得极其巨大,超出数值表示范围
后果 前面网络层的权重几乎不更新,学习停滞 权重更新步子太大,导致训练不稳定、发散,损失变NaN
直观比喻 指导信号太弱,弱到听不见,模型学不动 指导信号太强,强到像噪音,模型被带偏甚至崩溃
直接原因 连乘了很多小于 1 的数 连乘了很多大于 1 的数

Brainstorm Q&A: 深入理解梯度问题与ReLU

问:梯度爆炸和梯度消失是冲突的吧?

答: 是的,从现象后果上看,它们是完全冲突的、截然相反的两个问题。你不可能在同一时间、同一位置同时观察到梯度既爆炸又消失。

然而,最关键的一点是:它们源自同一个根本原因——**深度网络反向传播中的“连乘效应” (Multiplicative Effect)**。

  • 统一性:它们都暴露了同一个根本问题:在深层网络中,基于连乘的梯度计算本身是不稳定的。最终的结果完全取决于这条“传播路径”上数值的乘积,是趋向于0还是趋向于无穷。

问:但是为什么有时候会越乘越小然后消失,有时候会变大然后爆炸?这和模型的结构有关吗还是什么原因?

答: 问得非常好!梯度会消失还是会爆炸,并不是一个随机事件,而是由几个关键因素共同决定的“可预测”的结果。这和模型的结构激活函数的选择以及权重的初始状态这三大因素紧密相关。

  1. 激活函数的选择
    • Sigmoid/Tanh:它们的导数大部分都小于1,是导致梯度消失的主要元凶。
    • ReLU:它的导数在正区间恒为1,从根本上缓解了梯度消失问题,将梯度的命运交给了权重。
  2. 权重初始化
    • 过大的权重:在连乘效应下倾向于导致梯度爆炸
    • 过小的权重:即使使用ReLU,也可能导致梯度消失
    • 解决方案:使用Xavier、He等智能初始化方法,让权重从一开始就处在合理范围。
  3. 模型结构
    • 网络深度:是连乘效应的“放大器”,网络越深,问题越容易出现。
    • RNN:由于在时间步上重复使用相同权重,是梯度问题的“重灾区”。
    • **ResNet (残差网络)**:通过“跳跃连接”让梯度可以通过加法直接回传,是解决梯度消失的革命性结构。

问:ReLU 为什么好?

答: ReLU (Rectified Linear Unit, f(x) = max(0, x)) 之所以好,甚至可以说是引发现代深度学习革命的关键技术之一,主要是因为它以一种极其简单的方式,解决了前辈们(如 Sigmoid 和 Tanh)的几个致命缺陷。

  1. 解决了梯度消失问题 (核心贡献):当输入大于0时,ReLU的导数恒为1。这意味着梯度在回传时可以原封不动地通过!它不会像 Sigmoid 那样被削弱,为梯度提供了一条“高速公路”,使得训练深度网络成为可能。

  2. **计算速度极快 (Computational Efficiency)**:max(0, x) 操作远比Sigmoid/Tanh涉及的指数运算快得多,显著加速了模型的训练和推理。

  3. **引入了稀疏性 (Induces Sparsity)**:它会使一部分神经元的输出为0,让网络以稀疏的方式激活,这被认为有助于学习到更鲁棒、解耦的特征。

ReLU的缺陷:“死亡ReLU问题”
如果一个神经元的权重被更新到使其对所有输入都输出负值,那么它的梯度将永远是0,这个神经元就再也无法学习。为了解决这个问题,出现了很多变体,如 Leaky ReLU, PReLU, ELU, GELU, SwiGLU 等,它们在保留ReLU主要优势的同时,通过在负数区引入微小的梯度来防止神经元“死亡”。


整理自: Einops For Tensor Operations


神经网络基石:梯度、传播与激活函数
http://zl1bks.github.io/2025/09/20/神经网络基石:梯度、传播与激活函数/
作者
zl1bks
发布于
2025年9月20日
许可协议