AI课堂第14讲:DL深度学习-模型训练的起点—参数初始化

#我在头条搞创作#

上节课我们学习了梯度下降算法在训练过程中的重要作用和原理,这节课我们继续学习模型训练过程中的数值稳定性和模型参数的初始化方法。

深度学习模型有关数值稳定性的典型问题是衰减(vanishing)和爆炸(explosion)。

衰减和爆炸

当神经网络的层数较多时,模型的数值稳定性容易变差。假设⼀个层数为 L 的多层感知机的第l层 H(l) 的权重参数为 W(l),输出层 H(L) 的权重参数为 W(L)。为了便于讨论,不考虑偏差参数,且设所有隐藏层的激活函数为恒等映射(identity mapping)ϕ(x) = x。给定输⼊ X,多层感知机的第 l 层的输出 H(l) = X*W(1)*W(2) . . .W(l)。此时,如果层数 l 较⼤,H(l) 的计算可能会出现衰减或爆炸。举个例⼦,假设输⼊和所有层的权重参数都是标量,比如权重参数为 0.2 和5,多层感知机的第 30 层输出为输⼊ X 分别与 0.2^30 ≈ 1 × 10^−21(衰减)和 5^30 ≈ 9 × 1020(爆炸)的乘积。类似地,当层数较多时,梯度的计算也更容易出现衰减或爆炸。


AI课堂第14讲:DL深度学习——模型训练的起点—参数初始化

随机初始化模型参数(weight initialization)

在神经网络中,我们通常需要随机初始化模型参数。下⾯我们来解释这样做的原因。

为了⽅便解释,假设输出层只保留⼀个输出单元 o1(删去 o2, o3 和指向它们的箭头),且隐藏层使⽤相同的激活函数。如果将每个隐藏单元的参数都初始化为相等的值,那么在正向传播时每个隐藏单元将根据相同的输⼊计算出相同的值,并传递⾄输出层。在反向传播中,每个隐藏单元的参数梯度值相等。因此,这些参数在使⽤基于梯度的优化算法迭代后值依然相等。之后的迭代也是如此。这种情况下,⽆论隐藏单元有多少,隐藏层本质上只有 1 个隐藏单元在发挥作⽤。因此,正如我们在前⾯的实验中所做的那样,我们通常将神经网络的模型参数,特别是权重参数,进⾏随机初始化。


AI课堂第14讲:DL深度学习——模型训练的起点—参数初始化


初始化参数指的是在网络模型训练之前,对各个节点的权重和偏置进行初始化赋值的过程,一般都是把偏置初始化为0,但对权值进行随机初始化 。


PyTorch常用的初始化方法如下

1.“均匀分布”初始化(uniform distribution)

torch.nn.init.uniform_(tensor, a=0, b=1)

从均匀分布U(a, b)中采样,初始化张量。

参数:

tensor - 需要填充的张量

a - 均匀分布的下界

b - 均匀分布的上界

代码示例:


AI课堂第14讲:DL深度学习——模型训练的起点—参数初始化



2.“正态(高斯)分布”初始化(normal/Gaussian distribution)

高斯初始化比较容易理解,就是根据某个高斯分布来初始化权值,但均值通常选0,方差需要按经验人工选择。

3.Xavier初始化(Glorot 正态分布初始化)

基本思想是保持信息在神经网络中流动过程的方差不变。假设某全连接层的输⼊个数为a,输出个数为 b,Xavier 随机初始化将使得该层中权重参数的每个元素都随机采样于均匀分布它的设计主要考虑到,模型参数初始化后,每层输出的⽅差不该受该层输⼊个数影响,且每层梯度的⽅差也不该受该层输出个数影响。 一般Xavier搭配tanh激活函数使用,但不适用ReLU激活函数。

4.kaiming初始化(MSRA初始化/He初始化)

基本思想是正向传播时,状态值的方差保持不变;反向传播时,关于激活值的梯度的方差保持不变。MSRA初始化可以说是专门为ReLU系列激活函数特意设计的。 自Pytorch1.0开始,网络默认的初始化基本上都是kaiming_uniform初始化。


参数初始化的要求

(1)参数不能全部初始化为0,也不能全部初始化同一个值;

(2)最好保证参数初始化的均值为0,正负交错,正负参数大致上数量相等;

(3)初始化参数不能太大或者是太小,参数太小会导致特征在每层间逐渐缩小而难以产生作用,参数太大会导致数据在逐层间传递时逐渐放大而导致梯度消失发散,不能训练;

(4)初始化必要条件:各层激活值不能出现饱和现象;各层激活值不为0。


批量规范化(Batch Normalization, BN)

参数合理初始化有助于模型收敛,但是随着网络层数的增加,分布会逐渐发送偏移,导致收敛缓慢,这是因为整体分布往非线性函数取值区间的上下限靠近。这会导致反向传播时梯度消失。BN就是通过规范化的手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值0方差1的标准正态分布,使得激活输入值落入非线性函数中比较敏感的区域。可以让梯度变大,学习收敛速度快,能大大加快收敛速度。


AI课堂第14讲:DL深度学习——模型训练的起点—参数初始化



总结

在深层神经网络中,每一层的输出都是下一层的输入,为了使网络中的信息更好的流动,应保证每层方差尽可能相等(可以把前向传播过程看作是输入和一系列参数的连乘,若数值过大容易进入饱和区,反向传播时数值过大可能造成梯度爆炸,反之可能梯度消失)。

因此,选择合适的参数初始化方法至关重要。然而每次初始化也都会有所不同,进而影响模型收敛速度和模型质量,好比投胎决定人生起点(笑哭),模型初始化决定训练的起点,这主要看运气。而批量规范化(BN)则有助于缓解初始化参数在训练过程中的负面影响,使模型更容易收敛。

深度   课堂   AI
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章