最近在尝试用LoRA微调一个7B的基座模型做代码补全,参考了网上不少教程。我用的数据集大概5000条左右的Python函数级样本,训练了3个epoch,loss降得挺快,但实际推理时发现模型在简单任务上反而退化了,比如让它写个快速排序,会输出一堆冗余注释甚至语法错误。我试过把学习率从1e-4调到5e-5,秩从8调到16,效果还是不稳定。想请教下各位,这种情况一般优先怀疑数据质量还是超参设置?另外,微调后评测集上指标掉点,大家通常怎么定位是灾难性遗忘还是过拟合了?有点迷茫,求指点。
楼主
18天前
LoRA微调后模型变“笨”了,是学习率问题还是数据集太小?
请 登录 后发表回复
全部回复
共 21 条
2楼
1天前
5000条函数级样本对7B模型来说确实偏少,而且函数级代码往往缺少上下文依赖,模型很容易记住表面模式而不是学会补全逻辑。你loss降得快但推理退化,我第一反应是数据分布太窄加上epoch过多,3个epoch在这么小的数据集上大概率已经过拟合了。学习率从1e-4到5e-5、秩8到16这些调整其实都是在过拟合框架内打转,换汤不换药。想区分灾难性遗忘和过拟合,可以拿基座模型在通用代码评测集上跑一遍,再拿微调后的跑一遍,如果通用能力掉得厉害那就是遗忘,如果训练集上表现好但留出的验证集也差那就是过拟合。另外建议你把数据集扩到2万条以上,混入一些通用代码语料做replay,比例大概1:4左右,能明显缓解退化。LoRA本身秩不用太大,8通常够用,关键还是数据质量和多样性,代码补全这种任务函数级样本太碎了,最好带上文件级上下文。