神经网络初始化-Xavier and Kaiming initialization

前言

How to initialize deep neural networks? Xavier and Kaiming initialization

Xavier(Understanding the difficulty of training deep feedforward
neural networks):http://proceedings.mlr.press/v9/glorot10a.html

Kaiming(Delving Deep into Rectifiers: Surpassing Human-Level
Performance on ImageNet
Classification):https://ieeexplore.ieee.org/document/7410480

初始化的重要性

偶然在知乎看到这张图对初始化重要性的体现相当直观。深度学习模型的优化过程常被比喻为下山,不断摸索,反复跳跃,调整步幅,希望能够尽可能地走到一个最低的点,在这个最低的空间点将会得到最小的loss(或者可以不严谨地说最好的performance)。将某一层权值的搜索过程描绘为如下非凸搜索空间,可以发现不同的起点会有不同的初始优势,有些点容易陷入较差的局部最优,有些点周围崎岖难以下降,而有些点周围平坦易下降,这时候初始点的重要性就出来了。

初始化策略要解决的问题就是:

  1. 能不能落到一个和谷底偏近的位置
  2. 能不能落到一个大下坡,能稳定快速地到谷底

来源见水印,侵权联系删除

随机初始化是神经网络初始化的经典方法,具体形式为
在这里插入图片描述
但是直接对所有weight进行相同规模的初始化会导致一些问题,梯度消失梯度下降,由于深度神经网络反向传播的特性,链式法则梯度的叠加总是容易出现上述两个问题。

如下一个三层网络,对第一层进行更新时 ▽ W \bigtriangledown W W可能由于激活函数梯度和 W W W的值而出现梯度消失(相乘元素小于1时)或者梯度下降(相乘元素大于0时)。神经网络的误差反向传播,忽略激活函数的偏导数时,相当于自后向前不停乘上网络每一层的权重。
在这里插入图片描述
激活函数梯度通过设计类似ReLU功能的激活函数可以缓解,而 W W W则需要一个合适的权值,这里我们就需要思考:

初始化权值可能会对训练过程有什么影响?为什么初始化权值要以方差作为衡量条件?
我认为网络学习的是训练数据的空间分布,即训练收敛时,整个输出空间应该是输入空间分布的某种稳定投影。从层的角度来看,假如2层网络:A->B,B希望获得稳定输出,但由于每次学习更新导致A也在变化,所以B想稳定就比较难。怎么办,保证A和B的分布一样,这样学习就简单一点,即可以理解成信息流通更流畅

训练过程中Batch Normalization这一技术能够规范,参考
https://blog.csdn.net/qq_29573053/article/details/79878437
https://blog.csdn.net/qq_29573053/article/details/79878437

Xavier和Kaiming

Xavier 和 Kaiming 的论文遵循非常相似的推理,唯一的区别是 Kaiming 论文考虑了激活函数,而 Xavier 没有(或者更确切地说,Xavier 将激活函数在 0 处的导数近似为 1)。因此我们这里以Kaiming为主,并夹杂介绍Xavier的区别所在。

正向传播

假设卷积神经网络有:
在这里插入图片描述

输出、输入分别为 y l y_l yl x l x_l xl x l x_l xl 1 × c × k × k 1\times c\times k\times k 1×c×k×k的张量, y l y_l yl 1 × d × h × w 1\times d\times h\times w 1×d×h×w的张量, W l W _{l} Wl d × c × m × n d\times c\times m\times n d×c×m×n的张量,用 c × k 2 c\times k^{2} c×k2表示一个神经元的连接数量, l l l表示对卷积层的编号。具体表示如下,这里的 n l n_l nl是指输入通道数, d d d是输出通道数,即过滤器的个数。

在这里插入图片描述

首先我们 假定 W l W _{l} Wl x l x _{l} xl中元素各自独立同分布,且 W l W _{l} Wl x l x _{l} xl两者彼此独立。 在进行具体推导之前我们回顾一下方差、协方差、协方差矩阵的相关知识,可在此篇文章查看
接下来
在这里插入图片描述

又因为 w i , j w_{i,j} wi,j x j x_j xj彼此独立,因此:
在这里插入图片描述
又因为 w i , j w_{i,j} wi,j x j x_j xj分别否是同分布,因此 V a r [ w i , j x j ] Var[w_{i,j}x_j] Var[wi,jxj]始终等于一个共同的值,我们定义其为 V a r [ w l x l ] Var[w_lx_l] Var[wlxl],则:
在这里插入图片描述
按照完全相同的推理,得到:
在这里插入图片描述
偏差 b b b总是习惯被初始化为0,故而 V a r [ b l ] = 0 Var[b_l]=0 Var[bl]=0,则
在这里插入图片描述
记住如下公式(2)
在这里插入图片描述

