什么是 Dropout
简单来说,dropout是指在训练阶段忽略某一层网络中随机选取一部分神经元。所谓“忽略”,是在训练阶段的向前或向后传递期间不考虑这些神经元。
更严格地说,在每个训练阶段,以概率p将单个节点从网络中删除,或者说以概率1-p保留某个节点,同时删除掉的节点的传入和传出连接,这样就剩下一个约简后的网络。
为什么需要Dropout?
答案是“防止过拟合”。
完全连接的层拥有大量的参数,因此,神经元在训练期间彼此之间产生相互依赖性,这抑制了每个神经元个体的能力,导致对训练数据的过拟合。
使用Dropout的正确姿势
训练阶段:对于每个hidden layer、每个训练样本、每次迭代,以概率p随机忽略一部分神经元。
测试阶段:去掉dropout层,使用所有神经元,但将它们的输出都要乘以一个因子p(以解释训练期间缺少的激活)。