dropout
- 这篇文章记录下dropout的原文阅读,以及它提出来的想法
- 原文是Dropout: A Simple Way to Prevent Neural Networks from Overfitting
什么是dropout
- 在神经网络中,很容易过拟合,dropout的第一个想法就是希望可以缓解过拟合
- dropout的核心思想就是以概率$p$随机保留网络中的一个单元
- 如下图,左边一个全连接的前馈神经网络
- 右边是随机去掉一些单元后,一个子网络,也叫
thinned networks
为什么dropout有用
- 缓解过拟合的方法,最直观的想法就是:加权平均,我们建立多个预测模型,将最后的预测值加权平均
- 上述想法在小的网络、模型中比较有效,但是如果模型非常大,那么就很难计算了
- 如权重怎么求
- 怎么生成多个模型?要么模型结构不一样,要么数据集不一样
- 上述想法的一种逼近方法就是,生成数量为指数阶的模型,将这些模型的预测值求等权重的几何平均,这些模型是共享权重的
- dropout就是上面逼近方法的技术
- 在训练过程中,下面的$l$是第$l$层网络,$\mathbf{y}^{(l)}$是某个样本第$l$层网络的输出,也是第$l+1$层网络的输入
- 这里$r_{j}^{l}$要么为0,要么为1
- 也就是以$p$的概率丢弃这个unit,丢弃的意思就是让上一层的输入值,变成0
- 比如输入值$\mathbf{y}^{(l)}$是100维的向量,$p=0.1$,那么$\mathbf{y}^{(l)}$中大概有90个unit会变成0,10个unit会保持原来的值
- 在测试(就是预测)过程中,每个参数都要乘$p$
- 这里乘$p$的想法就是,在训练过程中,输出值$y_{i}^{(l+1)}$比全连接网的输出值小,那么预测的时候也应该缩小。
- 如有25个样本同时进行训练,那么就会有25个子网络
- 这25个子网络,怎么做预测呢?每个子网络预测一遍,再求平均,但是这25个子网络计算太耗时了。而且,我们训练,会有很多批数据进来,每个样本都有一个子网络,如果每个子网络都记住的话,显存扛不住
- 使用全网络进行预测输出值
dropout的原理
- 假设模型有$n$个单元(unit),那么丢弃的组合总共有$2^{n}$种可能
- 最好的办法就是把这$2^{n}$种模型都算一遍,但是这不现实
- 每个单元有$p$的概率被丢弃
哲学时间
- 文章说dropout不局限与前馈神经网络,那么attention也可以吗???
文章第二节讲述了提出dropout时,从现实生活种感悟到的一些灵感
这里讲述了有性繁殖的一些理论:
- 有性生殖,孩子基因的一半来自父亲,一半来源于母亲
- 无性生殖,孩子的基因大部份与上一代的相同,只有少部分基因不同
- 无性生殖的孩子,更容易获得环境的适应性:因为上一代的基因很大程度上与环境是相符合的,那么孩子很容易获得上一代适合环境的基因
- 有性生殖,孩子的基因是随机组合的,那么很容易破坏父母中那些适合环境的基因组合,也就是不利于个体的环境适应性
- 但是,为什么真实世界里,有性生殖是有机体普遍的方式呢?
- 有性生殖比较普遍现象的一种解释:
- 在长时间里,自然选择的标准更倾向于基因的综合能力,而不是个体的适应性
- 我的理解是,由于基因组合的多样性,保证了群体的多样性,也就是保证了种群面对各种环境的适应性,而无性生殖的繁衍,传承的环境适应性,只是当时的环境。如果环境一旦变化,这个适应性就大大衰减
- 回到模型,模型可以看作是个体,每个unit看作是基因。这些unit的随机组合,导致了模型的多样性,也就提高了模型对未来数据(未来的环境变化)的处理能力
- 换句话说,就是缓解了过拟合