在深度学习当中常用的技术就是防止过拟合化的。往往会在全连接层这样参数比较多的层上使用
在模型的训练阶段,让隐藏的神经元一部分工作,一部分不工作。
(1)神经元工作与不工作的比例是在写程序的时候可以设置参数的。
(2)把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)。在做权重的调整的时候,只是对没有删除(工作的)的神经元做调整。
整个模型在训练结束,模型在做测试的阶段是向左边的标准的神经网络。
(3)继续重复下面的过程
恢被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有所更新)
从隐藏层的神经元中随机选择一个一半大小的子集临时删除掉(备份被删除神经元的参数)
对一小批训练样本,先进行前向传播然后反向传播损失并根据随机梯度下降法更新参数,没有被删除那一部分参数得到更新,删除的神经元参数保持被删除前的结果。
补充:
深度神经网络的参数两巨大,容易出现过拟合,Dropout是一种防止神经网络过拟合的技术
常用的防止过拟合的方法:在训练过程中,当模型在验证数据集上效果开始变差时,停止训练。或者时引入参数的惩罚项(倾向于更简单的模型),例如L1,L2正则化。
上面的是常用的过拟合的方法,到那时还是有更好的方法:
一参数在训练集给定的条件下的后验概率作为权重系数,对参数所有可能情况下的预测值做平均。这种方法太耗时,因为要把所有的参数的情况求出来,只能解决一些规模很小的问题。
标准的神经网络的计算(左图),而dropout的计算是在输入层连接一个随机的值
,这个随机的值符合伯努利分布,通过上一层的输入值乘上这个随机分布的值据得到了上一层输入的新的值,然后把这个新生成的值作为输入扔到下一层。
dropout的训练和预测是什么样
在训练阶段,以p的概率保存这个神经元,以1-p的概率丢弃这个神经元,此时,可以发现每个神经元期望的权重是pw,神经元本身的输入时x,但是这个神经元能以p的概率保存,那期望的神经元的值为px,在乘上权重得到输出是pwx.
在测试阶段,把所有的神经元都保留,对权重进行了一个缩放,变成以前的p倍,最后的输出还是xpw。
为什么对权重进行一个缩放,乘上p?
是因为测试阶段需要将权重恢复到和训练阶段相同,才可以保证数据分布的一致性。
虽然每次会产生新的神经网络,但是他们的参数是共享的。