1. 让训练更加稳定
2. 让每层的方差是一个常数
以两个变量为例,均值为零可以让变量于自己的轴对称,那么在二维上整个变量分布就是中心对称,而方差则可以控制各个变量离原点的离散程度,那么就可以把二维变量看成限制在某个圈内。
在梯度计算时(偏导)时,梯度方向大致是向着圆心的,那么梯度步长就有一个较大的可调范围,不会出现z字形的梯度路径。
3. 权重初始化
4. 例子:MLP
独立同分布IID(independent and identically distributed)
- 因为是正态分布随机生成的权重,因此第t层的权重矩阵的期望(均值)为0,而方差等于某个初始化的数。
- 对于第t层来说,这一层的输入和这一层的权重是相互独立的
- 最后一点我的理解如下:
ps: 当X和Y相互独立时,E(XY)=E(X)E(Y),第一项是0,以及之前假设了第二项是0,最后相乘结果为0
正向方差
方差D(x) = E(X^2 )- E(X) ^ 2
反向方差和均值
注意:第一行t-1和t弄反了。
最后的结果可知,第t层的输出的个数乘以γ要等于1.
5. Xavier初始
nt-1 * γt = 1保证前项的输出的方差是一致的,nt * γt = 1保证梯度是一样的。
但是nt-1是第t层输入的维度,nt是第t层输出的维度,除非输入的维度和输出的维度一样,不然的话无法同时满足两个条件。
均匀分布 var(x) = 1 / 12(a-b)^2
权重初始化时的方差是根据输入和输出维度来定的。
6. 假设线性的激活函数
关于期望和方差的公式
反向
如果希望每一层输出以及梯度的均值为0,方差为固定数的话,只有激活函数f(x)=x满足条件。
7. 检查常用激活函数
可以看出:tanh,relu以及调整后的sigmoid都可以选取。
8. 总结
- 合理的权重初始值和激活函数的选取可以提升数值稳定性。
9. 一些Q&A
- 出现nan,inf的情况以及怎么解决?
答:inf 是学习率调得太大了,或者权重初始的值太大了,导致梯度爆炸,nan一般是除以0,梯度已经很小了,梯度除以了0,就会得到nan。
解决:1)合理的初始化权重 2)选择正确的激活函数 3)学习率不要选太大。实际碰到了的话,就把学习率一直往小调整,知道nan或inf不出现。也可以看权重的初始,让方差的区间小一点,一直往小走,使得出现值,再慢慢调大使得训练有进展
-
在训练的过程中,如果网络层的输出的中间层特征元素的值突然变成nan了,是发生了梯度爆炸了吗?
答:是的,nan一般就是梯度太大造成的,梯度太小的话,是训练不动的,没有进展。 -
sigmoid能引起梯度消失,但是别的情况也会导致梯度消失,用relu代替sigmoid有一定的概率解决梯度消失,但不一定。
-
通过把每一层输出的均值和方差做限制,可以理解为限制各层输出值出现极大或极小的异常值。