在本文中,我将主要讨论神经网络(特别是深层网络)中的丢失(dropout)概念,然后进行实验,以了解在标准数据集上实施深层网络并观察丢失的影响对实践的实际影响。
神经网络中的dropout是什么?
术语“dropout”是指在神经网络中删除单位(隐藏的和可见的)。
简而言之,dropout是指在随机选择的某些神经元的训练阶段忽略单元(即神经元)。 “ignore”是指在特定的向前或向后通过过程中不考虑这些单位。
从技术上讲,在每个训练阶段,单个节点要么以1-p的概率从网络中退出,要么以概率p的形式被保留,从而留下一个简化的网络; 删除节点的传入和传出边缘也将被删除。
为什么我们需要dropout?
既然我们对dropout有所了解,就会出现一个问题-为什么我们根本需要dropout? 为什么我们需要从字面上关闭神经网络的某些部分?
这些问题的答案是“防止过度拟合”。
完全连接的层占据了大多数参数,因此,神经元在训练过程中彼此之间发展了相互依赖性,这抑制了每个神经元的个体力量,导致训练数据过度拟合。
dropout—复习
现在,我们对dropout和动机有所了解,让我们详细介绍一下。如果您只想概述神经网络中的dropout情况,那么以上两节就足够了。在本节中,我将介绍更多技术性。
在机器学习中,正则化是防止过度拟合的方法。正则化通过对损失函数增加惩罚来减少过度拟合。通过添加此惩罚,可以对模型进行训练,使其不会学习相互依赖的一组特征权重。那些了解逻辑回归的人可能熟悉L1(拉普拉斯)和L2(高斯)的惩罚。
dropout是一种在神经网络中进行正则化的方法,有助于减少神经元之间的相互依赖学习。
训练阶段:
训练阶段:对于每个隐藏层,每个训练样本,每次迭代,忽略(零淘汰)节点(和相应的激活)的随机分数p。
测试阶段:
使用所有激活,但将它们减少一个因子p(以考虑训练期间丢失的激活)。
一些观察:
dropout迫使神经网络学习更强大的功能,这些功能可与其他神经元的许多不同随机子集结合使用。
dropout大约会使收敛所需的迭代次数加倍。 但是,每个时期的训练时间更少。
对于H个隐藏单元,每个隐藏单元都可以删除,我们有2 ^ H种可能的模型。 在测试阶段,将考虑整个网络,并且每次激活都会减少因子p
在Keras进行实验
让我们在实践中尝试一下这一理论。 为了了解dropout的工作原理,我在Keras中构建了一个深层网络,并尝试在CIFAR-10数据集上对其进行验证。 构建的深层网络具有三个大小分别为64、128和256的卷积层,然后是两个大小为512的密集连接层和一个大小为10(CIFAR-10数据集中的类数)的输出层密集层。
我将ReLU用作隐藏层的激活函数,将Sigmoid用作输出层的激活函数(这些是标准配置,对更改这些特性并没有做太多的尝试)。 另外,我使用了标准的分类交叉熵损失。
最后,我在所有层中都使用了dropout,并以0.1的步长将dropout的比例从0.0(完全没有dropout)增加到0.9,然后将其中的每一个运行到20个迭代。 结果看起来像这样:
从以上图表可以得出结论,随着下降的增加,在趋势开始下降之前,验证准确性会有所提高,而损失会减少。
如果dropout率为0.2,则趋势下降的原因可能有两个:
0.2是此数据集,网络和使用的设置参数的实际最小值
需要更多的时间来训练网络。