美文网首页
神经网络中的dropout以及eval()模式

神经网络中的dropout以及eval()模式

作者: Yellow_39f2 | 来源:发表于2019-01-20 06:47 被阅读0次

    在知乎(https://zhuanlan.zhihu.com/p/23178423)和博客园(https://www.cnblogs.com/king-lps/p/8570021.html)分别看到解释dropout和模块的两种模式(train训练模式,eval测试/评估模式)的文章,写的很明了,总结一下自己的更加通俗易懂的理解。

    dropout是用来解决神经网络训练过程中的过拟合问题(over-fitting),因为当训练集的数量不多而网络参数相对多时,训练样本误差带来的影响很大,拟合的过程中强行逼近到了误差值。因此在每一层神经网络中引入dropout,具体的实现过程是在每次更新参数的过程中,随机的剔除掉部分(按照比例参数p)神经元,不对其参数进行更新。

    四层线性神经网络引入dropout regularization

    那么为什么dropout能够有效解决overfitting的问题呢?

    取平均的作用: 先回到正常的模型(没有dropout),我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。(例如 3个网络判断结果为数字9,那么很有可能真正的结果就是数字9,其它两个网络给出了错误结果)。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络(随机删掉一半隐藏神经元导致网络结构已经不同),整个dropout过程就相当于 对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。

    减少神经元之间复杂的共适应关系: 因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。(这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况)。 迫使网络去学习更加鲁棒的特征 (这些特征在其它的神经元的随机子集中也存在)。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的模式(鲁棒性)。(这个角度看 dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高)


    接下来说两种模式,神经网络模块存在两种模式,train模式(net.train())和eval模式(net.eval())。一般的神经网络中,这两种模式是一样的,只有当模型中存在dropout和batchnorm的时候才有区别。比如针对上图中的训练网络,四层有三层进行了dropout,这是为了训练出更加准确的网络参数,一旦我们用测试集进行结果测试的时候,一定要使用net.eval()把dropout关掉,因为这里我们的目的是测试训练好的网络,而不是在训练网络,没有必要再dropout。

    相关文章

      网友评论

          本文标题:神经网络中的dropout以及eval()模式

          本文链接:https://www.haomeiwen.com/subject/yzwtjqtx.html