理解dropout
dropout
dropout指的是在神经网络层中,随即删掉一定比例的神经元,让它们不发挥传递作用,使网络模型变得稀疏的一种模型方法。
网络中的神经元以概率\(p\),变为\(0\),以\(q\)的概率保留,其中\(q = 1-p\)。
为什么使用dropout
众所周知,深度学习一直有那么几个很让人头疼的问题,其中就有模型过拟合和训练时间长。而dropout就是对抗这两个问题的方法。
尤其是对于过拟合,所有的复杂模型在经过长时间训练后,基本都有可能出现过拟合,这时候模型就很难泛化,对于复杂的没见过的数据很难判断。而过拟合很大程度上因为模型的神经元之间通过不恰当的复杂连接依赖性太高,降低了本身的泛化能力。
一个解决方法是多训练几个模型,做平均求结果。但是这种方法依然要训练大量的参数,时间上还是降不下来。
ensemble
dropout选择随机保留一部分神经元,保留下来的神经元在这次train中去协同适应,而由于每次都是随机的,所以这些神经元之间的固定关系就减少了,相比于之前的模型出现过拟合的情况就会好很多。
现在可以理解成我们能够产生\(2^n\)种模型,其中\(n\)是神经元数量。这些模型能够起到结果平均的效果,而我们总共要训练的参数却没有成倍增长,相当于不同模型权值是共享的,减少了模型的协同作用,不同的ensemble方式让模型更加多样化。
motivation
有一个很形象的比喻,这个观点可以直观地帮助理解为什么dropout可以发挥较好的效果。
dropout的动机与性别在自然界的出现相关。自然界的繁殖有有性繁殖和无性繁殖,常见的动物都采用有性繁殖,而很多低等的微生物会无性繁殖。无性繁殖会从母体的细胞中继承绝大多数的遗传基因,少部分靠变异,母体中的有利于生存的遗传基因会直接传递给后代,然而大自然最后还是选择了有性繁殖。
因为组合对生命进化起着更为关键的作用,即上一节说的ensemble。有性繁殖的组合方式让高等生命有更大的几率生存下来,而且能够更好地适应环境的变化,所以微生物的生存环境基本不会变化,只在很固定的范围内生存,而动物却能不停移动。
模型变化
train
引入dropout后,模型有下面这样的变化。
test
测试时,我们让所有的参与dropout的参数都用期望计算。在\(p\)概率下保留的期望\(E = (1 - p) \times 0 + p x\)。
测试时,参数缩放。