【李宏毅 深度学习】Tips for Deep Learning-2
当训练集效果好但测试集效果差时,有以下解决办法:
1.Early Stopping
理想情况下,Learning rate和Loss会越来越小。
early stopping是搞一个Validation Set,当模型在验证集上的误差比上一次训练结果差的时候停止训练。
2.Regularization(正则化)
重新定义去minimized的Loss Function。但这个方法对训练效果的改善并步显著。
正则化不一定只能用L2正则化,也可以用L1正则化。
使用L1可能训练后,权重中可能还是有很多很大的值,但会比较稀疏。
3.dropout
每次在训练更新参数之前,
①每一个neuron(包含input,但不包含output)有P%的概率被丢掉。这样network的结构就被改变了。
②每次使用新的network进行训练。每次训练前,要对缺失的neuron重新采样。
对于每次mini-batch来说,dropout会使训练效果变差,是因为每次训练时会让某些神经元消失。但这有效避免overfittiing。
当测试的时候,不需要再用dropout:
为什么要这样做呢?
例如:p=0.5,训练的时候,都要50%的神经元被扔掉;但是测试的时候是不删除neuron的,这里neuron会差2倍,因此,要把乘这个比例才能得到正确的结果。
如果通过样本和总体的variance和bias的关系来解释,相当于总体分成很多样本,求平均值,会产生较好的效果。
dropout不同网络(它们还共享权重)求平均值。
举个简单网络的例子,下面这个神经网络有四种采样情况,把四个结果取平均值,和我们直接权重乘1/2得到的结果是一样的。。
但是,只有线性的时候才正好相等。
有前人验证,其他时候两个结果大致相等,相差不多。