深入理解Dropout原理
-
1. 简介
深度神经网络包含多个非线性隐藏层,这使得它能够学习输入和输出之间的复杂关系,但我们不可否认的是:在实际情况中,即使测试集和训练集来自同一分布,训练集仍会存在噪声,那么网络就会同时学习数据和噪声的分布,这样就会容易导致过拟合。
在机器学习中,我们通常采用模型组合来提高模型的性能。然而,对于大型的神经网络来说,对多个网络模型的输出取平均的做法是耗费时间和空间的。所以提出了Dropout。
一个标准的神经网络结构如图1(a)所示,而图1 (b)的结构是在(a)的基础上加入了Dropout,Dropout就是随机丢弃神经网络中的神经元,所谓的丢弃就是将神经元从神经网络中移除,包括它与前向和后向的连接,具体哪个神经元被丢弃是随机的。在Dropout结构中,每个神经元都会有一个参数概率P,P可以由验证集进行选择,也可以设置为0.5。对于输入神经元,P的最佳概率值是接近1,而不是接近0.5。假设一个神经网络有N个神经元,那么可以看成是2n 个如图1 (b)所示的网络的集成。
使用一个单一的没有Dropout的神经网络来进行测试,如图2(b)所示,在测试阶段,神经元的权重w要乘以概率p作为最终的权重pw。
- 2. 模型描述
关于Dropout,文章中没有给出任何数学解释,Hintion的直观解释和理由如下:
1. 减少神经元之间复杂的共适应性。由于每次用输入网络的样本进行权值更新时,隐含节点都是以一定概率随机出现,因此不能保证每2个隐含节点每次都同时出现,这样权值的更新不再依赖于有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况。
2. 可以将dropout看作是模型平均的一种。对于每次输入到网络中的样本(可能是一个样本,也可能是一个batch的样本),其对应的网络结构都是不同的,但所有的这些不同的网络结构又同时share隐含节点的权值。
- 3. 从偏差和方差的角度来看Dropout
- 4. Dropout与Bagging的区别和联系
bagging是一种集成方法(ensemble methods),可以通过集成来减小泛化误差(generalization error)。bagging的最基本的思想是通过分别训练几个不同分类器,最后对测试的样本,每个分类器对其进行投票。在机器学习上这种策略叫model averaging。model averaging 之所以有效,是因为并非所有的分类器都会产生相同的误差,只要有不同的分类器产生的误差不同就会对减小泛化误差非常有效。对于bagging方法,允许采用相同的分类器,相同的训练算法,相同的目标函数。但是在数据集方面,新数据集与原始数据集的大小是相等的。每个数据集都是通过在原始数据集中随机选择一个样本进行替换而得到的。意味着,每个新数据集中会存在重复的样本。在数据集建好之后,用相同的学习算法分别作用于每个数据集就得到了几个分类器。
区别:
1. 在bagging中,所有的分类器都是独立的,而在dropout中,所有的模型都是共享参数的。
2. 在bagging中,所有的分类器都是在特定的数据集下训练至收敛,而在dropout中没有明确的模型训练过程。网络都是在一步中训练一次(输入一个样本,随机训练一个子网络)
相同点:
对于训练集来说,每一个子网络的训练数据是通过原始数据的替代采样得到的子集