本文内容如下:
1.深度学习的流程
2.根据训练的问题选择解决方案
3.梯度下降方法
4.当训练集效果好但测试集效果差时
5.dropout
1.深度学习的流程
基本流程就是 定义一个函数→评价函数→选择最好的函数
这样就可以得到网络。那么得到网络后,先要测试在训练集上的效果,如果训练集的效果都不好的话,就要回去检查挑选的是否是最好的函数。深度学习上过拟合一般是不容易遇到的,你更容易遇到的问题就是在训练集上正确率也不高。
如果在训练集上已经得到好的结果了,那么在测试集上检查网络的效果。如果结果不好的话,那么才是过拟合,这个时候才要解决过拟合的问题。然后再回到网络里去检查问题出在哪。但是如果你直接通过测试集去改变网络的话,你的网络在训练集的效果也会变差。因此,这个步骤是不能跳跃的,得严格按下面的流程进行。如果在训练集和测试集上效果都很好就可以输出网络了。
同时,在训练网络时,不要总是把问题归在过拟合上面。例如下面这个在测试集的误差图,发现20层的效果比56层的效果好,那么你可能第一反应就是56层的网络过拟合了,但是第一反应归第一反应,还是得回到训练集上来查看是否是过拟合的原因。
从训练集的误差图来看(下图),发现哪怕是在训练集上,56层的效果还是要比20层的效果差。那么这肯定不是过拟合的问题了。那为什么会这样呢?这就有很多原因了,例如,56层的网络就可能卡在局部最小值了,或者鞍点等原因。
所以,在读深度学习文献时,一定要想到,训练到底是遇到了什么问题。这里主要就是从测试集和训练集来考虑问题。确定了什么问题之后,再来想解决方案。例如,dropout,只有在测试集上效果很差时,才会选择用dropout;如果在训练集效果都很差,那使用dropout只会让效果更差。
2.根据训练的问题选择解决方案
前面提到了,训练过程中可能出现的问题。这里来讲一下,出现不同问题时,不同的解决方案。
方案总体如下图,具体后面叙述。
在训练集的效果很差时,我们可以考虑是不是激活函数的选择出了问题。例如,在多年前,我们的网络越深,效果就会越差,下面就是手写数字上的准确率随着层数的变化(使用的sigmoid激活函数),发现层数越深结果质量越差。