Xavier 初始化
为什么在 W [ l ] = n p . r a n d o m . r a n d n ( s h a p e ) × n p . s q r t ( 1 n [ l − 1 ] ) W^{[l]}=np.random.randn(shape)\times np.sqrt(\frac{1}{n^{[l-1]}}) W[l]=np.random.randn(shape)×np.sqrt(n[l−1]1) 中需要乘以 n p . s q r t ( 1 n [ l − 1 ] ) np.sqrt(\frac{1}{n^{[l-1]}}) np.sqrt(n[l−1]1)
Xavier 初始化通过保持输入和输出之间的方差不变来尽可能避免梯度爆炸/消失。
它假设每个神经元的输入和输出是从一个均值 μ \mu μ 为零、方差 σ 2 \sigma^2 σ2 相同的分布中抽样得到的,而这个分布的方差可以通过输入和输出的维度来估计。
对于权重矩阵 W [ l ] W^{[l]} W[l] 采用高斯分布来初始化: N ( 0 , σ 2 ) \mathcal{N}(0, \sigma^2) N(0,σ2)
若 W [ l ] W^{[l]} W[l] 方差很大(取值范围非常广泛) → \rightarrow → l l l 层的输出值 z z z 很大
→ \rightarrow → 激活函数 a a a 的斜率很大( l l l 层的输出 z z z 就是 a a a 的输入)
→ \rightarrow → l l l 层权重的梯度变大( l l l 层权重的梯度与激活函数的斜率成正比)
→ \rightarrow → 可能引发梯度爆炸
-
主要零均值: 高斯分布的均值为零,这意味着在初始化权重时,期望值为零,不会引入任何偏差。
若 μ ! = 0 \mu~!=0 μ !=0,就会引入一个初始的偏差(记为 bias_orig)。假设 a = g ( z ) a=g(z) a=g(z),且只有一个输出层。
y ^ = W x + b \hat{y}=Wx+b y^=Wx+b
当引入偏差之后, y ^ = W x + b + b i a s _ o r i g \hat{y} = Wx+b +bias\_orig y^=Wx+b+