神经网络初始化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络初始化相关的知识,希望对你有一定的参考价值。

参考技术A 初始化会对深度神经网络模型的训练时间和收敛性产生重大影响。简单的初始化方法可以加速训练,但使用这些方法需要注意小心常见的陷阱。本文将解释如何有效地对神经网络参数进行初始化。

要构建机器学习算法,通常要定义一个体系结构(例如逻辑回归、支持向量机、神经网络)并对其进行训练学习参数。

在优化循环的每次迭代(前向,成本,后向,更新)中,观察到当从输出层向输入层移动时,反向传播的梯度要么被放大,要么被最小化。

假设所有的激活参数都是线性的(恒等函数)。则输出激活为:

假设 ,那么输出预测为:

总而言之,使用大小不合适的值对权重进行将导致神经网络的发散或训练速度下降。 虽然我们用的是简单的对称权重矩阵来说明梯度爆炸/消失的问题,但这一现象可以推广到任何不合适的初始化值。

经验原则

在上述两个经验原则下,反向传播的梯度信号不应该在任何层中乘以太小或太大的值。梯度应该可以移动到输入层,而不会爆炸或消失。
更具体地说,对于层l,其前向传播是:

想要下式成立

确保均值为零,并保持每层输入方差值不变,可以保证信号不会爆炸或消失。该方法既适用于前向传播(用于激活),也适用于向后传播(用于关于激活的成本梯度)。这里建议使用Xavier初始化(或其派生初始化方法),对于每个层l,有:

层l中的所有权重均自正态分布中随机挑选,其中均值 ,方差 ,其中 是第 层网络中的神经元数量。偏差已初始化为零。

使用 简化为

将在方差之外提取求和

将乘积的方差转换为方差的乘积并使用 and

带入假设

第一个假设导致

第二个假设导致

同样的想法

整合上述,得到

希望方差不变( )需要

根据我们如何初始化权重,我们的输出和输入的方差之间的关系会有很大的不同。 请注意以下三种情况。

在实践中,使用Xavier初始化的机器学习工程师会将权重初始化为 或 ,其中后一个分布的方差是 和 的调和平均。

Xavier初始化可以与tanh激活一起使用。此外,还有大量其他初始化方法。 例如,如果你正在使用ReLU,则通常的初始化是 He初始化 ,其初始化权重通过乘以Xavier初始化的方差2来初始化。 虽然这种初始化证明稍微复杂一些,但其思路与tanh是相同的。

以上是关于神经网络初始化的主要内容,如果未能解决你的问题,请参考以下文章

神经网络介绍-激活函数参数初始化模型的搭建

使用 Tensorflow 初始化神经网络权重

神经网络中的权值初始化方法

在pytorch神经网络中初始化权重

神经网络中权值初始化的方法

确定该遗传算法的基因型; GA 初始化神经网络以实现快速高效的学习