Xavier 初始化
为什么在 W[l]=np.random.randn(shape)×np.sqrt(1n[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) 中需要乘以 np.sqrt(1n[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→ lll 层的输出值 zzz 很大
→\rightarrow→ 激活函数 aaa 的斜率很大(lll 层的输出 zzz 就是 aaa 的输入)
→\rightarrow→ lll 层权重的梯度变大(lll 层权重的梯度与激活函数的斜率成正比)
→\rightarrow→ 可能引发梯度爆炸
-
主要零均值: 高斯分布的均值为零,这意味着在初始化权重时,期望值为零,不会引入任何偏差。
若 μ !=0\mu~!=0μ !=0,就会引入一个初始的偏差(记为 bias_orig)。假设 a=g(z)a=g(z)a=g(z),且只有一个输出层。
y^=Wx+b\hat{y}=Wx+by^=Wx+b
当引入偏差之后,y^=Wx+b+bias_orig\hat{y} = Wx+b +bias\_origy^=Wx+b+bias_orig
也就是在基本预测函数的基础上加上了额外的偏差。
即:本来预测函数与真实有一定的偏差,但是加上了额外的偏差,与真实偏差更大。
- 偏差:模型预测值与真实值之间的差距
-
其次对称性: 高斯分布是对称的,这意味着权重的正值和负值出现的概率相等,从而可以避免引入偏斜。
那么某一个神经元输出也就是 z=w1x1+w2x2+⋯+wnxn=Σi=1ninwixi,b=0z =w_1x_1+w_2x_2+\cdots+w_nx_n=\mathop{\Sigma}\limits_{i=1}^{n_{in}}w_ix_i,b=0z=w