总结学习的数值的稳定性和模型初始化数值稳定性和模型初始化我们处理数据时数据总会有一个明显的分布这得益于对数据进行的初步处理并且也可以决定非激活函数该使用哪一类该使用什么样的模型进行处理如果处理不好的话可能会导致各种问题梯度消失和梯度爆炸考虑一个具有L层、输入x和输出o的深层网络。每一层l由变换定义该变换的参数为权重其隐藏变量是令x。我们的网络可以表示为:如果所有隐藏变量和输入都是向量我们可以将o关于任何一组参数的梯度写为下式换言之该梯度是L−l个矩阵·. . . ·与梯度向量的乘积。因此我们容易受到数值下溢问题的影响.当将太多的概率乘在一起时这些问题经常会出现。在处理概率时一个常见的技巧是切换到对数空间即将数值表示的压力从尾数转移到指数。不幸的是上面的问题更为严重最初矩阵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.1897e26,8.8308e26,1.9813e26,1.7019e26],[1.3110e26,-5.2870e26,-1.1862e26,-1.0189e26],[-1.6008e26,6.4559e26,1.4485e26,1.2442e26],[3.0943e25,-1.2479e26,-2.7998e25,-2.4050e25]])打破对称性神经网络设计中的另一个问题是其参数化所固有的对称性。假设我们有一个简单的多层感知机它有一个隐藏层和两个隐藏单元。在这种情况下我们可以对第一层的权重W(1)进行重排列并且同样对输出层的权重进行重排列可以获得相同的函数。用公式表达的话输入权重输出权重激活函数输出现在做操作交换两个神经元的输入权重w11​↔w12​同步交换输出层对应权重v1​↔v2​得到新参数网络输出完全不变损失完全相等。换句话说我们在每一层的隐藏单元之间具有排列对称性。假设输出层将上述两个隐藏单元的多层感知机转换为仅一个输出单元。想象一下如果我们将隐藏层的所有参数初始化为W(1)cc为常量会发生什么在这种情况下在前向传播期间两个隐藏单元采用相同的输入和参数产生相同的激活该激活被送到输出单元。在反向传播期间根据参数W(1)对输出单元进行微分得到一个梯度其元素都取相同的值。因此在基于梯度的迭代例如小批量随机梯度下降之后W(1)的所有元素仍然采用相同的值。这样的迭代永远不会打破对称性我们可能永远也无法实现网络的表达能力。隐藏层的行为就好像只有一个单元。请注意虽然小批量随机梯度下降不会打破这种对称性但暂退法正则化可以。参数初始化解决或至少减轻上述问题的一种方法是进行参数初始化优化期间的注意和适当的正则化也可以进一步提高稳定性。默认初始化例如使用正态分布来初始化权重值。如果我们不指定初始化方法框架将使用默认的随机初始化方法对于中等难度的问题这种方法通常很有效。Xavier初始化让我们看看某些没有非线性的全连接层输出例如隐藏变量oi的尺度分布。对于该层输入及其相关权重输出由下式给出权重都是从同一分布中独立抽取的。此外让我们假设该分布具有零均值和方差。请注意这并不意味着分布必须是高斯的只是均值和方差需要存在。现在让我们假设层的输入也具有零均值和方差并且它们独立于并且彼此独立。在这种情况下我们可以按如下方式计算的平均值和方差保持方差不变的一种方法是设置。现在考虑反向传播过程我们面临着类似的问题尽管梯度是从 更靠近输出的层传播的。使用与前向传播相同的推断我们可以看到除非否则梯度的方差可能会增大其中是该层的输出的数量。这使得我们进退两难我们不可能同时满足这两个条件。相反我们只需满足:这就是现在标准且实用的Xavier初始化的基础.通常Xavier初始化从均值为零方差的高斯分布中采样权重。我们也可以将其改为选择从均匀分布中抽取权重时的方差。注意均匀分布U(−a, a)的方差为。将代入到的条件中将得到初始化值域尽管在上述数学推理中“不存在非线性”的假设在神经网络中很容易被违反但Xavier初始化方法在实践中被证明是有效的。