参数初始化
1. Xavier 初始化
a. 方差稳定性
在前面的笔记中,我们提到了梯度爆炸与梯度消失的问题:
- 如果梯度连乘项中的每一个因子都小于 1,那么一长串小于 1 的数字相乘,结果会以指数级速度缩小,迅速趋近于 0。
- 如果梯度连乘项中的每一个因子都大于 1,那么一长串大于 1 的数字相乘,结果就会以指数级速度增大,变得异常巨大。
导致这些现象的根本原因在于不恰当的信号流。而我们可以用方差来衡量信号的强度:
- 方差接近于 0:意味着所有信号都收敛到了同一个值,信息量几乎为零。这就对应了“信号消失”或“梯度消失”。
- 方差变得极大:意味着信号值变得异常分散和巨大。这就对应了“信号爆炸”或“梯度爆炸”。
因此,我们希望对参数进行合适的初始化,让方差保持稳定。
b. Xavier 方法推导
Xavier 初始化方法的核心目标就是:让每一层输出的方差和输入的方差保持一致。
Xavier 作了如下的假设:
- 激活函数是线性的。
- 输入和输出的权重为 0。
并设:
- 输入 x 的每个元素的方差 Var(xi)=σx2。
- 权重 W 的每个元素的方差 Var(Wij)=σW2。
那么可如下推导该层输出的方差:
yjVar(yj)⇒Var(yj)⇒Var(yj)=i=1∑ninWjixi=i=1∑ninVar(Wjixi)=i=1∑ninVar(Wji)Var(xi)=nin⋅Var(Wji)⋅Var(xi)=nin⋅σW2⋅σx2
均值为 0 的条件用在了下面的式子推导:
E[A2]=Var(A)+(E[A])2=Var(A)
为了保持信号方差稳定,我们仍然希望 Var(y)=Var(x),于是:
Var(yj)⇒σW2=σx2=nin1
这个公式只考虑了前向传播。在训练时,我们还需要反向传播梯度。为了同时兼顾前向传播(信号)和反向传播(梯度)的稳定性,Glorot 和 Bengio 做了一个折中,同时考虑了输入和输出神经元的数量nin、nout:
σW2=nin+nout2
这即是最终的 Glorot 条件。
c. 使用 Xavier 进行初始化
基于上面推导出的理想方差,我们有两种具体的初始化方法:
- Xavier 均匀分布 (Xavier Uniform):从一个均匀分布 U[−a,a] 中采样来初始化权:
W∼U[−nin+nout6,nin+nout6]
这里的 6 是因为均匀分布 U[−a,a] 的方差是 3a2。
- Xavier 正态分布 (Xavier Normal):从一个均值为 0,标准差为 σW 的正态分布中采样:
W∼N(0,nin+nout2)
d. 适用激活函数
tanh(值域 [-1, 1])和 sigmoid(值域 [0, 1],但通常会调整使其中心在 0 附近)这类激活函数,它们在 0 点附近近似线性,并且输出分布相对对称。这使得它们能够较好地满足 Xavier 初始化的假设,从而保持信号在网络中稳定流动。
这里强调对称是为了达到以下目的:当我们给它一个均值为 0 的输入 z 时,它的输出 a 也会在 0 的两侧对称分布,因此输出的均值也近似为 0。这样输出也近似符合 Xavier 的条件了
2. KaiMing 初始化
a. Xavier 在 Relu 上的问题
Xavier 初始化是为 tanh 等对称函数设计的。当把它用在 ReLU 上时,会出现严重问题:
-
非对称激活 (Non-symmetric activation): ReLU 的输出永远是非负的(大于等于0)。这破坏了 Xavier 初始化所依赖的“激活输出均值为0”的核心假设。
-
方差减半 (Variance halving): 这是最关键的一点。如果输入数据 x 是一个均值为0的正态分布,经过 ReLU 函数后,所有负数部分都变成了0。这相当于直接丢掉了一半的信息,其直接后果就是方差会减少大约一半。这意味着,每经过一个 ReLU 层,信号的方差就会减半。在深度网络中,信号会逐层衰减,最终消失,导致梯度消失问题。
b. KaiMing 方法
何恺明等人在他们的论文中,专门针对 ReLU 及其变种,推导出了新的初始化方法。推导如下:
Var(ReLU(x))Var(y)⇒Var(y)⇒ninσW221⇒σW2=21Var(x)=ninσW2Var(ReLU(x))=ninσW221Var(x)=Var(x)=1=nin2
同样地,KaiMing 方法也有下面两种形式:
-
Kaiming 均匀分布 (Kaiming Uniform):W∼U[−nin6,nin6]
-
Kaiming 正态分布 (Kaiming Normal):W∼N(0,nin2)
Kaiming 方法 “乘以2” 的操作,正好抵消了 ReLU 激活函数带来的 “除以2” 的方差衰减效应,从而使得信号能够更好地流动。
3.