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函数需要变化

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