为了确保深度神经网络在训练过程中的数值稳定性(避免梯度消失或爆炸),需要合理地选择权重初始值和激活函数。经典的 Xavier初始化 (针对 tanh)和 He初始化(针对 ReLU)正是基于保持前向传播和反向传播过程中方差一致的原则推导出来的。下面还原整个推导过程。
一、基本假设
考虑一个全连接层:
y=Wx+b \mathbf{y} = \mathbf{W} \mathbf{x} + \mathbf{b} y=Wx+b
其中 x∈Rnin\mathbf{x} \in \mathbb{R}^{n_{\text{in}}}x∈Rnin 是输入向量,W∈Rnout×nin\mathbf{W} \in \mathbb{R}^{n_{\text{out}} \times n_{\text{in}}}W∈Rnout×nin 是权重矩阵,b\mathbf{b}b 是偏置(通常初始化为0)。假设:
- 输入 x\mathbf{x}x 的各个分量独立同分布,均值为 0,方差为 σx2\sigma_x^2σx2。
- 权重 WijW_{ij}Wij 独立同分布,均值为 0,方差为 σw2\sigma_w^2σw2。
- 偏置初始为 0。
- 激活函数在初始化阶段近似为线性(即在其未饱和区域工作)。
二、前向传播的方差分析
对于第 iii 个输出神经元:
yi=∑j=1ninWijxj y_i = \sum_{j=1}^{n_{\text{in}}} W_{ij} x_j yi=j=1∑ninWijxj
由于 WijW_{ij}Wij 和 xjx_jxj 独立且均值为 0,有:
Eyi=∑jEWijExj=0 \mathbb{E}y_i = \sum_j \mathbb{E}W_{ij}\mathbb{E}x_j = 0 Eyi=j∑EWijExj=0
方差:
Var(yi)=∑j=1ninVar(Wijxj)=∑j=1nin(EWij2Exj2−(EWijExj)2) \text{Var}(y_i) = \sum_{j=1}^{n_{\text{in}}} \text{Var}(W_{ij} x_j) = \sum_{j=1}^{n_{\text{in}}} \left( \mathbb{E}W_{ij}\^2 \mathbb{E}x_j\^2 - (\mathbb{E}W_{ij}\mathbb{E}x_j)^2 \right) Var(yi)=j=1∑ninVar(Wijxj)=j=1∑nin(EWij2Exj2−(EWijExj)2)
因为均值为0,所以:
Var(yi)=∑j=1ninVar(Wij)Var(xj)=nin⋅σw2⋅σx2 \text{Var}(y_i) = \sum_{j=1}^{n_{\text{in}}} \text{Var}(W_{ij}) \text{Var}(x_j) = n_{\text{in}} \cdot \sigma_w^2 \cdot \sigma_x^2 Var(yi)=j=1∑ninVar(Wij)Var(xj)=nin⋅σw2⋅σx2
为了使得输出方差 σy2\sigma_y^2σy2 与输入方差 σx2\sigma_x^2σx2 保持一致(避免信号在前向传播中指数级放大或衰减),需要:
nin⋅σw2=1⇒σw2=1nin n_{\text{in}} \cdot \sigma_w^2 = 1 \quad \Rightarrow \quad \sigma_w^2 = \frac{1}{n_{\text{in}}} nin⋅σw2=1⇒σw2=nin1
这给出了权重视方差的初始要求。
三、反向传播的方差分析
考虑损失 LLL 对输入 x\mathbf{x}x 的梯度。由于 y=Wx\mathbf{y} = \mathbf{W}\mathbf{x}y=Wx,误差信号反向传播时:
∂L∂xj=∑i=1noutWij∂L∂yi \frac{\partial L}{\partial x_j} = \sum_{i=1}^{n_{\text{out}}} W_{ij} \frac{\partial L}{\partial y_i} ∂xj∂L=i=1∑noutWij∂yi∂L
记 δjx=∂L∂xj\delta_j^x = \frac{\partial L}{\partial x_j}δjx=∂xj∂L,δiy=∂L∂yi\delta_i^y = \frac{\partial L}{\partial y_i}δiy=∂yi∂L,则:
δjx=∑i=1noutWijδiy \delta_j^x = \sum_{i=1}^{n_{\text{out}}} W_{ij} \delta_i^y δjx=i=1∑noutWijδiy
假设 δiy\delta_i^yδiy 独立同分布,均值为 0,方差为 σδy2\sigma_{\delta^y}^2σδy2,且与 WijW_{ij}Wij 独立。则:
Eδjx=0 \mathbb{E}\\delta_j\^x = 0 Eδjx=0
Var(δjx)=∑i=1noutVar(Wij)Var(δiy)=nout⋅σw2⋅σδy2 \text{Var}(\delta_j^x) = \sum_{i=1}^{n_{\text{out}}} \text{Var}(W_{ij}) \text{Var}(\delta_i^y) = n_{\text{out}} \cdot \sigma_w^2 \cdot \sigma_{\delta^y}^2 Var(δjx)=i=1∑noutVar(Wij)Var(δiy)=nout⋅σw2⋅σδy2
为了保持梯度方差在反向传播中稳定(σδx2=σδy2\sigma_{\delta^x}^2 = \sigma_{\delta^y}^2σδx2=σδy2),需要:
nout⋅σw2=1⇒σw2=1nout n_{\text{out}} \cdot \sigma_w^2 = 1 \quad \Rightarrow \quad \sigma_w^2 = \frac{1}{n_{\text{out}}} nout⋅σw2=1⇒σw2=nout1
四、Xavier 初始化(Glorot 初始化)
前向与反向传播对方差的要求矛盾:
1ninvs1nout \frac{1}{n_{\text{in}}} \quad \text{vs} \quad \frac{1}{n_{\text{out}}} nin1vsnout1
Glorot & Bengio (2010) 提出取二者的调和平均 ,使得折中后前向和反向的方差都能保持在一定范围内:
σw2=2nin+nout \sigma_w^2 = \frac{2}{n_{\text{in}} + n_{\text{out}}} σw2=nin+nout2
这即是 Xavier 初始化 (也称 Glorot 初始化)。实践中常使用均匀分布:
W∼U(−6nin+nout,6nin+nout) W \sim \mathcal{U}\left(-\sqrt{\frac{6}{n_{\text{in}}+n_{\text{out}}}}, \sqrt{\frac{6}{n_{\text{in}}+n_{\text{out}}}}\right) W∼U(−nin+nout6 ,nin+nout6 )
因为该均匀分布的方差为 13(6nin+nout)2=2nin+nout\frac{1}{3}\left(\sqrt{\frac{6}{n_{\text{in}}+n_{\text{out}}}}\right)^2 = \frac{2}{n_{\text{in}}+n_{\text{out}}}31(nin+nout6 )2=nin+nout2,满足要求。
五、He 初始化(针对 ReLU)
ReLU 激活函数为 ReLU(x)=max(0,x)\text{ReLU}(x) = \max(0, x)ReLU(x)=max(0,x)。在 0 附近,ReLU 并非线性,且负半轴输出恒为 0,这会改变激活值的方差 。具体地,若输入 zzz 服从均值为 0 的对称分布,则经过 ReLU 后,输出 a=max(0,z)a = \max(0, z)a=max(0,z) 的方差为输入方差的一半(因为一半的值被置零,方差减半)。推导如下:
设 z∼N(0,σ2)z \sim \mathcal{N}(0, \sigma^2)z∼N(0,σ2),则 Ea2=12Ez2=12σ2\mathbb{E}a\^2 = \frac{1}{2} \mathbb{E}z\^2 = \frac{1}{2} \sigma^2Ea2=21Ez2=21σ2,而 Ea=σ/2π\mathbb{E}a = \sigma / \sqrt{2\pi}Ea=σ/2π 不为零,但通常忽略均值影响,近似认为 Var(a)≈12σ2\text{Var}(a) \approx \frac{1}{2} \sigma^2Var(a)≈21σ2。
为补偿这一减半效应,需要让线性部分(卷积或全连接)的输出方差加倍,使得 ReLU 之后的方差恢复为原值。因此,前向传播条件变为:
Var(y)=nin⋅σw2⋅σx2 \text{Var}(y) = n_{\text{in}} \cdot \sigma_w^2 \cdot \sigma_x^2 Var(y)=nin⋅σw2⋅σx2
而 ReLU 之后输出方差变为 12Var(y)\frac{1}{2} \text{Var}(y)21Var(y)。为了令 ReLU 后的方差等于输入方差 σx2\sigma_x^2σx2,需要:
12ninσw2=1⇒σw2=2nin \frac{1}{2} n_{\text{in}} \sigma_w^2 = 1 \quad \Rightarrow \quad \sigma_w^2 = \frac{2}{n_{\text{in}}} 21ninσw2=1⇒σw2=nin2
这就是 He 初始化(Kaiming 初始化),针对 ReLU 及其变体(如 PReLU)。对于带 leaky 的 ReLU,分母会略有不同。
六、为什么 ReLU / tanh 比 sigmoid 更合适?
-
梯度饱和 :
sigmoid 函数在两端(x→±∞x \to \pm\inftyx→±∞)导数趋近 0,容易导致梯度消失。而 tanh 在 0 附近近似线性,且输出零均值,有利于梯度流动。ReLU 在正半轴导数为 1,无饱和问题(负半轴虽为 0,但产生稀疏性且梯度不消失)。
-
均值中心化 :
sigmoid 的输出均值恒为正(0.5),这会导致后续层的输入偏移,增加优化难度。tanh 输出均值为 0,ReLU 输出虽然非负,但通过 He 初始化可以良好工作。
-
计算效率 :
ReLU 只需取最大值,计算简单;tanh 和 sigmoid 涉及指数运算,成本更高。
综上,通过方差分析推导出的初始化策略(Xavier 用于 tanh,He 用于 ReLU)与合适的激活函数配合,能有效保持信号在深层网络中的数值稳定性,从而加速收敛并提升性能。