梯度消失与梯度爆炸:
当神经网络的层数较多时,模型的数值稳定性容易变差
假设一个层数为L的多层感知机的第层
的权重参数为
,输出层
的权重参数为
。为了便于讨论,不考虑偏差参数,且设所有隐藏层的激活函数为恒等映射(identity mapping)
。给定输入
,多层感知机的第l层的输出
。此时,如果层数l较大,
的计算可能会出现衰减或爆炸。举个例子,假设输入和所有层的权重参数都是标量,如权重参数为0.2和5,多层感知机的第30层输出为输入
分别与0.230≈1×10−21(消失)和530≈9×1020(爆炸)的乘积。当层数较多时,梯度的计算也容易出现消失或爆炸。
随机初始化参数:
在深度神经网络中通常随机初始化参数。
如三层神经网络加入中间的隐藏层中的所有单元格的参数都是相同的,那么正向传播和反向传播的得出来的数值都是相同的,这样的话,在中间的隐藏层中的所有单元格中,实际上只有一个单元格发挥了作用。所以在深度神经网络中通常要使用随机初始化参数来使得中间层的参数不一样。
初始化方法:
1)pytorch默认初始化方法:
随机初始化模型参数的方法有很多。在线性回归的简洁实现中,我们使用torch.nn.init.normal_()
使模型net
的权重参数采用正态分布的随机初始化方式。不过,PyTorch中nn.Module
的模块参数都采取了较为合理的初始化策略(不同类型的layer具体采样的哪一种初始化方法的可参考源代码),因此一般不用我们考虑。
2)Xavier随机初始化:
还有一种比较常用的随机初始化方法叫作Xavier随机初始化。 假设某全连接层的输入个数为a,输出个数为b,Xavier随机初始化将使该层中权重参数的每个元素都随机采样于均匀分布:
它的设计主要考虑到,模型参数初始化后,每层输出的方差不该受该层输入个数影响,且每层梯度的方差也不该受该层输出个数影响。
协变量偏移:
举个例子:训练模型的时候用真实的猫和狗的图片进行训练,预测的时候用卡通的猫和狗的图片来预测。
标签偏移:
举个例子:根据数据分类一个人得的是流感1还是流感2
但训练集只有流感1
而测试集有流感1和流感2两种
概念偏移:
举个例子:softdrink在美国不同的地区有着不同意思,在构建机器翻译模型的时候,会用到这些。