【深度学习】4. 参数初始化详解与数学推导: Xavier, He
深度学习中的参数初始化详解与数学推导
在训练深度神经网络时,参数初始化不仅仅是一个起点设定问题,它直接影响模型的训练稳定性、梯度传播能力和最终性能表现。合理的初始化策略可以避免梯度爆炸或消失,显著提高收敛速度。
一、初始化策略总览
初始化方法主要包括:
- 全零初始化(All zero initialization)
- 小随机数初始化(Small random initialization)
- 校准方差的初始化方法(如 Xavier 和 He 初始化)
二、全零初始化的失败原因
若将神经网络中的所有权重初始化为 0,则每个神经元在正向传播时的输出完全相同:
设第一层神经元输出为:
z i = w i ⊤ x + b i z_i = w_i^\top x + b_i zi=wi⊤x+bi
若 w i = 0 w_i = 0 wi=0,则 z i = b i z_i = b_i zi=bi(相同),经过激活函数后输出也相同,导致反向传播中:
∂ L ∂ w i = ∂ L ∂ z i ⋅ ∂ z i ∂ w i \frac{\partial \mathcal{L}}{\partial w_i} = \frac{\partial \mathcal{L}}{\partial z_i} \cdot \frac{\partial z_i}{\partial w_i} ∂wi∂L=∂zi∂L⋅∂wi∂zi
因 ∂ z i ∂ w i = x \frac{\partial z_i}{\partial w_i} = x ∂wi∂zi=x 相同,最终所有 w i w_i wi 都更新成一样,称为参数退化(Symmetry Problem)。
因此,初始化必须打破对称性。
三、过小或过大的初始化问题
即使打破对称性,如果初始化数值过大或过小,也会造成梯度异常:
- 初始化过大:激活值不断放大,梯度爆炸
- 初始化过小:激活值趋近于 0,梯度消失
假设网络为 L L L 层,每层为:
z [ l ] = W [ l ] a [ l − 1 ] + b [ l ] , a [ l ] = f ( z [ l ] ) z^{[l]} = W^{[l]} a^{[l-1]} + b^{[l]}, \quad a^{[l]} = f(z^{[l]}) z[l]=W[l]a[l−1]+b[l],a[l]=f(z[l])
若 W [ l ] W^{[l]} W[l] 值过大,则 z [ l ] z^{[l]} z[l] 在 f f f(如 sigmoid、tanh)中进入饱和区,导致:
d f ( z ) d z ≈ 0 ⇒ ∂ L ∂ W [ l ] ≈ 0 \frac{d f(z)}{dz} \approx 0 \Rightarrow \frac{\partial \mathcal{L}}{\partial W^{[l]}} \approx 0 dzdf(z)≈0⇒∂W[l]∂L≈0
这会造成梯度消失;反之若过大,则层间梯度乘积可能爆炸。
因此必须合理设置 W W W 的方差,使每层的激活值和梯度方差在前向和反向传播中保持稳定。
四、理想初始化的两个目标
为了保证信号能够有效传播,我们希望满足两个目标:
-
所有层中激活值的均值为 0:
E [ a [ l ] ] = 0 \mathbb{E}[a^{[l]}] = 0 E[a[l]]=0 -
所有层中激活值的方差不变:
Var ( a [ l ] ) = Var ( a [ l − 1 ] ) \text{Var}(a^{[l]}) = \text{Var}(a^{[l-1]}) Var(a[l])=Var(a[l−1])
同样,对梯度也希望满足类似的方差恒定假设。
五、Xavier 初始化的推导(适用于 tanh)
提出者:Xavier Glorot 和 Yoshua Bengio(2010)
假设激活函数为 tanh \tanh tanh,在训练初期 tanh ( z ) ≈ z \tanh(z) \approx z tanh(z)≈z,网络可线性近似。
设:
- a [ l ] = W [ l ] a [ l − 1 ] a^{[l]} = W^{[l]} a^{[l-1]} a[l]=W[l]a[l−1]
- W [ l ] W^{[l]} W[l] 和 a [ l − 1 ] a^{[l-1]} a[l−1] 独立,均值为 0
- 每个元素的方差为 Var ( W i j ) = σ w 2 \text{Var}(W_{ij}) = \sigma_w^2 Var(Wij)=σw2, Var ( a j ) = σ a 2 \text{Var}(a_j) = \sigma_a^2 Var(aj)=σa2
令 n i n n_{in} nin 为输入维度,则:
z i = ∑ j = 1 n i n W i j a j z_i = \sum_{j=1}^{n_{in}} W_{ij} a_j zi=j=1∑ninWijaj
根据独立性和期望线性性,有:
Var ( z i ) = ∑ j = 1 n i n Var ( W i j a j ) = ∑ j = 1 n i n Var ( W i j ) ⋅ Var ( a j ) = n i n ⋅ σ w 2 ⋅ σ a 2 \text{Var}(z_i) = \sum_{j=1}^{n_{in}} \text{Var}(W_{ij} a_j) = \sum_{j=1}^{n_{in}} \text{Var}(W_{ij}) \cdot \text{Var}(a_j) = n_{in} \cdot \sigma_w^2 \cdot \sigma_a^2 Var(zi)=j=1∑ninVar(Wijaj)=j=1∑ninVar(Wij)⋅Var(aj)=nin⋅σw2⋅σa2
为了保持方差不变,要求:
Var ( z i ) = σ a 2 ⇒ n i n ⋅ σ w 2 ⋅ σ a 2 = σ a 2 \text{Var}(z_i) = \sigma_a^2 \Rightarrow n_{in} \cdot \sigma_w^2 \cdot \sigma_a^2 = \sigma_a^2 Var(zi)=σa2⇒nin⋅σw2⋅σa2=σa2
两边约去 σ a 2 \sigma_a^2 σa2 得:
σ w 2 = 1 n i n \sigma_w^2 = \frac{1}{n_{in}} σw2=nin1
如果考虑到反向传播中梯度稳定,则使用 n i n + n o u t n_{in} + n_{out} nin+nout 的平均:
σ w 2 = 2 n i n + n o u t \sigma_w^2 = \frac{2}{n_{in} + n_{out}} σw2=nin+nout2
因此 Xavier 初始化设定:
W ∼ U ( − 6 n i n + n o u t , 6 n i n + n o u t ) W \sim \mathcal{U}\left(-\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}}\right) W∼U(−nin+nout6,nin+nout6)
或者:
W ∼ N ( 0 , 2 n i n + n o u t ) W \sim \mathcal{N}\left(0, \frac{2}{n_{in} + n_{out}} \right) W∼N(0,nin+nout2)
适用于 sigmoid、tanh 等中心对称激活函数。
六、He 初始化的推导(适用于 ReLU)
提出者:Kaiming He 等人(2015)
ReLU 的输出为:
a = max ( 0 , z ) a = \max(0, z) a=max(0,z)
由于其将一半输入截断为 0,输出方差只有输入的一半。因此我们要加倍权重初始化的方差以补偿。
设 a [ l ] = max ( 0 , W [ l ] a [ l − 1 ] ) a^{[l]} = \max(0, W^{[l]} a^{[l-1]}) a[l]=max(0,W[l]a[l−1]),令 z i z_i zi 为该层输出前的线性组合:
Var ( z i ) = n i n ⋅ σ w 2 ⋅ σ a 2 \text{Var}(z_i) = n_{in} \cdot \sigma_w^2 \cdot \sigma_a^2 Var(zi)=nin⋅σw2⋅σa2
由于 ReLU 保留一半:
Var ( a i ) = 1 2 ⋅ Var ( z i ) = 1 2 n i n ⋅ σ w 2 ⋅ σ a 2 \text{Var}(a_i) = \frac{1}{2} \cdot \text{Var}(z_i) = \frac{1}{2} n_{in} \cdot \sigma_w^2 \cdot \sigma_a^2 Var(ai)=21⋅Var(zi)=21nin⋅σw2⋅σa2
为使 Var ( a i ) = σ a 2 \text{Var}(a_i) = \sigma_a^2 Var(ai)=σa2,需满足:
1 2 n i n ⋅ σ w 2 ⋅ σ a 2 = σ a 2 ⇒ σ w 2 = 2 n i n \frac{1}{2} n_{in} \cdot \sigma_w^2 \cdot \sigma_a^2 = \sigma_a^2 \Rightarrow \sigma_w^2 = \frac{2}{n_{in}} 21nin⋅σw2⋅σa2=σa2⇒σw2=nin2
因此 He 初始化设定为:
W ∼ N ( 0 , 2 n i n ) W \sim \mathcal{N}\left(0, \frac{2}{n_{in}} \right) W∼N(0,nin2)
或
W ∼ U ( − 6 n i n , 6 n i n ) W \sim \mathcal{U}\left(-\sqrt{\frac{6}{n_{in}}}, \sqrt{\frac{6}{n_{in}}} \right) W∼U(−nin6,nin6)
适用于 ReLU 及其变体(如 LeakyReLU、ELU)。
七、总结
合理的初始化可以:
- 保持正向传播中激活值方差恒定
- 保持反向传播中梯度方差恒定
- 避免网络在训练初期出现梯度爆炸或梯度消失
Xavier 和 He 初始化已经被深度学习框架(如 PyTorch、TensorFlow)作为默认选项广泛使用。