Debug
本文最后更新于 2026年2月21日 下午
北京大学信息科学技术学院 生成模型基础(2025秋)的课程笔记
第四部分:Debug
这一讲的内容较为轻松但是很有趣,主要介绍了在机器学习训练中如何更有效地debug
一个机器学习研究者的日常belike:
找一份靠谱的代码(通常来自github/huggingface)
针对自己的问题做特定修改(修改模型结构/修改目标函数/接入新的下游任务/设计新的优化算法)
充分检查
然而debug通常是一件很麻烦的事情,这是由于:
深度神经网络复杂、不可解释
超参数非常多(模型结构,网络层数、宽度、学习率,batch size,优化器,dropout……)
非线性模型,没有优化方法可以收敛到全局最优
因此在训练和测试中就会遇到各种各样稀奇古怪的问题,下面我们将逐个击破
训练中的问题
情况一
如图所示,这里输入输出有明显关联,训练误差一开始也正常下降,然而一段时间过后误差却突然上升,判断很可能是某一次迭代出了问题,针对性进行解决
情况二
这次的情况甚至还不如上一种,因为模型压根就不收敛,训练误差从未降低(悲)
所以得全方位排查错误,可能是代码就出现问题,也可能是优化问题,可以采用较为简单的模型/任务进行验证,逐一排查
情况三
这次看起来倒是赏心悦目,误差初期降的很好,然而到后来误差开始上下抖动,甚至是规律的周期运动,令人疑惑()
猜测可能是学习率过大,或者数据未完全打乱
情况四
这一次除了损失函数不下降……貌似都没问题
然而一般最麻烦的问题就是看不出明显问题
所以要从模型的各种参数之中考虑,逐一排查,很是麻烦
测试中的问题
然而,经常是训练的时候风平浪静,一放到测试集上便风云突变,应该如何是好?
情况一
这里模型在测试集中表现的并不差,然而与训练集相比水平明显有下降,说明模型泛化能力可能不够
情况二
这种情况就比较惨了,测试集上损失函数要么很高,要么很低,但无论如何总是一马平川,和笔者的心电图一样(bushi)
推测是数据可能有问题,或者测试的代码不对
情况三
还有最后一种情况,测试集损失虽然下降,却降的很不稳定,起起伏伏,这显然也是无法接受的
但在训练集上曲线降的很平滑,推测是测试集数据量太小,有一定偶然性