14 数值稳定性 + 模型初始化和激活函数【动手学深度学习v2】
1、数值稳定性

当神经网络的层数很深的时候,就可能影响数值稳定性

这个是告诉 神经网络中对某一层的求梯度,得到的是 d-t次的矩阵乘法

矩阵乘法中容易出现的两个问题就是 梯度爆炸和梯度消失 ,因为累乘

比如这个多层感知机,对第t层求导的结果如图所示

diag()里面不是 1 就是 0 ,所以主要看 后面的 (Wi)T ,也就是权值,
如果权值很大,就会出现梯度爆炸

超出值域,就默认是无穷大

如果使用 sigmoid函数 ,可以看到 当输入值较大,比如为 6 的时候,梯度值很小

diag 里面的数值很小,累乘之后会更小

2、让训练更加稳定

目标是让梯度值在合理的范围内,
那么有以上几种方法,
乘法变加法(减少累乘)、归一化、合理的权重初始化以及使用合理的激活函数

我想要达到上面的目的,就是让每层的方差是个常数,我应该怎么办?
我想要输入的方差和输出的方差是一样的

试一试合理的权重初始化,你可以发现这样一些特点,最优解附近的损失函数表明比较平

独立同分布是指每一个权重分布都是相互独立,同一个分布
均值为0,方差为 γt
当前层的输入 和 当前层的权重 也是相互独立的

这里是默认第t-1层所有元素都是同方差的吗 不然sigma怎么替换成n_t-1的...
n_{t-1}表示第t-1层输入h^{t-1}的个数,但这个应该是做了h^{t}同方差假定,否则这个是不成立的
我想要输入的方差和输出的方差是一样的
Var[h(t-1)j] 就是输入方差 ,那么我想让 输出和输入 一样, 就是说其他项等于 1


所谓反向得到意思,就是求导,然后在均值为0的前提下,要保证输出方差和输入的方差一致,就还是要保证 其他项为1 ,也就是输出项个数 * 预设的方差

那么有人提出了这样一个权重初始化的方法

那么加上一个线性的激活函数 发现这个激活函数需要满足 α = 1,β=0,也就是 y = x

反向也是一样的结论


这一节总的讲的是一个什么问题呢?
也就是说神经网络 层数深了之后,会出现数值不稳定的问题
数值不稳定 ,主要表现在 梯度爆炸 和 梯度消失
这其实和 初始值的设定 以及 激活函数的选取 有关
那么 我就想办法 我想要每层的输入的方差和输出的方差是一样的
1、关于初始值的设定

最后得到 Xavier 初始化的方法
2、激活函数选取,需要满足 y = x
relu、tanh 函数都没问题 ,主要是SIGMOD函数需要变化
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)