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+bias_orig
也就是在基本预测函数的基础上加上了额外的偏差。
即:本来预测函数与真实有一定的偏差,但是加上了额外的偏差,与真实偏差更大。
- 偏差:模型预测值与真实值之间的差距
-
其次对称性: 高斯分布是对称的,这意味着权重的正值和负值出现的概率相等,从而可以避免引入偏斜。
那么某一个神经元输出也就是 z = w 1 x 1 + w 2 x 2 + ⋯ + w n x n = Σ i = 1 n i n w i x i , b = 0 z =w_1x_1+w_2x_2+\cdots+w_nx_n=\mathop{\Sigma}\limits_{i=1}^{n_{in}}w_ix_i,b=0 z=w1x1+w2x2+⋯+wnxn=i=1Σninwixi,b=0
假设 x x x 的输入也具有均值 μ = 0 \mu =0 μ=0,方差 γ 2 \gamma^2 γ2
E
(
z
)
=
Σ
i
=
1
n
i
n
E
[
w
i
x
i
]
E(z) = \mathop{\Sigma}\limits_{i=1}^{n_{in}}E[w_ix_i]
E(z)=i=1ΣninE[wixi]
=
Σ
i
=
1
n
i
n
E
[
w
i
]
E
[
x
i
]
=\mathop{\Sigma}\limits_{i=1}^{n_{in}}E[w_i]E[x_i]
=i=1ΣninE[wi]E[xi]
=
0
=0
=0
D
(
z
)
=
E
(
z
2
)
−
E
(
z
)
2
D(z)=E(z^2)-E(z)^2
D(z)=E(z2)−E(z)2
=
Σ
i
=
1
n
i
n
E
[
w
i
2
x
i
2
]
−
0
=\mathop{\Sigma}\limits_{i=1}^{n_{in}}E[w_i^2x_i^2]-0
=i=1ΣninE[wi2xi2]−0
=
Σ
i
=
1
n
i
n
E
[
w
i
2
]
E
[
x
i
2
]
=\mathop{\Sigma}\limits_{i=1}^{n_{in}}E[w_i^2] E[x_i^2]
=i=1ΣninE[wi2]E[xi2]
= n i n σ 2 γ 2 =n_{in}\sigma^2\gamma^2 =ninσ2γ2
E [ w 2 ] = D ( w ) − ( E [ w ] ) 2 = D ( w ) = σ 2 E[w^2] = D(w)-(E[w])^2=D(w)=\sigma^2 E[w2]=D(w)−(E[w])2=D(w)=σ2
E [ x 2 ] = D ( x ) − ( E [ x ] ) 2 = D ( x ) = γ 2 E[x^2] = D(x)-(E[x])^2=D(x)=\gamma^2 E[x2]=D(x)−(E[x])2=D(x)=γ2
由于需要保证输入与输出的方差一致: D ( z ) = γ 2 D(z)=\gamma^2 D(z)=γ2
那么 n i n σ 2 = 1 n_{in}\sigma^2 = 1 ninσ2=1
若只考虑正向传播,那么 σ = 1 n i n \sigma = \sqrt{\frac{1}{n_{in}}} σ=nin1
也就是 n p . s q r t ( 1 n [ l − 1 ] ) np.sqrt(\frac{1}{n^{[l-1]}}) np.sqrt(n[l−1]1)
那么权重矩阵 W [ l ] W^{[l]} W[l] 采用高斯分布来初始化: N ( 0 , σ 2 ) \mathcal{N}(0, \sigma^2) N(0,σ2)
- 其中 σ = 1 n [ l − 1 ] \sigma = \sqrt{\frac{1}{n^{[l-1]}}} σ=n[l−1]1
即: 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 . r a n d o m . r a n d n ( s h a p e ) np.random.randn(shape) np.random.randn(shape) 默认服从 N ( 0 , 1 ) \mathcal{N}(0, 1) N(0,1)
若即考虑正向传播,也考虑到反向传播
那 n i n σ 2 = 1 , n o u t σ 2 = 1 n_{in}\sigma^2 = 1,n_{out}\sigma^2 = 1 ninσ2=1,noutσ2=1
不可能同时满足二者
只需满足: n i n σ 2 + n o u t σ 2 = 2 n_{in}\sigma^2 + n_{out}\sigma^2 = 2 ninσ2+noutσ2=2
即:
σ
=
2
n
i
n
+
n
o
u
t
(1)
\sigma = \sqrt{\frac{2}{n_{in}+n_{out}}}\tag{1}
σ=nin+nout2(1)
通常:
x
x
x 也采用高斯分布
若 x x x 的输入采用均匀分布 U ( − a , a ) U(-a,a) U(−a,a)
同高斯分布的对称性
那么: σ 2 = ( a − ( − a ) ) 2 12 = a 2 3 \sigma^2 = \frac{(a-(-a))^2}{12}=\frac{a^2}{3} σ2=12(a−(−a))2=3a2
带入公式
(
1
)
(1)
(1) 得出初始化值域:
U
(
−
6
n
i
n
+
n
o
u
t
,
6
n
i
n
+
n
o
u
t
)
U(-\sqrt{\frac{6}{n_{in}+n_{out}}},\sqrt{\frac{6}{n_{in}+n_{out}}})
U(−nin+nout6,nin+nout6)