第19周周报
2026/7/13 14:50:33 网站建设 项目流程

总结:学习的数值的稳定性和模型初始化

数值稳定性和模型初始化

我们处理数据时,数据总会有一个明显的分布,这得益于对数据进行的初步处理,并且也可以决定非激活函数该使用哪一类,该使用什么样的模型进行处理,如果处理不好的话,可能会导致各种问题

梯度消失和梯度爆炸

考虑一个具有L层、输入x和输出o的深层网络。每一层l由变换定义,该变换的参数为权重,其隐藏变量是(令=x)。我们的网络可以表示为:

如果所有隐藏变量和输入都是向量,我们可以将o关于任何一组参数的梯度写为下式:

换言之,该梯度是Ll个矩阵·. . . ·与梯度向量的乘积。因此,我们容易受到数值下溢问题的影响.当将太多的概率乘在一起时,这些问题经常会出现。在处理概率时,一个常见的技巧是切换到对数空间,即将数值表示的压力从尾数转移到指数。不幸的是,上面的问题更为严重:最初,矩阵M(l)可能具有各种各样的特征值。他们可能很小,也可能很大;他们的乘积可能非常大,也可能非常小。
不稳定梯度带来的风险不止在于数值表示;不稳定梯度也威胁到我们优化算法的稳定性。我们可能面临一些问题。要么是梯度爆炸问题:参数更新过大,破坏了模型的稳定收敛;要么是梯度消失问题:参数更新过小,在每次更新时几乎不会移动,导致模型无法学习。
梯度消失
曾经sigmoid函数很流行,因为它类似于阈值函数。由于早期的人工神经网络受到生物神经网络的启发,神经元要么完全激活要么完全不激活(就像生物神经元)的想法很有吸引力。
然而,它却是导致梯度消失问题的一个常见的原因.

如图所示,若是输入过大或过小,斜率(gradient)都会趋向于零,造成梯度消失,但在人脑上没有这个烦恼,因为生物大脑不用反向传播、依靠局部脉冲学习,同时自带稳态自适应、抑制回路、种群编码,持续把神经元维持在线性响应区间。

因此,更稳定的ReLU系列函数成为更优越的选择。

梯度爆炸
梯度爆炸可能同样令人烦恼。为了更好地说明这一点,我们生成100个高斯随机矩阵,并将它们与某个 初始矩阵相乘。对于我们选择的尺度(方差),矩阵乘积发生爆炸。当这种情况是由于深度网络的初始化所导致时,我们没有机会让梯度下降优化器收敛。
M = torch.normal(0, 1, size=(4,4)) print('一个矩阵 \n',M) for i in range(100): M = torch.mm(M,torch.normal(0, 1, size=(4, 4))) print('乘以100个矩阵后\n', M)
一个矩阵
tensor([[-0.7872,2.7090,0.5996,-1.3191],
[-1.8260,-0.7130,-0.5521,0.1051],
[1.1213,1.0472,-0.3991,-0.3802],
[0.5552,0.4517,-0.3218,0.5214]])
乘以100个矩阵后 tensor([[-2.1897e+26,8.8308e+26,1.9813e+26,1.7019e+26],
[1.3110e+26,-5.2870e+26,-1.1862e+26,-1.0189e+26],
[-1.6008e+26,6.4559e+26,1.4485e+26,1.2442e+26],
[3.0943e+25,-1.2479e+26,-2.7998e+25,-2.4050e+25]])
打破对称性
神经网络设计中的另一个问题是其参数化所固有的对称性。假设我们有一个简单的多层感知机,它有一个隐藏层和两个隐藏单元。在这种情况下,我们可以对第一层的权重W(1)进行重排列,并且同样对输出层的权重进行重排列,可以获得相同的函数。
用公式表达的话:
输入权重,输出权重
激活函数
输出

现在做操作:

  1. 交换两个神经元的输入权重:w11​↔w12​
  2. 同步交换输出层对应权重:v1​↔v2​

得到新参数,网络输出完全不变,损失完全相等。

换句话说,我们在每一层的隐藏单元之间具有排列对称性。

假设输出层将上述两个隐藏单元的多层感知机转换为仅一个输出单元。想象一下,如果我们将隐藏层的所有参数初始化为W(1)=cc为常量,会发生什么?在这种情况下,在前向传播期间,两个隐藏单元采用相同的输入和参数,产生相同的激活,该激活被送到输出单元。在反向传播期间,根据参数W(1)对输出单元进行微分,得到一个梯度,其元素都取相同的值。因此,在基于梯度的迭代(例如,小批量随机梯度下降)之后,W(1)的所有元素仍然采用相同的值。这样的迭代永远不会打破对称性,我们可能永远也无法实现网络的表达能力。隐藏层的行为就好像只有一个单元。请注意,虽然小批量随机梯度下降不会打破这种对称性,但暂退法正则化可以。
参数初始化
解决(或至少减轻)上述问题的一种方法是进行参数初始化,优化期间的注意和适当的正则化也可以进一步
提高稳定性。
默认初始化
例如使用正态分布来初始化权重值。如果我们不指定初始化方法,框架将使用默认的随机初始化方法,对于中等难度的问题,这种方法通常很有效。
Xavier初始化
让我们看看某些没有非线性的全连接层输出(例如,隐藏变量)oi的尺度分布。对于该层输入及其相关权重,输出由下式给出

权重都是从同一分布中独立抽取的。此外,让我们假设该分布具有零均值和方差。请注意,这并不意味着分布必须是高斯的,只是均值和方差需要存在。现在,让我们假设层的输入也具有零均值和方差,并且它们独立于并且彼此独立。在这种情况下,我们可以按如下方式计算的平均值和方差:

保持方差不变的一种方法是设置。现在考虑反向传播过程,我们面临着类似的问题,尽管梯度是从 更靠近输出的层传播的。使用与前向传播相同的推断,我们可以看到,除非,否则梯度的方差可能会增大,其中是该层的输出的数量。这使得我们进退两难:我们不可能同时满足这两个条件。
相反,我们只需满足:

这就是现在标准且实用的Xavier初始化的基础.通常,Xavier初始化从均值为零,方差的高斯分布中采样权重。我们也可以将其改为选择从均匀分布中抽取权重时的方差。注意均匀分布U(a, a)的方差为。将代入到的条件中,将得到初始化值域:

尽管在上述数学推理中,“不存在非线性”的假设在神经网络中很容易被违反,但Xavier初始化方法在实践中被证明是有效的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询