
引言
在人工智能领域,大模型(如GPT、BERT等)已经取得了令人瞩目的成果。它们通过海量数据的预训练,能够在多个任务上展现出超乎寻常的能力。然而,这些模型并不是“万能”的,如何让它们更好地适应特定任务、实现更高效的应用,成为了一个关键问题。
这时,监督微调(Supervised Fine-Tuning,SFT) 技术应运而生。SFT通过在特定领域或任务上对大模型进行进一步训练,使得模型能够在这些任务上达到更高的表现。简单来说,SFT就是用标注数据对已经“懂很多”的大模型再“教一遍”,让它在处理具体问题时更有针对性、更精准。
无论你是AI开发者,还是对自然语言处理、计算机视觉等领域感兴趣的读者,了解SFT技术将帮助你更好地理解如何最大化大模型的应用潜力。
基础概念篇
在进入后续内容之前,先向大家阐述一些 SFT 的基础概念,这有助于新解除AI领域的小伙伴能更好地把握后续知识要点。而对这些基础知识已经了然于胸的资深研发人员,则可忽略这一部分内容。
下面仅是对未来可能出现的概念进行一个简要的解释,详细内容会在后续实际使用中重点讲解。
常见概念解释
Token: 在 NLP 中,一个“token”可以是一个词、一个字或一个标点符号。例如,对于一个句子:"SFT 会使 LLM 变得更强大!" 分词后可能会得到如下的tokens:"SFT","会使","LLM","变得","更","强大","!"
Special Token: 指那些具有特定意义或用途的token。与普通的token(如单词、子词或字符)不同,Special Token 通常用于标记某些特殊的文本结构、任务或功能,比如句子的开始、结束,或是特定的任务指令。假设我们有这样一个句子:"SFT 会使 LLM 变得更强大!"
我们可能会将其格式化为:
[CLS] SFT 会使 LLM 变得更强大! [SEP][CLS] 作为特殊token,标记了句子的开始,表示这是一个分类任务的输入。 [SEP] 用于分隔句子或段落(有时用于表示句子的结束或不同任务的分隔)。 Prediction: 预测是指根据模型的当前输入,猜测接下来应该出现的token是什么。
Loss: 损失函数(这里一般指 交叉熵损失函数:Cross-Entropy Loss)。一个衡量模型输出(预测值)与实际标签(真实答案)之间差距的指标。在监督学习中,我们希望模型的预测接近真实标签,因此交叉熵越小,表示模型的表现越好。
Base Model: 基座模型。一个已经经过大规模预训练的模型,通常这个模型是一个非常通用的模型,能够处理各种自然语言处理任务。Qwen,DeepSeek,GPT,llama等等。
Overfitting: 过拟合。假设你正在训练一个情感分析模型,任务是根据电影评论文本判断评论是积极还是消极。你的模型在训练集上的表现越来越好,几乎达到了100%的准确率。然而,当你把模型应用到一个新的数据集时(比如一个新的电影评论集合),它的表现非常差。
Underfitting: 欠拟合。假设你正在训练一个同样是情感分析的模型,你使用的是一个非常简单的线性回归模型。你的模型在训练集上和测试集上的表现都不好,准确率始终较低。
SFT介绍
目前主流大模型从0开始的训练流程是:预训练(pretrain) -> 监督微调(SFT) -> 强化学习,从而达到人类偏好对齐的目标。对于小于10B的模型、小规模数据的情况下,一般不会做 pretrain 任务,而是选择基于一个base版本的模型执行 SFT 和强化学习。
Pretrain: 在特定任务训练之前,先对模型进行一个通用的、广泛的数据训练,使其学习到通用的特征和表示。在预训练过程中,模型通常不会针对特定任务进行优化,而是通过海量数据学习语言、视觉等基本的模式和规律。
SFT: SFT 指的是利用带标签的输入输出对对预训练的模型进行微调。目标是通过最小化模型预测与真实标签之间的误差来提高模型的性能。
示例: 假设你有一个预训练的语言模型,它已经通过大量文本数据进行过预训练。现在,你希望它能更好地完成“情感分类”任务,即判断一段评论是“积极”还是“消极”。你会提供一个包含已标注情感标签的评论数据集(例如:“我喜欢这本书”标注为“积极”,“这本书很差”标注为“消极”)。模型通过比较自己的预测(例如“积极”)和真实标签(例如“积极”)的差异,进行调整,以便下次可以更准确地分类评论。 RLHF: RLHF 是通过人类反馈来优化模型行为的一种方法。模型的训练目标并不是基于直接的标签数据,而是根据人类对模型输出的评估和奖励信号进行训练。
示例: 假设你有一个对话模型,目标是让它更好地与人类进行有意义的对话。你先通过一个初步的 SFT 过程训练模型,使其能够理解基本的对话。然后,你使用 RLHF 来进一步优化它。在一个对话场景中,模型可能给出了一个回答(例如,“我喜欢吃苹果”)。人类评估员根据回答的质量(是否自然、是否符合上下文)给出奖励信号(比如:1分,2分,3分)。模型根据这些奖励信号,调整其生成回答的策略,以提高回答质量,从而更好地满足人类的期望。 Pretrain 与 SFT 二者间关系: 首先,SFT 和 Pretrain 在训练方式上没有任何区别,主要区别在于数据的组成形式上:
(1)在预训练(pretrain)阶段,每条数据都是完整的 4K 或 8K 长度,而在监督微调(SFT)阶段,数据则保持其原始长度,即原本多长就多长。
(2)SFT 过程中会引入在预训练阶段未曾出现过的特殊标记(special_token),目的是让模型能够学习全新的语义信息。
(3)SFT 会向模型展示至关重要的结束标记(eos_token),而预训练模型由于未接触过该标记,从而无法在生成文本时适时停止。
(4)通过特殊标记(special_token)的运用,SFT能够将语料划分为不同的角色,其中标准配置包括系统(system)、用户(user)、助手(assistant)等角色,此外,根据具体的业务需求,还可以设置 “背景” “旁白” “事件” 等多种角色。
(5)在 SFT 中,通常不对 prompt 计算 loss,但这并不意味着它无法计算 loss。之所以不计算,主要是因为 prompt 存在较为严重的同质化(prompt类似)问题。若不设置 loss_mask,模型会反复学习相同的内容。然而,如果你能确保每条 prompt 都是独一无二的,那么就可以省去 prompt 的 loss_mask 环节。另外,对于 session 数据,需要明确是计算每个 answer 的 loss,还是仅计算最后一轮 answer 的 loss。
SFT 与 RLHF 二者间关系: 通常,SFT是在初步阶段进行的,帮助模型了解基本的任务结构和行为规则。完成 SFT 后,RLHF可以用来进一步调整模型,以更好地满足人类期望和任务需求。当然具体的强化学习算法如PPO,DPO。本文主要讲述 SFT 相关工作,后续可能会涉及强化学习知识讲解。如果想提前了解这两个算法,可以参考以下两篇论文。
(1)PPO:https://arxiv.org/pdf/1707.06347
(2)DPO:https://arxiv.org/pdf/2305.18290
PS: 我们只是轻轻揭开了SFT微调模型神秘面纱的一角,向大家展示了它最基础的知识框架。但这仅仅是探索之旅的开端,接下来的旅程将更加精彩纷呈。我们会深入到微调工作的核心领域——“数据”的构建,这可是重中之重的关键环节。
下一篇的名字:大模型监督微调术SFT:开启AI应用新境界的独家秘方|数据篇(2)
如果你找到了这篇文章,那么恭喜你!如果你没找到,那么大概率是我还没写完(快过年了无心上班学习,Holidays, I'm coming)。。。





