1. 概念
深度神经网络模型的训练为什么会很困难?其中一个重要的原因是,深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。为了训好模型,我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略。
BN可以加快模型训练时的收敛速度,减轻梯度爆炸或者梯度消失,使得模型训练过程更加稳定。并且能起到一定的正则化作用,几乎代替了Dropout。
更新:
- 神经网络训练过程的本质是学习数据分布,然后随着网络训练的进行,每个隐藏层的参数变化使得后一层的输入数据分布也随之改变,致使网络在每次迭代中都需要拟合不同的数据分布,增大训练的复杂度。
- 对每一层的每个维度数据进行归一化,约束数据的分布
- 以Sigmoid激活函数为例,若每一层都约束为均值为0、方差为1的分布,则大多数数据均位于激活函数的非线性层,极大的限制了网络的表达能力。为此在具体实现中增加两个待学习参数
,对归一化的数据进行变换重构(
,相当于将数据从标准分布通过伸缩、平移映射到一个学习到的分布中,既保留了网络的表达能力,又不会使下一层网络的输入数据分布剧烈变动)
2. 主要方法
3. 对卷积做批量归一化
4. Dropout抑制过拟合
工作原理:在深度网络训练中,以一定概率随机临时丢弃一部分神经元节点,类比于Bagging方法,Dropout可被认为是一种深度神经网络的模型集成算法,含N个神经元的神经网络可看作又个模型的集成,可减少过拟合风险。
实现:训练阶段以概率随机临时丢弃一部分神经元节点,测试阶段不会丢弃神经元,但每个参数要乘以
。
5. 神经网络参数初始化为0
结论:卷积神经网络可以,全连接网络不行(甚至不能全部初始化为任一相同值)。
考虑全连接的神经网络,同一层中的任意神经元都是同构的,它们拥有相同的输入和输出,如果再将参数全部初始化为同样的值,那么无论前向传播还是反向传播的取值都是完全相同的。学习过程将永远无法打破这种对称性,最终同一网络层中的各参数仍然是相同的,等价于隐藏层神经元个数均为1。
6. 待补充内容
为什么使用BN后可以使用更大的学习率