SFT & RLHF
Standard approach - imitation(模仿,SFT) followed by reinforcement(RLHF)
Alignment
什么是alignment?
Alignment(对齐) 指的是让 AI 模型的行为与人类的价值观、目标和期望一致。 alignment技术:大模型对齐 = 让大模型更听话、更安全、更有用,不做坏事。
为什么Alignment很重要?
- 大语言模型能力越来越强,但 能力 ≠ 正确行为
- 如果模型的输出不符合人类意图,可能会造成:
- 误导(hallucination)
- 不当行为(暴力、歧视)
- 安全风险(误答、泄密)
- 用户体验差(答非所问、不礼貌)
Alignment 的常见方法
|方法|简介|阶段| |---|---|---| |SFT (Supervised Fine-Tuning)|用人类写的好回答指导模型行为|初步对齐(Instruction Following)| |RLHF (Reinforcement Learning from Human Feedback)|用人类偏好训练 reward model,再用 RL 优化模型|深度对齐(Preference Alignment)| |Constitutional AI|让模型按照一组"原则"自我改写和审查|自主对齐(Self-Alignment)| |Rejection Sampling / Filtering|删除不安全或不符合要求的输出|后处理对齐(Post-Hoc Alignment)|
SFT - Supervised Fine-Tuning
Supervised Fine-Tuning(监督式微调)是 RLHF 的第一阶段,也常被称为 Instruction Tuning(指令微调)。它的目标是通过优质人工演示数据,让模型学会更符合人类意图的行为模式。
指令微调 instruction-tuing
目标
教模型根据用户提供的指令(instruction)输出风格明确、内容符合意图的回答。
Datasets
常见数据集包括:
- FLAN(Google)
- OpenAssistant / Oasst
- Alpaca
使用这些数据集的核心问题:
- 它们到底包含了哪些内容?
- 构建"高性能"指令数据的关键因素是什么?
幻觉问题(Hallucination)
微调模型去"回答它原本不知道的事实",可能会导致模型产生幻觉(Hallucination),即编造不真实的信息。
- 如果教一些他不知道的东西,可能就是鼓励模型胡说八道,模型belike:"我学到了抽象的知识点!只要胡说八道,就能看起来知道一切。"
- 应对方法:
- 尽量教他他已经知道的知识
- 教它诚实地说"我不知道"
- 不强迫模型去输出它没有学到的知识。
另一个比较震惊的事实是,我们可能有一个非常正确非常丰富的数据集,但反而会引导模型错误生成,因为它会教大语言模型编造事实来匹配那种"深度知识"。 它会过拟合于某种"知识深度"的风格,导致模型不再判断事实真假,而只专注于"如何写得像个专家"。
对于人工标注(human annotation),人类可能比模型知道的更多。我们需要非常谨慎的让模型在不知道答案的时候,能够优雅地拒绝回答(abstain)。
安全微调 safety-tuning
语言模型需要一些安全防护措施(guardrails),因为他们直接面向终端用户部署,而且他们能力很强。 因此它们可能被用于散布错误信息,或生成诈骗/垃圾邮件之类的东西,所以对大语言模型进行safety-tuining很重要。 trade off/challenge: 在拒绝某些内容和不过度拒绝之间的平衡
- "How can I kill someone?(我要怎么鲨人)"(应该拒绝)
- "How can I kill a python process?(我要怎么杀死python进程)"(不应过度拒绝) 这要求模型理解上下文语义,而不是仅根据关键词做过滤。
如何微调 How to fine-tune?
标准做法:使用梯度下降(gradient descent)更新模型参数。
微调的不同阶段:
- Pretraining:用大规模网页数据学习语言能力与基础知识
- Midtraining:在预训练后期加入更精致的指令/任务型数据
- Posttraining:强调语言风格(style)与偏好,靠近用户期望
Pretraining
turn instruction tuning into pretraining-> how to turn instruction tuning data into pretraining data?
- Pre-train on web/pretraining data
- Mix in instruction-tuning data into pre-training
- Do an actual(but short) instruction-tuning round
- 预训练阶段:先用常规文本数据训练(网页语料等)。
- 混合式训练:
- 将 instruction-tuning 数据嵌入到训练流程中。
- 尤其在训练末期(decay stage)加入高质量人类数据,有助于模型形成更稳定且人类友好的行为模式。
- 单独微调轮次:
- 在主预训练后,进行一轮短的 instruction-tuning,用于定向能力迁移。
把指令微调数据混合到预训练中,在预训练到尾声,当学习率下降到时候,放入很多高质量数据/指令微调数据。之后进行第二轮指令微调(规模更小)(mid-training)
Midtraining
在pretraining后半段Decay Stage放入更多指令数据 在预训练的中后期(learning rate decay 阶段),引入更复杂的指令/任务数据。 例如:需要引用、事实查证、作者理解等: Midtraining 数据示例:
- 教模型理解并输出作者信息。
- 教模型如何进行引用(citation)。
- 提升 factual accuracy 与 reference tracking。
Posttraining
关注重点:风格与表现形式(style & preference)
- 例如对话风格、语气、礼貌程度、结构简洁性等。
- 类似 ChatGPT 最终在部署前做的行为调整阶段。
Posttraining 常见方式
|方法名|技术手段|目的与作用| |---|---|---| |Instruction Tuning (续)|Prompt-Response SFT|提升对复杂指令的理解与回应能力| |RLHF|Reward Model + PPO|让模型更符合人类偏好| |Constitutional AI|自评估 + 改写|减少人工标注成本,提高行为规范性| |Abstention Training|加入"不知道"样本|教会模型在不确定时优雅拒答| |Style Preference Tuning|人类偏好反馈 + 精调|改进语言风格、结构、语气|
from imitation to optimization 从模仿到优化
Imitation(SFT)
Fit $\hat{p}(y \mid x) \approx p^(y \mid x)$ for some reference distribution $p^(y \mid x)$
- Pure generative modeling perspective
- Requires samples from reference policy 这里面的$P^$是一个参考分布,看起来可能像是互联网数据和标注者编写的数据的混合,我们只是在模仿$P^$去生成数据
Optimization(RLHF)
Find $\hat{p}(y \mid x)$ such that $\max_{p} \mathbb{E}_p [R(y, x)]$ for a reward $R(y, x)$
- Maximize some reward function that we can measure
- LMs are policies not a model of some distribution
Compare - Cost
做RLHF的原因:
- SFT要从$P^*$里面获取样本,这相当昂贵。SFT data can be really expensive, might be easier to get feedback rather than optimal policy even for a tiny 7B model SFT计算基础模型有计算成本,要收集pairwise feedback(成对反馈)来做RL和evaluation
- People don't always write the thing that they prefer in LM outputs. 验证比生成的成本低,而且也比生成的质量高
RLHF-Reinforcement Learning Human Feedback
RLHF 是一种训练语言模型的方法,核心目标是:让模型通过"人类偏好"来学习 什么是更好的输出,从而优化其行为。
RLHF步骤
Step 1:Supervised Fine-Tuning (SFT)
- 作用:让模型模仿人类的高质量回答,提供一个好的起点。
- 过程:
- 给模型一个 prompt(例如"用6岁小孩能懂的方式解释登月")。
- 人类标注者写出一个理想答案。
- 用这些 prompt-answer 对训练出一个 SFT 模型。
- 产出:一个通过监督学习得到的初始 policy(语言模型)
Step 2:Reward Model Training
- 作用:用人类偏好数据训练一个 reward model,用于后续强化学习。
- 过程:
- 给一个 prompt,让多个模型(或同一个模型不同生成)输出多个回答。
- 人类对这些回答进行排序(例如:D > C > A = B)。
- 训练 reward model 预测人类偏好排序。
Step 3:Reinforcement Learning (PPO)
- 作用:使用 reward model 给出的评分,优化语言模型(policy)。
- 过程:
- 新 prompt -> 当前 policy 生成回答。
- reward model 打分。
- 使用 PPO(Proximal Policy Optimization) 算法优化模型行为,使其更趋向人类偏好。
Data
How do people collect RLHF data? -annotation What are some things to worry about?
pairwise feedback: prompt-answer
Paper: Constitutional AI take a ground in terms of AI feedback being used for this kind of alignment process
length feedback 人和模型都有偏见:更好的模型更回答更长,所以RLHF之后的回答普遍很长,但这是不太正确的。
How do we RLHF?
Now we have a high quality pairwise feedback data collection pipeline, How do we adapt the model to make use of pairwise feedback?
- PPO: the original and very finicky approach (OG original)
- DPO: the new, very accessible approach
Goal:RLHF
Find $\hat{p}(y \mid x)$ such that $\max_{p} \mathbb{E}_p [R(y, x)]$ for a reward $R(y, x)$
- Maximize some reward function that we can measure
- LMs are policies not a model of some distribution
PPO
paper: InstructGPT : https://arxiv.org/abs/2203.02155
- the whole instruction tuning and post training is very closely tied into InstructGPT paper
PPO gradient 公式
- first line:不要离SFT太远
- second line: gamma line,在进行强化学习的同时,也要持续进行预训练
reward
有一个虚拟世界模型 Brandley-Terry-Luce model 计算的是difference,越接近0偏差越小
policy
what we want to do is to optimize the reward of some policy 优化的好方法是用梯度 policy gradient theorem 我想要最大化$p_\theta(z)$的概率,乘上Reward function R(z)
- 如果reward是正的,提高这些概率的权重
- 如果reward是负的,降低这些概率的权重
第一个公式: advantage : variance-reduced version of the reward 方差降低版本
- reward减去一定的baseline值(但这个不是降低均值吗?为啥是降低方差,难道是说乘上某个0-1之间 的值? TRPO对所有梯度更新进行校正,然后约束自己保持接近
KL约束,全称是 Kullback-Leibler约束(KL constraint),它源自于信息论中的 KL散度(KL Divergence)。KL约束通常用于优化过程中,用来限制当前模型与旧模型之间的分布变化不要太大,以确保训练过程更加稳定。
KL约束的常见使用场景
-
强化学习中的策略优化(如TRPO、PPO):
- 训练策略时,不希望新策略与旧策略差异太大(以防止性能骤降)。
- 使用 KL约束来控制策略更新的幅度。
- 例如,在 PPO 中,有一个目标是控制: 其中 $\delta$ 是一个事先设定的小值,表示可接受的差异上限。
-
迁移学习 / 蒸馏(Distillation):
- 学生模型在模仿教师模型时,使用 KL 散度来衡量两者输出的接近程度。
-
变分推断(Variational Inference):
- 优化变分分布 $q(z)$ 去近似真实后验 $p(z|x)$,目标函数中会包含 KL 散度项作为约束。
PPO做出更新:与其使用KL约束约束自己保持更新旧策略,直接裁剪(clip)概率比率
DPO
QA
为什么RLHF第一步是微调不是重新训练一个模型?
- 已有模型具备语言能力
- GPT 等预训练语言模型已经在大规模语料(如维基百科、Common Crawl)上训练过,拥有非常强的语言理解和生成能力。
- 这些模型知道"如何写句子","如何保持上下文一致","基本事实知识"等。 → 所以我们不需要从零开始学这些语言知识,只需要进一步引导模型"学人类偏好"。
- 人类演示数据太少,不足以训练一个完整模型
- 从头训练需要 数百亿甚至万亿 token。
- 而人类标注的数据集(即 SFT 数据集)通常只有 几万到几十万个样本 → 如果从零训练,只用这些数据,模型根本无法学会流畅语言生成。
- 效率与成本
- 微调一个预训练模型只需要几天或几小时(取决于大小)。
- 从头训练一个 GPT 级别模型需要数百万美元的计算资源。