过拟合实战:两个刹车怎么用

10 分钟

先造一个过拟合出来

第一章讲了过拟合的道理,这一章亲手把它造出来再治它。书里有个经典实验:故意只给模型很少的训练数据(比如 200 条),模型却很大——很快你就看到训练 loss 降到接近零,测试 loss 却高高在上。恭喜,你亲眼见证了「背题」。

刹车一:权重衰减

权重衰减(weight decay)的思路是「不许模型的参数长得太大」。参数越大,模型越容易为每个训练样本定制一条弯弯曲曲的怪线;给参数加个「体积税」,它就只好找平缓的规律。在 PyTorch 里这只是一个参数:创建优化器时写上 weight_decay,从 0.001 这种小量级试起。

刹车二:暂退法 Dropout

Dropout 更粗暴:训练时每轮随机「掐掉」一部分神经元(比如一半),逼着剩下的神经元独立学会本事,不许互相「串通作弊」。考试时不许交头接耳,平时就得各自复习——道理一样。注意:Dropout 只在训练时开,测试时自动关闭,PyTorch 帮你处理了,但要记得 model.eval() 这一步的存在。

常见误区

刹车踩得越死越好?错。权重衰减太大、Dropout 太狠,模型会「学不动」(欠拟合)。调参的真谛是在「学不进去」和「背题」之间找平衡点。

练一练:在书里的过拟合实验中,把训练样本从 200 改成 2000,别的都不动,看测试 loss 降了多少。

小纸条

记录两组实验结果:训练样本 200 个和 2000 个时,训练 loss 和测试 loss 各是多少?

登录 后可看答案