过拟合:解读损失曲线#
训练模型的时候,损失曲线是最忠实的那面镜子——模型状态好不好,它一清二楚。如果说要是所有损失曲线都长得像下面这张图,那机器学习就会简单得多。
从图20可以看出,此时损失先高后低、一路收敛到某个值附近,这就是教科书上想让你记住的样子。可惜真实的曲线很少这么听话:它可能剧烈振荡,可能突然跳升,可能训练集和测试集各走各的,也可能干脆卡在某个位置反复横跳。
所以这一节我们不打算再往你脑子里塞新公式,而是换一种练法,四张真实的损失曲线,四道判断题。每一道题都先给你一条曲线,再问你这曲线出了什么问题、可能是什么原因。你需要做的,是把前面几节学过的直觉(数据脏了、学习率不合适、模型过拟合、批次没打乱……)调动起来,用它们去解读一条你从没见过的曲线。
练习1:振荡的损失曲线#
先看第一条。曲线没有往下降,反倒像心电图一样剧烈起伏:
第1题: 面对图 21 这条曲线,你可以尝试做哪些事来改善它?
A. 按数据模式(schema)检查数据,找出坏样本并从训练集中移除
B. 降低学习率
C. 把训练集缩到极少量可信样本
D. 增加训练集里的样本数量
E. 提高学习率
练习2:损失曲线突然跳升#
第2条曲线更干脆:本来好好的,突然就炸了。
第2题: 下面哪些项能解释图 22 中这条突然爆掉的损失曲线?
A. 输入数据里含有 NaN——比如某个除零操作算出来的值
B. 输入数据里混进了一批离群值
C. 学习率太低
D. 正则化率太高
练习3:测试损失与训练损失背离#
第三条曲线要更细看一点,它有两条线:
第3题: 下面哪些项最能解释训练集与测试集的损失曲线为什么会出现这种差异?
A. 模型对训练集过拟合了
B. 学习率太高
练习4:损失曲线卡住#
最后一条曲线,前半段看起来还挺正常,后半段却陷入了奇怪的节奏:
第4题: 下面哪一项最可能解释图 24 中这条反复横跳的损失曲线?
A. 训练集没有充分打乱
B. 正则化率太高
C. 训练集里特征太多
关键术语:
- 批次
- 样本
- 特征
- 学习率
- 损失曲线
- 离群值
- 过拟合
- 正则化
- 正则化率
- 测试集
- 训练集
- 验证集