< 快速理解系列(四): 图文+代码, 让你快速理解Dropout >
< NLP系列(一) 用Pytorch 实现 Word Embedding >
< NLP系列(二) 基于字符级RNN的姓名分类 >
< NLP系列(三) 基于字符级RNN的姓名生成 >
学过神经网络的童鞋应该知道神经网络很容易过拟合。而且,如果要用集成学习的思想去训练非常多个神经网络,集成起来抵制过拟合,这样开销非常大并且也不一定有效。于是,这群大神提出了Dropout方法:在神经网络训练时,随机把一些神经单元去除,“瘦身”后的神经网络继续训练,最后的模型,是保留所有神经单元,但是神经的连接权重w乘上了一个刚才随机去除指数p.
左边是标准神经网络,右边是使用Dropout的神经网络,可见只是连接度少了一些,并不影响模型继续训练。其实,Dropout动机和初衷非常有意思。
文章里也谈到,可以类比人类男性和女性的基因。人类通过成千上万年进化,依然保持着这样的繁衍方式:男人贡献一半基因序列,女人贡献一半基因序列,最后组成后代的完整基因序列。当我们观察男人基因序列中的一个基因片段,它不仅要和男人基因序列很好地组合与配合,在繁衍后代时,也要和女人的那一半基因序列组合和配合,这个较好的一个基因片段一定要在两个情况下都很好的适应才行,这正像神经网络中的一个神经元,它要在各个情况下都很好地适应训练,所以,我们要Dropout一些神经元啊!
再来关注一个神经元:
需要指出的是,在训练时,权重参数w是共享的。就是说,只要连接权重的神经单元不dropout,那么每次调参时,权重接着调整参数值。换句话说,权重参数个数和不用Dropout的神经网络参数个数是一样的。不同的是,见上图,在训练时,每个神经单元都可能以概率p去除;在测试阶段,每个神经单元都是存在的,权重参数w要乘以p,成为:pw。
接下来看一下,每层Dropout网络和传统网络计算的不同之处:
最后就是一些实验结果和对比了,直接上代码
转自:专知
完整内容请点击“阅读原文”