参数初始化
预训练初始化
Pre-trained Initialization
固定值初始化
- 对于一些特殊的参数,例如偏置(Bias)可以用一些经验固定值来初始化
随机初始化
Random Initialization
-
为什么不能将参数简单的全部初始化为0?
导致对称权重问题
- 假设神经网络 y = f ( x ) y=f(x) y=f(x),其中包含关于参数 w 1 , w 2 , . . . w_1, w_2, ... w1,w2,...的一次项,二次项等等,以及一个常数项。此时若将参数初始化为0,那么第一次反向传播到各参数的梯度都等于相同的常数,更新后的各新参数值也都是一样的。但在第二次反向传播之后,由于参数的不同幂次,各参数更新的梯度就有所不同。
基于固定方差的参数初始化
Fixed Variance
-
高斯分布初始化:使用一个高斯分布 N ( 0 , σ 2 ) N(0, σ^2) N(0,σ2)对每个参数进行随机初始化
-
均匀分布初始化:在一个给定的区间 [ − r , r ] [-r, r] [−r,r]内采用均匀分布来初始化参数
-
假设随机变量 x x x在区间 [ a , b ] [a, b] [a,b]内均匀分布,则其方差为
var ( x ) = ( b − a ) 2 12 \operatorname{var}(x)=\frac{(b-a)^{2}}{12} var(x)=12(b−a)2
因此,若使用区间为 [ − r , r ] [-r, r] [−r,r]的均匀分布来采样,并满足 v a r ( x ) = σ 2 var(x) = σ^2 var(x)=σ2时,则 r r r的取值为
r = 3 σ 2 r=\sqrt{3 \sigma^{2}} r=3σ2
-
-
一般配合逐层归一化使用
基于方差缩放的参数初始化
Variance Scaling
- 根据神经元的连接数量来自适应地调整初始化分布的方差
Xavier Initialization
Glorot Initialization
-
核心思想:尽可能保持每个神经元的输入和输出方差一致
-
推导流程
- 假设在某神经网络中,第 l l l层的一个神经元为 a ( l ) a^{(l)} a(l),其接收前一层的 M l − 1 M_{l-1} Ml−1个神经元的输出 a i ( l − 1 ) , 1 ≤ i ≤ M l − 1 a_i^{(l-1)}, 1 \leq i \leq M_{l-1} ai(l−1),1≤i≤Ml−1
a ( l ) = f ( ∑ i = 1 M l − 1 w i ( l ) a i ( l − 1 ) ) a^{(l)}=f\left(\sum_{i=1}^{M_{l-1}} w_{i}^{(l)} a_{i}^{(l-1)}\right) a(l)=f(i=1∑Ml−1wi(l)ai(l−1))
其中, f ( ⋅ ) f(·) f(⋅)为激活函数, w i ( l ) w_i^{(l)} wi(l)为参数, M l − 1 M_{l-1} Ml−1为第 l − 1 l-1 l−1层神经元个数,这里暂时假定激活函数为恒等函数,即 f ( x ) = x f(x)=x f(x)=x- 假设 w i ( l ) w_i^{(l)} wi(l)和 a i ( l − 1 ) a_i^{(l-1)} ai(l−1)的均值都为0,并且互相独立,则 a ( l ) a^{(l)} a(l)的均值为
E [ a ( l ) ] = E [ ∑ i = 1 M l − 1 w i ( l ) a i ( l − 1 ) ] = ∑ i = 1 M l − 1 E [ w i ( l ) ] E [ a i ( l − 1 ) ] = 0 \mathbb{E}\left[a^{(l)}\right]=\mathbb{E}\left[\sum_{i=1}^{M_{l-1}} w_{i}^{(l)} a_{i}^{(l-1)}\right]=\sum_{i=1}^{M_{l-1}} \mathbb{E}\left[w_{i}^{(l)}\right] \mathbb{E}\left[a_{i}^{(l-1)}\right]=0 E[a(l)]=E[i=1∑Ml−1wi(l)ai(l−1)]=i=1∑Ml−1E[wi(l)]E[ai(l−1)]=0
- a ( l ) a^{(l)} a(l)的方差为
var ( a ( l ) ) = var ( ∑ i = 1 M l − 1 w i ( l ) a i ( l − 1 ) ) = ∑ i = 1 M l − 1 var ( w i ( l ) ) var ( a i ( l − 1 ) ) = M l − 1 var ( w i ( l ) ) var ( a i ( l − 1 ) ) \begin{aligned} \operatorname{var}\left(a^{(l)}\right) &=\operatorname{var}\left(\sum_{i=1}^{M_{l-1}} w_{i}^{(l)} a_{i}^{(l-1)}\right) \\ &=\sum_{i=1}^{M_{l-1}} \operatorname{var}\left(w_{i}^{(l)}\right) \operatorname{var}\left(a_{i}^{(l-1)}\right) \\ &=M_{l-1} \operatorname{var}\left(w_{i}^{(l)}\right) \operatorname{var}\left(a_{i}^{(l-1)}\right) \end{aligned} var(a(l))=var(i=1∑Ml−1wi(l)ai(l−1))=i=1∑Ml−1var(wi(l))var(ai(l−1))=Ml−1var(wi(l))var(ai(l−1))
也就是说,经过一层网络后,方差被缩放了 M l − 1 var ( w i ( l ) ) M_{l-1} \operatorname{var}\left(w_{i}^{(l)}\right) Ml−1var(wi(l))倍。为了保持方差一致,令缩放倍数为1,即
var ( w i ( l ) ) = 1 M l − 1 \operatorname{var}\left(w_{i}^{(l)}\right)=\frac{1}{M_{l-1}} var(wi(l))=Ml−11
同理,为了使在反向传播中,误差也不被缩放太剧烈,故
var ( w i ( l ) ) = 1 M l \operatorname{var}\left(w_{i}^{(l)}\right)=\frac{1}{M_{l}} var(wi(l))=Ml1
同时考虑前向与反向传播,作为折中,可设置
var ( w i ( l ) ) = 2 M l − 1 + M l \operatorname{var}\left(w_{i}^{(l)}\right)=\frac{2}{M_{l-1}+M_{l}} var(wi(l))=Ml−1+Ml2 -
在计算出参数的理想方差后,可以通过高斯分布或均匀分布来随机初始化参数
var ( w i ( l ) ) = 2 M l − 1 + M l \operatorname{var}\left(w_{i}^{(l)}\right)=\frac{2}{M_{l-1}+M_{l}} var(wi(l))=Ml−1+Ml2
M l M_l Ml代表第 l l l层神经元个数(上式假设激活函数为恒等函数,但同样适用于Sigmoid或Tanh,只不过要乘一个缩放因子)-
高斯分布: N ( 0 , 2 M l − 1 + M l ) \mathcal{N}\left(0, \frac{2}{M_{l-1}+M_{l}}\right) N(0,Ml−1+Ml2)
-
均匀分布:区间 r r r为 6 M l − 1 + M l \sqrt{\frac{6}{M_{l-1}+M_{l}}} Ml−1+Ml6
-
He Initialization
Kaiming Initialization
-
当第 l l l层神经元使用ReLU激活函数时,通常有一半的神经元输出为0,因此其分布的方差也近似为使用恒等函数时的一半,这样只考虑前向传播时,参数的理想方差为
var ( w i ( l ) ) = 2 M l − 1 \operatorname{var}\left(w_{i}^{(l)}\right)=\frac{2}{M_{l-1}} var(wi(l))=Ml−12
-
高斯分布: 2 M l − 1 \frac{2}{M_{l-1}} Ml−12
-
均匀分布:区间 r = 6 M l − 1 r=\sqrt{\frac{6}{M_{l-1}}} r=Ml−16
-
正交初始化
Orthogonal Initialization
-
核心思想:由于采样的随机性,采样出的权重矩阵仍可能存在梯度消失或梯度爆炸问题。为了避免在训练之初就出现梯度消失或梯度爆炸,我们希望误差项在反向传播中具有范数保持性(Norm-Preserving)
-
流程
-
用均值为0,方差为1的高斯分布初始化权重矩阵
-
用奇异值分解得到两个正交矩阵,并使用其中一个作为权重矩阵
-