机器学习任务攻略
大部分机器学习任务的形式类似,训练数据(Training data)包含特征 x 和标签 y,测试数据(Testing data)只包含特征 x。
像 Part01 中所述,训练过程都包含以下三个步骤:
-
写出带有未知数的函数
y = f θ ( x ) y = f_\theta(x) y=fθ(x) -
通过训练数据计算损失 L(θ)
-
最优化
θ ∗ = a r g min θ L \theta^* = arg \min_\theta L θ∗=argθminL
预测过程只需要把输入 x 代入函数中,求得输出。通常预测之前都需要线训练模型,如果训练数据的损失很大,显然它在训练集上面也没有训练好。如图所示,接下来再分析一下在训练集上面没有学好的原因。
模型偏差(Model Bias)
假设模型过于简单,如图所示,一个有未知参数的函数代入 θ1,得到一个函数 fθ1(x),同理代入 θ2 可得到另一个函数 fθ2(x),把所有的函数集合起来得到一个函数的集合。但是该集合太小了,没有包含损失变低的函数。
解决方法:给予模型更大的灵活性。具体方法如下
- 增加更多的特征
- 设计更大的模型
- 使用深度学习
优化问题
常用的优化方法是梯度下降法,这种优化的方法存在很多的问题。
比如可能会卡在局部最小值或鞍点,无法找到可以让损失最低的参数。具体解决方法在 Part02 中有提及,包括动量法。
还可能有梯度很大但损失无法下降的问题,具体解决方法在 Part04 中有提及,包括自适应学习率。
过拟合
假设根据训练集,某一个很废的机器学习的方法找出了一个一无是处的函数。只要输入 x 有出现在训练集里面,就把它对应的 y 当做输出。如果 x 没有出现在训练集里面,就输出一个随机的值。 但是因为损失为 0 ,模型错误地理解它为训练效果很好。
这里我们指的很废的方法和无用的模型不具有预测作用,在私人测试集上的效果很差。
解决方法:
- 增加训练集
- 收集额外的数据
- 数据增强(data augmentation)(更常用)
- 给模型一些限制
- 给模型比较少的参数
- 如果是深度学习的话,就给它比较少的神经元的数量
- 让模型共用参数,让一些参数有一样的数值
- 用比较少的特征
- 正则化:添加正则化项以限制模型参数的大小和复杂性,常见的正则化方法包括L1正则化、L2正则化等
- 早停:在训练损失完成下降之前停止模型训练过程
- 丢弃法:用于深度学习,随机丢弃一部分神经元。
- 给模型比较少的参数
交叉验证
比较合理的模型选择(Model selection)方法是把训练的数据分成两半,一部分称为训练集(training set),一部分是验证集(validation set)。
在训练集上训练出来的模型会使用验证集来衡量它们的分数,根据验证集上面的分数去挑选结果,再把这个结果上传到公开数据平台上面得到的公开分数。所以,在挑分数的时候,是用验证集来挑模型,公开(pubilc)测试集分数就可以反映私人(private)测试集的分数。
但假设这个循环做太多次,根据公开测试集上的结果调整模型太多次,就又有可能出现在公开测试集上面过拟合,在私人测试集上面得到差的结果的问题。
其他做法举例:
- 用验证损失,最小的直接挑就好了,不要管公开测试集的结果,有过比较好的基线(baseline)算法以后,就不要再去动它了,就可以避免在测试集上面过拟合。 在实现上,不太可能这么做,因为公开数据集的结果对模型的选择,可能还是会有些影响的。
- k 折交叉验证:避免随机分验证集,可能会分得不好的问题,先把训练集切成 k 等份,将其中一份拿来训练,以此类推得到 k 个模型。把每个模型在相应的训练跟验证数据集上再跑一遍,看看哪个模型的结果最好,就把这个模型用在全部的训练集上,训练后用在测试集上。
Q:为什么要把测试集分成公开和私人?
A:假设所有的数据都是公开,就算是一个一无是处的模型,它也有可能在公开的数据上面得到好的结果。如果只有公开的测试集,没有私人测试集,写一个程序不断随机产生输出就好,不断把随机的输出上传到 平台,可以随机出一个好的结果。这个显然没有意义。而且如果公开的测试数据是公开的,公开的测试数据的结果是已知的,一个很废的模型也可能得到非常好的结果。不要用公开的测试集调模型,因为可能会在私人测试集上面得到很差的结果,不过因为在公开测试集上面的好的结果也有算分数。
不匹配
不匹配是指训练集跟测试集的分布不同,比如训练集上出现反常情况。
考验我们对训练集跟测试集的产生方式的理解,来鉴别不匹配情况,因为即使增大训练数据集也无法解决这类问题。
参考资料:
[1] 李宏毅《深度学习详解》电子版:https://github.com/datawhalechina/leedl-tutorial
[2] 视频讲解:https://www.bilibili.com/video/BV1JA411c7VT/?p=4&vd_source=3efd40f637f094c1da27b1a24b410e12