- 在神经网络中,通常需要随机初始化模型参数的原因是什么?
回顾多层感知机一节描述的多层感知机。为了方便解释,假设输出层只保留一个输出单元 𝑜1 (删去 𝑜2 和 𝑜3 以及指向它们的箭头),且隐藏层使用相同的激活函数。如果将每个隐藏单元的参数都初始化为相等的值,那么在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。在反向传播中,每个隐藏单元的参数梯度值相等。因此,这些参数在使用基于梯度的优化算法迭代后值依然相等。之后的迭代也是如此。在这种情况下,无论隐藏单元有多少,隐藏层本质上只有1个隐藏单元在发挥作用。因此,正如在前面的实验中所做的那样,我们通常将神经网络的模型参数,特别是权重参数,进行随机初始化。 - 常用的参数初始化方式
- 前置知识:神经元输出的方差会随着神经元数量的增大而变多。
-
让神经元输出的方差不随神经元的数量增加而增加反推出参数的初始分布:
image
参考浅梦csdn链接
参考知乎链接
一般就是以正态分布和均匀分布两种方法进行初始化,关于正态和均匀的参数如何设置,可以参考文章:https://arxiv.org/abs/1502.01852;http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
结论就是不同的激活函数采用的初始化方法应当是不一致的,具体来说:
(1)对于tanh函数: 标准初始化
标准正态初始化方法保证激活函数的输入均值为,(由于sigmoid函数的输出不是关于原点对称的,因此标准初始化不适用于sigmoid函数)
- w采用正态初始化
- 均匀分布初始化
(2)对于tanh函数:Xavier随机初始化(常用)
glorot认为优秀的初始化应该使得各层的激活值和状态梯度的方差在传播过程中保持一致。它的设计主要考虑到,模型参数初始化后,每层输出的方差不该受该层输入个数影响,且每层梯度的方差也不该受该层输出个数影响。
Xavier初始化要求神经元的权重的方差,该方法有一定限制,其推导过程假设激活函数在零点附近接近线性函数,且激活值关于0对称(tanh满足,sigmoid函数和relu函数不满足这些假设)
- w采用正态初始化
- 均匀分布初始化
(3)对于ReLu函数:He初始化
- w采用正态初始化
- 均匀分布初始化
- b可以采用全0初始化
(4)随机初始化+BN
BN是将输入的数据分布变成高斯分布,这样可以保证每一层神经网络的输入保持相同分布。
image
优点
随着网络层数的增加,分布逐渐发生偏移,之所以收敛慢,是因为整体分布往非线性函数取值区间的上下限靠近。这会导致反向传播时梯度消失。BN就是通过规范化的手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值0方差1的标准正态分布,使得激活输入值落入非线性函数中比较敏感的区域。可以让梯度变大,学习收敛速度快,能大大加快收敛速度。
————————————————
版权声明:本文为CSDN博主「LoveMIss-Y」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27825451/article/details/88707423
和都是学习到的参数。
有了BN的帮助,使用较小的方差初始化即可。
GRU
- 目的
应对RNN梯度消失的问题,捕捉长时间的依赖。
重置门:捕捉短期依赖
更新门:捕捉长期依赖
需要初始化的参数:12
cell中的核心参数9个+输出到y的w和b两个+隐藏层初始状态矩阵1个=12个
LSTM
- 核心组件:遗忘门,输入门,输出门
需要初始化16个参数
网友评论