目录
以下主要处理损失过大的问题,训练损失和测试损失都小是最终目标
首先判断损失过大类型
- 训练数据损失大
- 模型偏差
- 优化问题
- 训练数据损失小,测试数据损失大
- 过拟合
- 不匹配
模型偏差
选择的模型与实际不匹配,导致让损失较小的函数不能被包含在选择的模型能表示的函数集合内
这时,需要根据特征以及领域知识等及时更换模型,增大模型的灵活性
优化问题
首先,判断是否为优化问题的关键在于在层数加深时,训练数据(training data)上的损失变大才可能是优化问题,在测试数据(testing data)上损失变大才可能是过拟合问题,那么该如何判断呢
可以先跑一些比较小的、比较浅的网络,或甚至用一些非深度学习的方法,比如线性模型、支持向量机(Support Vector Machine, SVM),SVM 可能是比较容易做优化的,它们比较不会有优化失败的问题。
在梯度下降算法中,找到的最优偏置与权重可能不是最优的,可能是局部最小值或鞍点等
过拟合
简单理解过拟合就是模型太灵活,导致在预测时的结果出现的偏差太大,所以在训练集上的偏差小,测试集偏差大
解决过拟合有两种方法
- 增加训练集
其中可以做数据增强,这不算使用了额外的数据。数据增强就是根据问题的理解创造出新的数据。在做图像识别的时候,常做的一个方法是,假设训练集里面有某一张图片,把它左右翻转,或者是把它其中一块截出来放大等等。对图片进行左右翻转,数据就变成两倍。但是数据增强不能够随便乱做。在图像识别里面,很少看到有人把图像上下颠倒当作增强。因为这些图片都是合理的图片,左右翻转图片, 并不会影响到里面的内容。但把图像上下颠倒,可能不是一个训练集或真实世界里面会出现的图像。
增加训练集可以一定程度上限制模型的灵活性
2.限制模型的灵活性
- 可以根据领域知识来选择对应模型如二次函数等,这样就可以根据几个数据来极大的缩小要找函数的范围,从而提高了准确性。全连接网络(fully-connected network)其实是一个比较有灵活性的架构, 而卷积神经网络(Convolutional Neural Network,CNN)是一个比较有限制的架 构。CNN 是一种比较没有灵活性的模型,其是针对图像的特性来限制模型的灵活性。所 以全连接神经网络,可以找出来的函数所形成的集合其实是比较大的,CNN 所找出来 的函数,它形成的集合其实是比较小的,其实包含在全连接网络里面的,但是就是因为 CNN 给了,比较大的限制,所以 CNN 在图像上,反而会做得比较好。
- 减少特征数量
- 早停,正则化,丢弃等
不过限制不能太大,否则会出现模型偏差的问题,如实际问题为二次函数,但给模型一次函数的限制就会出现模型偏差问题
交叉验证
把训练的数据分成两半,一部分称为训练集(training set), 一部分是验证集(validation set)。比如 90% 的数据作为训练集,有 10% 的数据作为验集。
N-fold交叉验证
将训练数据分为N份,分别将每一份作为测试集计算一次损失,然后将N次的损失计算一个平均值,选择平均值较小的损失的那个模型
不匹配
不匹配跟过拟合其实不同,一般的过拟合可以用搜集更多的数据来克服,但是不匹配是指训练集跟测试集的分布不同,训练集再增加其实也没有帮助了。