Dropout
Dropout是神经网络中防止模型过拟合的重要正则化方式。2014年 Hinton 提出了一个神器,
《Dropout: A Simple Way to Prevent Neural Networks from Overfitting 》。原文:(http://jmlr.org/papers/v15/srivastava14a.html)。
dropout 是指在深度学习网络的训练过程中,按照一定的概率将一部分神经网络单元暂时从网络中丢弃,相当于从原始的网络中找到一个更瘦的网络。
一般情况下,我们只需要在网络存在过拟合风险时才需要实现正则化。如果网络太大,如果训练时间太长,或者没有足够的数据,就会发生这种情况。如果在卷积网络末端有全连接层,那么实现Dropout是很容易的。
在大规模的神经网络中有这样两个缺点:1. 费时;2. 容易过拟合
对于一个有 N 个节点的神经网络,有了 dropout后,就可以看做是 2^N 个模型的集合了,但此时要训练的参数数目却是不变的,这就缓解了费时的问题。
Dropout层只适用于CNN的全连接层,放在激活函数之后,对于其它层,不应该使用Dropout层。相反,应该在卷积之间插入批量标准化处理,BatchNormalization层,使得模型在训练期间更加稳定。
Batch Normalization
Batch Normalization是批量正则化,也是正则化的一个重要方式。原文:(http://de.arxiv.org/pdf/1502.03167)。BN重新调整数据的分布,使数据服从均值为0,方差为1的正态分布。在正则化效果的基础上,批处理规范化还可以减少卷积网络在训练过程中的梯度弥散。这样可以减少训练时间,提升结果。在CNN使用BN层时需要在卷积层和激活层之间插入BN层,(BN层的位置:CONV / FC - > Batch Normalization- > ReLu(或其他激活) - > Dropout - > CONV / FC)或者(BN层的位置:CONV / FC - > ReL