type
Page
status
Invisible
date
Apr 3, 2026
slug
Machine_Learning/deep-learning-study-notes/4_8
summary
动手深度学习v2课程
tags
机器学习
深度学习
category
icon
password
到目前为止,我们实现的每个模型都是根据某个预先指定的分布来初始化模型的参数。有人会认为初始化方案是理所当然的,忽略了如何做出这些选择的细节。甚至有人可能会觉得,初始化方案的选择并不是特别重要。相反,初始化方案的选择在神经网络学习中起着举足轻重的作用,它对保持数值稳定性至关重要。此外,这些初始化方案的选择可以与非线性激活函数的选择有趣的结合在一起。我们选择哪个函数以及如何初始化参数可以决定优化算法收敛的速度有多快。糟糕选择可能会导致我们在训练时遇到梯度爆炸或梯度消失。本节将更详细地探讨这些主题,并讨论一些有用的启发式方法。 这些启发式方法在整个深度学习生涯中都很有用。
4.8.1.梯度消失和梯度爆炸
考虑一个具有层、输入和输出的深层网络。每一层由变换定义,该变换的参数为权重,其隐藏变量是(令)。那么我们的网络可以表示为:
如果所有隐藏变量和输入都是向量,我们可以将的任何一组参数的梯度的梯度写为下式:
换言之,该梯度是个矩阵与梯度向量的乘积。深层网络中的梯度本质上是很多层导数矩阵连续相乘得到的。由于是“连乘”,只要每一层的缩放效应稍微偏大或偏小,乘到后面就会被不断放大。这样一来,梯度可能变得非常小,导致前面层几乎收不到有效更新,这就是梯度消失;也可能变得非常大,导致训练不稳定,这就是梯度爆炸。虽然在处理普通概率连乘时,人们常用取对数的方法把乘法变成加法来缓解数值下溢,但在神经网络中问题更复杂,因为这里相乘的不是简单的标量,而是一连串矩阵。矩阵可能有不同大小的特征值,因此它们连乘后的结果既可能急剧变大,也可能迅速变小,这也是深层网络训练困难的重要原因。
- 梯度爆炸(gradient exploding)问题: 参数更新过大,破坏了模型的稳定收敛
- 梯度消失(gradient vanishing)问题: 参数更新过小,在每次更新时几乎不会移动,导致模型无法学习
4.8.1.1. 梯度消失
曾经sigmoid函数很流行,因为它类似于阈值函数。由于早期的人工神经网络受到生物神经网络的启发,神经元要么完全激活要么完全不激活(就像生物神经元)的想法很有吸引力。然而,它却是导致梯度消失问题的一个常见的原因,让我们仔细看看sigmoid函数为什么会导致梯度消失。
正如上图,当sigmoid函数的输入很大或是很小时,它的梯度都会消失。此外,当反向传播通过许多层时,除非我们在刚刚好的地方,这些地方sigmoid函数的输入接近于零,否则整个乘积的梯度可能会消失。当我们的网络有很多层时,除非我们很小心,否则在某一层可能会切断梯度。事实上,这个问题曾经困扰着深度网络的训练。因此,更稳定的ReLU系列函数已经成为从业者的默认选择(虽然在神经科学的角度看起来不太合理)。
4.8.1.2. 梯度爆炸
梯度爆炸可能同样令人烦恼。为了更好地说明这一点,我们生成100个高斯随机矩阵,并将它们与某个初始矩阵相乘。对于我们选择的尺度(方差),矩阵乘积发生爆炸。当这种情况是由于深度网络的初始化所导致时,我们没有机会让梯度下降优化器收敛。
在神经网络中,同一层的多个隐藏单元如果初始化为完全相同的参数,那么它们对同一输入会产生相同输出,在反向传播时也会得到相同梯度,参数更新后仍保持一致。这样多个神经元实际上在做同一件事,网络的表达能力会大大下降,看起来有多个单元,实际上效果接近只有一个单元。
因此,训练神经网络时通常要对权重进行随机初始化,让不同神经元从一开始就具有细微差别,从而在训练过程中学习到不同特征,这就是打破对称性。
4.8.2. 打破对称性
解决(或至少减轻)上述问题的一种方法是进行参数初始化,优化期间的注意和适当的正则化也可以进一步提高稳定性。
4.8.2.1. 默认初始化
在前面的部分中,我们使用正态分布来初始化权重值。如果我们不指定初始化方法,框架将使用默认的随机初始化方法,对于中等难度的问题,这种方法通常很有效。
4.8.2.2. Xavier初始化
让我们看看某些没有非线性的全连接层输出(即没有经过激活函数的输出)的尺度分布。对于该层输入以及相关权重,输出由下式给出:
权重是从同一分布中独立抽取的。另外,我们进一步假设这个分布的平均值为0、方差为。这里并不是说它一定要是高斯分布,而只是要求这个分布能够定义均值和方差。现在,假设层的输入也具有零均值和方差,并且它们独立于并且彼此独立。在这种情况下,我们可以按如下方式计算的平均值和方差:
保持方差不变的一种方法是设置。而在反向传播中,为了让梯度的方差也保持稳定,又希望满足,其中是输出维度。由于一般,这两个条件通常无法同时满足,因此采用折中方案:
这就是现在标准且实用的Xavier初始化的基础。通常,Xavier初始化从均值为零,方差的高斯分布中采样权重。我们也可以将其改为选择从均匀分布中抽取权重时的方差。注意均匀分布的方差为。将代入到的条件中,将得到初始化值域:
4.8.3. 小结
- 梯度消失和梯度爆炸是深度网络中常见的问题。在参数初始化时需要非常小心,以确保梯度和参数可以得到很好的控制。
- 需要用启发式的初始化方法来确保初始梯度既不太大也不太小。
- ReLU激活函数缓解了梯度消失问题,这样可以加速收敛。
- 随机初始化是保证在进行优化前打破对称性的关键。
- Xavier初始化表明,对于每一层,输出的方差不受输入数量的影响,任何梯度的方差不受输出数量的影响。
