本文涉及到的详细测试代码和测试步骤放置于:
https://github.com/davidsajare/david-share.git
下的:Deep-Learning/SFT-Base-or-Instruct-Model,本文中不再赘述代码实现。
欢迎给repo点亮Star,您的点赞是作者持续创作的动力。
在大型语言模型(LLM)的应用中,微调是一个关键步骤。微调可以使模型更好地适应特定任务或数据集。然而,随着LLM的发展,出现了两种主要版本:基础LLM和指令LLM。本文将探讨这两种版本的区别,并讨论在实际应用中应该选择哪种版本进行微调。
一、什么是基础LLM和指令LLM?
基础LLM
基础LLM是在大量文本数据上进行预训练的模型,其训练目标是预测下一个标记。这种模型没有特定的格式约束,可以生成非常多样化的文本。然而,基础LLM可能不会直接回答用户的提示,且在生成过程中可能会重复或偏离主题。
指令LLM
指令LLM是在基础LLM的基础上,通过复杂的管道进行微调,使其能够更好地响应用户指令。这些模型经过监督微调(SFT)、带有人类反馈的强化学习(RLHF)和直接偏好优化(DPO)等多个后训练阶段,能够生成更符合人类偏好的答案,并且通常用于聊天应用中。
二、微调基础LLM与指令LLM的区别
基础LLM的微调
基础LLM在微调时,模型会根据新的数据更新权重,逐渐适应新的任务或数据集。由于基础LLM没有特定的格式约束,它可以更快地学习新的特征和风格。
指令LLM的微调
指令LLM已经经过复杂的后训练过程,具有特定的格式和系统指令。如果对指令LLM进行微调,可能会引入与原有系统指令和模板的冲突,导致生成的结果不符合预期。此外,指令LLM在微调过程中可能会部分丧失其原有的安全性和偏好对齐能力。
三、为什么不建议微调指令LLM?
破坏原有训练:微调指令LLM会部分撤销其原有的SFT和DPO训练成果,导致模型生成的答案不再完全符合人类偏好。
系统指令冲突:微调指令LLM会引入新的系统指令,与原有指令发生冲突,导致生成结果不一致。
安全性问题:指令LLM经过安全性训练,微调可能会破坏这些安全性约束,导致生成不安全的内容。