SFT大模型微调过程中涉及的重要参数如下:
在调参过程中,最重要的两个参数是学习率和训练轮次。
在参数设置完成后,执行训练就是等待的过程,如果使用自己的家用显卡,等待时间会非常久。
此外,一般情况下,我们并不会只微调一个模型就结束。
在算力允许的情况下,可以同时尝试不同的参数,进行多个模型的训练,通过观察训练结束时的学习曲线和 loss 值,判断是否应该调整参数后继续训练。
最终,测试多个微调出来的模型,在评估数据集上表现,挑选效果最佳的那一个进行部署应用。
在实验中选取了 Qwen-14B 作为基础,使用不同的参数微调了几个不同的模型,我们看一下效果如何。
由于多数大模型服务平台,包括企业内部自建或商用平台,都是由 数据集构建
→ 模型训练
→ 模型评估
→ 发布服务
这样的流程,因此可以同时发布多个模型,这里定义了一个评估函数同时测试这几个模型的效果。
将发布后模型服务的APPId、名称、以及测试问题作为列表提供给测试函数。
在调参中测试了非常多的参数组合,这里选取了几个代表的情况作为演示。
包括了Qwen-14B原始模型,小学习率但是多轮次训练的 10epoch-2e-5、15epoch-2e-5,大学习率但轮次少的 3epoch-2e-4、3epoch-8e-4 这几个模型。
模型命名中3epoch
代表 Num Train Epochs
为 3,2e-4
代表学习率为 0.0002。
题目一
这里可以观察到 Qwen 原始模型是不清楚答案的,10epoch-2e-5 的模型由于学习率过小并没有学习到。其他模型则给出了正确答案。
题目二
这里观察到 10epoch-2e-5 和 3epoch-2e-4 均出现了学习不足的情况,没有给出完整答案。
题目三
这里我们换一个问法,看看微调后的泛化能力。
可以看到,稍微调整问题的问法,也是能够获得准确答案的。但 10epoch-2e-5 和 3epoch-2e-4 两个模型同样因为学习不足而打错了覆盖国家的数量。
题目四
最后一个问题来看一下验证中发现的问题,在提问一个与训练语料无关的问题时,迭代轮次较多的模型出现了胡言乱语的现象。
能够看到模型训练后并没有丧失原有的功能和知识。多次测试下来胡言乱语是个小概率事件,在模型训练后,还是建议利用一个测试集来评估其效果。