为什么需要设计初始化
首先要接受一个事实:初始化方法会影响训练效果 (其实有人初见会觉得奇怪,但比较显然:如不动点的捕捉,空间其他点的生成位置显然会决定其后来在步进中逐渐跌向的不动点是哪个)
梯度消失与爆炸是显然需要解决的问题,而其的一大表现方式是参数方差的不稳定。一般一系列同类层采用同种的初始化方式,若这种方式使每层的变量(而非参数)方差(暂记$\sigma^2$)
如果$\sigma^2$在传播后变大,则其在传递过程中方差会越来越大,表现为有些数极大(爆炸),有些数极小(消失)(但貌似爆炸的可能更大些?)
但如果将$\sigma^2$变小,其又会在层间传递中逐渐消失,而梯度与$\sigma^2$是会逐渐出现一定的正相关关系的,也就是会出现梯度消失的情况。
Xavier初始化的思路
那么一种理想的初始化方式就有了:使得传入、传出后变量方差相等
而且还要注意,反向传播广义上与正向计算是对称的,也就是还要尽量保证反向传播时传入传出(与正向传播的传入传出相反)的变量方差都是相等的
Xavier的大概设想即是这样。但考虑到各种层的自定义情况以及其当时采用的层构建与现在有些差别。但即使是接近这种构想也能带来显著的效果提升,所以使用它不一定需要背景与原教旨Xavier应用背景完全一样 (P.S.:比较大区别的是激活函数的使用,当时还在主用sigmoid,这使得梯度消失问题非常严重(sigmoid在x值很小时是近似为纯粹的线性函数的),而且sigmoid的对称性也会影响后面的一部分计算内容)
Xavier初始化的推导
首先进行符号定义,对于一个全连接层: $n_{in}$:输入维度 $n_{out}$:输出维度 $W$:大小为$n_{in}\times n_{out}$的权重矩阵 (显然偏置项、均值均与方差无关,这里直接设置为0不讨论,也即:$\vec{b}=\vec{0},\mathbb{E}[x_i] = \mathbb{E}[W_{ij}] = 0$) 而W,x中的每个元素应该是i.i.d的
整个推导可以分为两个部分,分别控制正向传播与反向传播
$$y_j = \sum_{i=1}^{n_{in}}{W_{ij}x_i}$$$$Var[y_j]=Var[\sum_{i=1}^{n_{in}}{W_{ij}x_i}]=\sum_{i=1}^{n_{in}}{Var[W_{ij}x_i]}$$$$Var[W_{ij}x_i] = \mathbb{E}[W^2_{ij}x^2_i]-(\mathbb{E}[W_{ij}x_i])^2$$$$\mathbb{E}[W_{ij}x_i] = \mathbb{E}[W_{ij}]\mathbb{E}[x_i] = 0$$$$Var[x_i] = \mathbb{E}[x^2_i]-(\mathbb{E}[x_i])^2 = \mathbb{E}[x^2_i] \space\space ,W_{ij}同理$$$$Var[W_{ij}x_i] = Var[W_{ij}]Var[x_i]$$$$Var[y_j] = n_{in}Var[W_{ij}]Var[x_i]$$如果想控制方差不变,则需要$Var[y_j] = Var[x_i]$,得到$Var[W_{ij}] = \frac{1}{n_{in}}$
$$\frac{\partial L}{\partial x_i} = \sum_{j=1}^{n_{out}} \frac{\partial L}{\partial y_j}\frac{\partial y_j}{\partial x_i} =\sum_{j=1}^{n_{out}} \frac{\partial L}{\partial y_j} W_{ij} $$$$Var[\frac{\partial L}{\partial x_i}]=Var[\sum_{j=1}^{n_{out}} \frac{\partial L}{\partial y_j} W_{ij}] $$而$\frac{\partial L}{\partial y_j}$与$W_{ij}$是独立的, 在sigmoid函数中 有$\mathbb{E}[\frac{\partial L}{\partial y_j}]=0$,
这样一来就与正向传播完全对称了,同样步骤得到$Var[W_{ij}] = \frac{1}{n_{out}}$
进一步处理:
$$Var[W_{ij}] = \frac{2}{n_{in}+n_{out}}$$$$W_{ij} \sim \text{Uniform}\left (-\sqrt{\frac{6}{n_{in}+n_{out}}},\sqrt{\frac{6}{n_{in}+n_{out}}}\right)$$$$W_{ij} \sim \mathcal{N}\left (0,\sqrt{\frac{2}{n_{in}+n_{out}}}\right )$$回顾与延展
可以看到在反向传播中有借助sigmoid函数对称性获得信息的操作,而这种信息在使用ReLU等激活函数时并不成立,但这并不影响其的确能提升效果的事实,不过是没完全符合时提升得多而已. 为了修正与进一步提升效率,还有He初始化等等,这里就先不提了
说些什么吧!