dropout的思想继承自bagging方法,学习dropout先了解一下bagging方法。
bagging是一种集成方法(ensemble methods),可以通过集成来减小泛化误差(generalization error)。
bagging的最基本的思想是通过分别训练几个不同分类器,最后对测试的样本,每个分类器对其进行投票。在机器学习上这种策略叫model averaging。
model averaging 之所以有效,是因为并非所有的分类器都会产生相同的误差,只要有不同的分类器产生的误差不同就会对减小泛化误差非常有效。
对于bagging方法,允许采用相同的分类器,相同的训练算法,相同的目标函数。但是在数据集方面,新数据集与原始数据集的大小是相等的。每个数据集都是通过在原始数据集中随机选择一个样本进行替换而得到的。意味着,每个新数据集中会存在重复的样本。
在数据集建好之后,用相同的学习算法分别作用于每个数据集就得到了几个分类器。
下面这幅图片很好的解释了bagging的工作方式:我们想实现一个对数字8进行分类的分类器。此时构造了两个数据集,使用相同的学习算法,第一个分类器学习到的是8的上面那部分而第二个分类器学习的是8的下面那个部分。当我们把两个分类器集合起来的时候,此时的分类才是比较好的。
Each of these individual classification ruls is brittle, but if we average there output then the detector is robust.
我们可以把dropout类比成将许多大的神经网络进行集成的一种bagging方法。
但是每一个神经网络的训练是非常耗时和占用很多内存的,训练很多的神经网络进行集合分类就显得太不实际了。
但是,dropout可以训练所有子网络的集合,这些子网络通过去除整个网络中的一些神经元来获得。
如下图所示:
可能有些人会问上图的有些子网络,从输入到不了最终的输出,怎么办?其实对于比较宽的层(wider layers)从输入到输出都切断的概率是非常小的,多以影响不是很大。
如何移除一个神经元呢,我们通过仿射和非线性变换,试神经元的输出乘以0。
每次我们加载一个样本到minibatch,然后随机的采样一个不同的二进制掩膜作用在所有的输出,输入,隐藏节点上。每个节点的掩膜都是独立采样的。采样一个掩膜值为1的概率是固定的超参数。