最近在用Llama3-8B做中文法律文书摘要的微调,训练集大概2万条,基于Qwen的template改的。跑完3个epoch后,发现模型在中文通用问答上明显变笨了,很多简单句子都开始蹦英文或者重复片段,但法律摘要任务本身效果还行。我用的学习率是2e-5,warmup 100步,batch size 4,梯度累积8。想问问有经验的前辈,这种“偏科”现象是不是因为增量预训练数据太少、导致原有多语言能力被覆盖了?还是说学习率对基座模型来说太高了?另外,有没有什么策略能在保持下游任务效果的同时,尽量少牺牲原有能力?比如用LoRA会不会好一点?有点迷茫,先谢过大家。
微调Llama3后中文能力退化严重,是数据问题还是学习率没调好?
全部回复
共 85 条这个偏科现象挺典型的,2万条数据全量微调Llama3-8B,确实很容易把原来的多语言能力给带偏。你学习率2e-5对全参微调来说不算离谱,但Llama3本身中文底子就一般,法律文书这种高度垂直的语料训3个epoch,模型很容易往那个分布上塌缩,通用能力退化几乎是必然的。我倾向于主因还是数据层面的灾难性遗忘,学习率是次要的加速因素。LoRA确实会好不少,因为基座权重冻住了,相当于在旁路做适配,通用能力保留得明显更完整。不过LoRA也不是万能,rank和target module选不好,法律摘要效果可能达不到你现在的水平。可以试试先LoRA跑一版对比,如果效果掉得不多,基本就说明是遗忘问题而不是学习率问题。另外warmup 100步配2e-5其实偏保守,真正要调的话可以把epoch降到1-2,再混一点通用中文指令数据进去,比例大概1:5到1:10,能明显缓解蹦英文和重复的问题。
你这个现象挺典型的,全参数微调Llama3-8B确实容易把原来的多语言能力带偏,尤其训练数据只有两万条而且领域很窄的时候。2e-5对8B全参来说不算离谱,但配合3个epoch其实已经让模型在这批法律数据上“过拟合”得比较深了,通用能力被挤掉是必然的。你看到的蹦英文和重复片段,大概率是灾难性遗忘加上中文生成分布被法律文书那种句式带跑偏了。LoRA肯定会好很多,因为它只动一小部分参数,原模型的中文底座基本能保住,不过rank和alpha要调,法律摘要这种任务rank给到16或32就够。另外你可以试试在训练集里掺10%到20%的通用中文指令数据,哪怕只是简单的问答对,也能明显缓解退化。学习率方面如果非要用全参,降到5e-6再跑1到2个epoch可能更稳。还有个偏方是训练完把LoRA权重和基座做插值,或者用模型融合的方式往回拉一点通用能力。
2万条数据全参微调确实容易把原能力冲掉,换LoRA只调注意力层会稳很多,学习率再降到1e-5试试。
2万条全参微调掉点通用能力挺正常的,尤其Llama3本身中文底子就薄。我感觉学习率2e-5对8B全参不算离谱,但3个epoch确实偏多,catastrophic forgetting很容易出现。换成LoRA会好很多,r=16左右只动attention层,通用能力基本能保住,法律任务效果也不会差太多。另外可以混一点通用中文指令数据进去,哪怕10%都能明显缓解蹦英文和重复的问题。
2e-5对Llama3-8B来说确实偏高了,全参微调2万条数据3个epoch很容易把原模型的中文能力带偏。我建议你降到5e-6试试,或者直接上LoRA,r=16、alpha=32,只动attention层,通用能力掉得会少很多。另外可以在训练集里混10%左右的中文通用指令数据,能缓解灾难性遗忘。法律摘要这种垂直任务,LoRA效果不一定比全参差。