2.1 模型偏差
图片均源于《深度学习详解》,侵删。
如果模型的灵活性不够大,a.增加更多特征;b.设一个更大的模型c.深度学习。但损失大也可能是优化做得不好。
2.2 优化问题
一个建议判断的方法,通过比较不同的模型来判断模型现在到底够不够大。
横轴指的是训练的过程,就是参数更新的过程,随着参数的更新,损失会越来越低;
56 层太深了不奏效,无需这么深。但,这个不是过拟合。
建议:“看到一个从来没有做过的问题,可以先跑一些比较小的、比较浅的网络,或甚至用一些非深度学习的方法,比如线性模型、支持向量机(Support Vector Machine,SVM),SVM 可能是比较容易做优化的,它们比较不会有优化失败的问题。也就是这些模型它会竭尽全力的,在它们的能力范围之内,找出一组最好的参数,它们比较不会有失败的问题。因此可以先训练一些比较浅的模型,或者是一些比较简单的模型,先知道这些简单的模型,到底可以得到什么样的损失。
接下来还缺一个深的模型,如果深的模型跟浅的模型比起来,深的模型明明灵活性比较大,但损失却没有办法比浅的模型压得更低代表说优化有问题,梯度下降不给力,因此要有一些其它的方法来更好地进行优化。”————《深度学习详解》
先确定优化没有问题,模型够大了。接下来才看看是不是测试的问题,如果是训练损失小,测试损失大,这个有可能是过拟合。
2.3 过拟合
训练集可以想像成从这条曲线上面,随机采样出来的几个点。模型的能力非常强,灵活性很大,只给它这 3 个点。在这 3 个点上面,要让损失低,所以模型的这个曲线会通过这 3 个点,但是其它没有训练集作为限制的地方,因为它的灵活性很大,所以模型可以变成各式各样的函数,没有给它数据作为训练,可以产生各式各样奇怪的结果。
如果模型自由度很大,它可以产生非常奇怪的曲线,导致训练集上的结果好,但是测试集上的损失很大。 --过拟合的类因
解决过拟合的两个可能的方向
a.增加数据集 or做数据增强
(data augmentation)::数据增强就是根据问题的理解创造出新的数据。
e.g.对图片进行左右翻转,数据就变成两倍;或者是把它其中一块截出来放大等等。但不应把图像上下颠倒->结果可能会奇怪
b.给模型一些限制,让模型不要有过大的灵活性。
所以当训练集有限的时候,来来去去只能够选几个函数(当模型是 2 次曲线时)。虽然说只给了 3 个点,但是因为能选择的函数有限,可能会正好选到跟真正的分布比较接近的函数,在测试集上得到比较好的结果。
b1.给模型比较少的参数:给它比较少的神经元的数量/让模型共用参数,让一些参数有一样的数值
#全连接网络(fully-connected network)其实是一个比较有灵活性的架构,而卷积神经网络(Convolutional Neural Network,CNN)是一个比较有限制的架构。CNN 是一种比较没有灵活性的模型,其是针对图像的特性来限制模型的灵活性。所以全连接神经网络,可以找出来的函数所形成的集合其实是比较大的,CNN 所找出来的函数,它形成的集合其实是比较小的,其实包含在全连接网络里面的,但是就是因为CNN 给了,比较大的限制,所以 CNN 在图像上,反而会做得比较好
b2.用比较少的特征
b3.其他:比如早停(early stopping), 正则化(regularization), 和丢弃法(dropoutmethod)
但也不要给太多的限制, 如图:
模型的复杂程度,或这样让模型的灵活性越来越大。但复杂的程度和灵活性都没有给明确的定义。比较复杂的模型包含的函数比较多,参数比较多。如图 2.10 所示,随着模型越来越复杂,训练损失可以越来越低,但测试时,当模型越来越复杂的时候,刚开始,测试损失会跟著下降,但是当复杂的程度,超过某一个程度以后,测试损失就会突然暴增了。这是因为当模型越来越复杂的时候,复杂到某一个程度,过拟合的情况就会出现,所以在训练损失上面可以得到比较好的结果。在测试损失上面,会得到比较大的损失,可以选一个中庸的模型,不是太复杂的,也不是太简单的,刚刚好可以在训练集上损失最低,测试损失最低。
2.4 交叉验证
比较合理选择模型的方法是把训练的数据分成两半,一部分称为训练集(training set),一部分是验证集(validation set)。
理想上就用验证集挑就好,有过比较好的基线(baseline)算法以后,就不要再去动它了,就可以避免在测试集上面过拟合。
如果随机分验证集,可能会分得不好,分到很奇怪的验证集,会导致结果很差,如果有这个担心的话,可以用 k 折交叉验证(k-foldcross validation)
k 折交叉验证就是先把训练集切成 k 等份。在这个例子,训练集被切成 3 等份,切完以后,拿其中一份当作验证集,另外两份当训练集,这件事情要重复 3 次。即第一份第 2 份当训练,第 3 份当验证;第一份第 3 份当训练,第 2 份当验证;第一份当验证,第 2 份第 3 份当训练。
2.5 不匹配
"不匹配跟过拟合其实不同,一般过拟合可以用搜集更多数据来克服,但不匹配是指测试集跟训练集的分布不同。
这种问题要怎么解决,匹不匹配要看对数据本身的理解了,我们可能要对训练集跟测试集的产生方式有一些理解,才能判断它是不是遇到了不匹配的情况。"————《深度学习详解》
本文基本摘抄自————《深度学习详解》,非营利仅供学习参考。