21. 合理的模型初始化和激活函数

1. 让训练更加稳定

21. 合理的模型初始化和激活函数_第1张图片

2. 让每层的方差是一个常数

以两个变量为例,均值为零可以让变量于自己的轴对称,那么在二维上整个变量分布就是中心对称,而方差则可以控制各个变量离原点的离散程度,那么就可以把二维变量看成限制在某个圈内。

在梯度计算时(偏导)时,梯度方向大致是向着圆心的,那么梯度步长就有一个较大的可调范围,不会出现z字形的梯度路径。

21. 合理的模型初始化和激活函数_第2张图片

3. 权重初始化

4. 例子:MLP

独立同分布IID(independent and identically distributed)

21. 合理的模型初始化和激活函数_第3张图片

  1. 因为是正态分布随机生成的权重,因此第t层的权重矩阵的期望(均值)为0,而方差等于某个初始化的数。
  2. 对于第t层来说,这一层的输入和这一层的权重是相互独立的
  3. 最后一点我的理解如下:

ps: 当X和Y相互独立时,E(XY)=E(X)E(Y),第一项是0,以及之前假设了第二项是0,最后相乘结果为0

正向方差

方差D(x) = E(X^2 )- E(X) ^ 2

21. 合理的模型初始化和激活函数_第4张图片

反向方差和均值

注意:第一行t-1和t弄反了。
21. 合理的模型初始化和激活函数_第5张图片
最后的结果可知,第t层的输出的个数乘以γ要等于1.

5. Xavier初始

21. 合理的模型初始化和激活函数_第6张图片
nt-1 * γt = 1保证前项的输出的方差是一致的,nt * γt = 1保证梯度是一样的。

但是nt-1是第t层输入的维度,nt是第t层输出的维度,除非输入的维度和输出的维度一样,不然的话无法同时满足两个条件。

均匀分布 var(x) = 1 / 12(a-b)^2

权重初始化时的方差是根据输入和输出维度来定的。

6. 假设线性的激活函数

21. 合理的模型初始化和激活函数_第7张图片
关于期望和方差的公式

反向

21. 合理的模型初始化和激活函数_第8张图片
如果希望每一层输出以及梯度的均值为0,方差为固定数的话,只有激活函数f(x)=x满足条件。

7. 检查常用激活函数

21. 合理的模型初始化和激活函数_第9张图片
可以看出:tanh,relu以及调整后的sigmoid都可以选取。

8. 总结

  • 合理的权重初始值和激活函数的选取可以提升数值稳定性。

9. 一些Q&A

  1. 出现nan,inf的情况以及怎么解决?
    答:inf 是学习率调得太大了,或者权重初始的值太大了,导致梯度爆炸,nan一般是除以0,梯度已经很小了,梯度除以了0,就会得到nan。

解决:1)合理的初始化权重 2)选择正确的激活函数 3)学习率不要选太大。实际碰到了的话,就把学习率一直往小调整,知道nan或inf不出现。也可以看权重的初始,让方差的区间小一点,一直往小走,使得出现值,再慢慢调大使得训练有进展

  1. 在训练的过程中,如果网络层的输出的中间层特征元素的值突然变成nan了,是发生了梯度爆炸了吗?
    答:是的,nan一般就是梯度太大造成的,梯度太小的话,是训练不动的,没有进展。

  2. sigmoid能引起梯度消失,但是别的情况也会导致梯度消失,用relu代替sigmoid有一定的概率解决梯度消失,但不一定。

  3. 通过把每一层输出的均值和方差做限制,可以理解为限制各层输出值出现极大或极小的异常值。

你可能感兴趣的:(深度学习,python,算法)