神经网络中的Dropout

神经网络中的Dropout

在神经网络中,dropout层是一种减少过拟合的常用方法。

1. dropout解决了什么问题?

​ 在深度神经网络中通常有各种不同的网络结构,有的是浅层的,有的是深层的网络结构。但是在努力追求从数据集中学习出不同的特征的同时神经网络也从数据集中学到了噪声。这就造成了网络在训练集上的性能好,但是在新的数据(测试集)上的性能不好,这种现象就是过拟合现象。为了解决过拟合问题,我们使用了各种正则化技术来惩罚网络的权重,但是这还不够。

​ 减少过拟合的最佳方法是从所有可能的参数设置中获得平均预测,并聚合最终输出。但是,这在计算上过于昂贵,对于实时推断/预测来说是不可行的。

​ 另一种方法是受到集成技术(如AdaBoost、XGBoost和Random Forest)的启发,我们使用不同体系结构的多个神经网络。但这需要对多个模型进行训练和存储,但是随着网络的深入,这将成为一个巨大的挑战。

​ 我们有一个很好地解决方案叫做dropout 层。

神经网络中的Dropout_第1张图片

2. dropout是什么?

​ 如图1所示,在神经网络中,dropout指的是以概率p随机删除输入层和隐藏层中的部分节点,与已删除节点的所有向前和向后连接都将被临时删除,从而创建一个新的网络体系结构。每个节点被丢弃的概率为p

​ 举个例子:给定一个输入 x : { 1 , 2 , 3 , 4 , 5 } x:\{1,2,3,4,5\} x:{1,2,3,4,5}, 将x输入一个全连接网络。我们设定dropout层的概率p=0.2(节点留下的概率是0.8)。在网络训练阶段,在输入x开始的正向传播过程中,20%的节点将会被丢弃,比如x可能会变成 x : { 1 , 0 , 3 , 4 , 5 } x:\{1,0,3,4,5\} x:{1,0,3,4,5}或者 x : { 1 , 2 , 3 , 0 , 5 } x:\{1,2,3,0,5\} x:{1,2,3,0,5}等等。

​ 在隐藏层中也是如此,比如,隐藏层中有1000个神经元节点,dropout设置为0.5,那么在每次迭代(batch)过程中,隐藏层中会随机丢弃500个神经元。

3. dropout如何解决过拟合问题?

​ 在过拟合问题中,网络学习到了噪声。网络训练的主要动机是在给定所有单元(神经元)的情况下,减少损失函数。所以在过拟合中,一个单位的改变可能会弥补其他单位的错误。这导致了复杂的共适应,进而导致过拟合问题,这种复杂的共适应无法在未见的数据集上推广。

​ 现在,如果我们使用dropout,它就会阻止这些单元修复其他单元的错误,从而阻止相互适应。因此,通过随机删除一些单元(节点),它可以通过采用概率方法迫使各层或多或少地承担输入的责任。这种做法可以确保模型的泛化能力,从而缓解过拟合问题。

​ 从图2我们可以很容易地看出,有dropout的隐藏层比没有dropout的层学习更多的泛化特征。

神经网络中的Dropout_第2张图片

4. dropout实现

​ 在一个标准的神经网络中,前向传播过程的计算公式如下:

神经网络中的Dropout_第3张图片

​ 使用dropout后,前向传播过程计算公式如下:

神经网络中的Dropout_第4张图片

​ 在计算z之前,输入数据的每个元素都会与独立的Bernoulli变量相乘。

神经网络中的Dropout_第5张图片

​ 根据图3b,在inference/prediction过程中,是不使用dropout层的。这意味着在预测步骤中要考虑所有的单元。但是,由于从一个层中提取所有单元/神经元,最终的权重会比预期的大,为了解决这个问题,权重会先根据所选的dropout值进行缩放。有了这个,网络就能做出准确的预测。

神经网络中的Dropout_第6张图片

5. 参考链接

  • https://towardsdatascience.com/dropout-in-neural-networks-47a162d621d9

你可能感兴趣的:(神经网络,深度学习,机器学习)