第二节 2021 - 机器学习任务攻略
根据给定的训练集(特征值和标签)去训练网络模型,选择其中最优的(loss最低的)去根据测试集的特征值预测出对应的标签。
model bias问题指的是所创建的模型(函数集)太小,这个函数集中并不存在能最好地表示训练集特征和标签对应关系的函数——类似于猴子捞月,但月并不在湖里
一般而言,一次函数的约束>二次函数的约束>三次函数的约束>……,复杂的模型可以表示简单的模型。
- 解决方法是重新设计模型,让模型更为灵活
- 增加输入的特征向量的维度
- 增加更多的隐含层,神经元
Gradient Descent的问题是局部最优的问题,例如下图:
见下篇博客
方法:比较不同的模型。
当遇到训练集的loss较大时,记录当前的训练集loss变化曲线。重新定义新的model,使其更加灵活,再进行训练,记录这个model的训练集loss变化曲线。
将两个曲线进行比较,若 (1)后者的loss比前者的loss稳定后更小,则是model bias的问题。
(2)后者的loss比前者的loss稳定后更大,则是optimization的问题。因为model更加灵活,按照原理应该距离最优解更为接近。
这里的过拟合是指模型在训练集上的loss较小,但在**测试集上的loss较大——**训练集过拟合
为什么会有overfitting
如左图所示,在训练集未给定的区域需要由模型来自动插值(freestyle)生成,若模型太过灵活(复杂),就会产生左图中的freestyle图像,但是在给定黄色测试集下,它的loss较大。
解决过拟合的方法主要是两个大方向——增加数据+降低模型的复杂度(增加适量的约束)
比如用CNN网络代替全连接网络。
(全连接网络的约束少于CNN网络的约束,即全连接网络可以表示CNN网络)
- 用更多的训练数据——减少模型的freestyle
一般是通过观察数据的合理性,采用旋转、对称、截取等方法在原有数据集的基础上创造出更多的数据集- 减少特征向量的维度
- 减少隐含层的层数
- Early Stopping 更早地结束训练,结束在测试集loss增大之前
- 使用正则化
l o s s n e w = l o s s o l d + λ ∑ i w i 2 loss_{new}=loss_{old}+\lambda \sum_i w_i^2 lossnew=lossold+λi∑wi2- 使用dropout
造成训练集loss较小而测试集loss较大还有一个原因——训练集和测试集的分布不一致,比如下图中的训练集和测试集的图片很明显的不一致。
验证集是从原训练集中划分出来的,主要是为了解决测试集过拟合的问题。
一般而言,测试集有公开测试集和隐藏测试集。公开的测试集一般是可以供给我们开发用来测试的,而隐藏测试集则用于最后的模型评分。
所以如果我们选中一个模型,它在公开测试集上的效果好并不意味着它在隐藏测试集上的效果也好。此时公开测试集即为普通训练集,隐藏测试集即为普通测试集。因为公开测试集是可见的,在一个模型的生成过程中会采用公开测试集上的loss值来衡量最终模型的好坏从而调整超参数,选出更好的模型,因此可能会有在公开测试集上过度匹配造成过拟合的情况。模型的训练仍是通过训练集,在训练过程中会进行模型自有参数的不断优化,当一个模型训练好后会利用验证集来进行超参数的调整,最后用测试集来评估验证集上表现最好的模型。
(1)训练集在建模过程中会被大量经常使用,验证集用于对模型少量偶尔的调整,而测试集只作为最终模型的评价出现,因此训练集,验证集和测试集所需的数据量也是不一致的,在数据量不是特别大的情况下一般遵循6:2:2的划分比例。
(2)为了使模型“训练”效果能合理泛化至“测试”效果,从而推广应用至现实世界中,因此一般要求训练集,验证集和测试集数据分布近似。但需要注意,三个数据集所用数据是不同的。
(3)由于不同数据集定位不同,因此模型在训练集、验证集和测试集上所反映的预测效果可能存在差异,
https://zhuanlan.zhihu.com/p/377789735
一般数据集较小时,采用训练集:验证集:测试集=6:2:2的比例。
- 更好的划分方法是采用N折交叉验证N-fold Cross Validation
具体方法如下:(1) 将数据集分为训练集和测试集,测试集放在一边。
(2) 将训练集分为 k 份,每次使用 k 份中的1 份作为验证集,其他全部作为训练集。
(3) 通过 k 次训练后,得到了 k 个不同的模型。
(4) 评估 k 个模型的效果,从中挑选效果最好的超参数。
(5) 使用最优的超参数,然后将 k 份数据全部作为训练集重新训练模型,**得到最终所需模型,最后再到测试集上测试。