根据 V a r [ w l x l ] = V a r [ w l ] V a r [ x l ] Var[w_lx_l]=Var[w_l]Var[x_l] Var[wlxl]=Var[wl]Var[xl] σ 2 = E ( X 2 ) − μ 2 \sigma ^{2}=E\left ( X^{2} \right )-\mu ^{2} σ2=E(X2)μ2两个公式可得:
在这里插入图片描述
我们初始化时往往都是设定权值期望为0,故能够得到如上公式(3)。我们最终希望得到的是 V a r [ y ] Var[y] Var[y] V a r [ w l ] Var[w_l] Var[wl]的关系,是否可以将 x x x相关部分去掉呢?

这里就是Xavier和Kaiming的不同点之一:Xavier没有考虑具体的激活函数,这里它假设激活函数是线性函数,而Kaiming是基于ReLU进行的
在这里插入图片描述
可以看到如下公式,我们假设 w l − 1 w_{l-1} wl1是一个关于0对称的分布(期望为0时的正态分布就可以实现),并且 b l − 1 = 0 b_{l−1}=0 bl1=0
在这里插入图片描述
则:
在这里插入图片描述
在这里插入图片描述
于是 m a x ( 0 , y l − 1 ) max(0,y_{l-1}) max(0,yl1)有1/2的概率大于0,和公式(3)的原理一样,可得:
在这里插入图片描述
结合公式(3),可得:
在这里插入图片描述
这是个递归的式子,我们依次计算可以得到
在这里插入图片描述
注意,这里的 n l n_l nl指的是每层的输入通道数,每层可能是不一致的。
This formula is the one that lets us see what could go wrong without a proper initialization, and thus how to design the right one. The product is key. Indeed, if we have a lot of layers (so if L is large), we see that the variance of the last layer yL could be very small (if 1 / 2 n l V a r [ w l ] 1/2n_lVar[w_l] 1/2nlVar[wl] is below 1) or very large ( if 1 / 2 n l V a r [ w l ] 1/2n_lVar[w_l] 1/2nlVar[wl] is above 1). The proper value for what’s inside that product should thus be 1, and that is exactly the sufficient condition the Kaiming paper (and initialization) takes:
在这里插入图片描述
即每层卷积的权值方差与输入通道数的乘积的1/2应该始终等于1,注意这是一个充分不必要条件。

综上所述,Kaiming初始化建议初始化每层权值为一个均值为0标准差为 2 n l \sqrt{\frac{2}{n_l}} nl2 的高斯分布,并且偏差为0。
这里回忆一下Xavier假设激活函数为线性函数至少近似为线性,导数为1,大小约为0,因此没有了1/2的概率,最终 y L y_L yL的公式应该为:
在这里插入图片描述
同理可得,Xavier初始化权重为一个均值为0标准差为 1 n l \sqrt{\frac{1}{n_l}} nl1 的高斯分布。

反向传播

与正向传播相比较,反向传播是对梯度做处理,依据反向梯度传播算法可得:
在这里插入图片描述

这里的 W ^ \widehat{W} W 代表 W W W的转置, Δ y l \Delta y_l Δyl可以看做 l l l层的输出误差,我们假定其为 n l ^ × 1 \widehat{n_l}\times1 nl ×1的张量,注意这里的 n l ^ \widehat{n_l} nl n l n_l nl不一致,可以认为与 d l d_l dl一致。
后向传播使用如下公式, f f f指的是激活函数:
在这里插入图片描述
在Kaiming假设的ReLU的前提下对激活函数求导:
在这里插入图片描述
我们假设 f ′ ( y l ) {f}'(y_l) f(yl) Δ x l + 1 \Delta x_{l+1} Δxl+1彼此之间独立。因为 W ^ \widehat{W} W 由上述假设可知均值为0,则 Δ x l + 1 \Delta x_{l+1} Δxl+1均值也为0。
在这里插入图片描述
故可以进一步推得:
在这里插入图片描述
继续推导得到如下公式(8):
在这里插入图片描述
于是:
在这里插入图片描述

和正向传导同理,可得Kaiming初始化建议初始化每层权值为一个均值为0标准差为 2 n l ^ \sqrt{\frac{2}{\widehat{n_l}}} nl 2 的高斯分布,并且偏差为0。
对Xavier而言,
在这里插入图片描述
Xavier 和 Kaiming 论文采用了两种不同的方法。Xavier 建议最终初始化标准差取两个方向的平均值,这相当于用标准差的分布初始化权重:
在这里插入图片描述
Kaiming认为(5)和(10)都适当地调整了正向和反向信号。事实上,如果我们计算所有 l l l层上 n l n_l nl n l ^ \widehat{n_l} nl 商的乘积,我们会发现一个常数,它只取决于网络开始和结束时的通道数。并且使用(5)和(10)中的一个都是安全的。

参考文献

  1. https://pouannes.github.io/blog/initialization/
  2. https://blog.csdn.net/tutuliangliang/article/details/85049286
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值