技术文档SFT & RLHF

SFT & RLHF

AISFTRLHFLLM
内容

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

使用这些数据集的核心问题:

  1. 它们到底包含了哪些内容?
  2. 构建"高性能"指令数据的关键因素是什么?

幻觉问题(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?

  1. Pre-train on web/pretraining data
  2. Mix in instruction-tuning data into pre-training
  3. Do an actual(but short) instruction-tuning round
  • 预训练阶段:先用常规文本数据训练(网页语料等)。
  • 混合式训练
    • 将 instruction-tuning 数据嵌入到训练流程中。
    • 尤其在训练末期(decay stage)加入高质量人类数据,有助于模型形成更稳定且人类友好的行为模式。
  • 单独微调轮次
    • 在主预训练后,进行一轮短的 instruction-tuning,用于定向能力迁移。

把指令微调数据混合到预训练中,在预训练到尾声,当学习率下降到时候,放入很多高质量数据/指令微调数据。之后进行第二轮指令微调(规模更小)(mid-training)

Midtraining

在pretraining后半段Decay Stage放入更多指令数据 在预训练的中后期(learning rate decay 阶段),引入更复杂的指令/任务数据。 例如:需要引用、事实查证、作者理解等: Midtraining 数据示例

  1. 教模型理解并输出作者信息。
  2. 教模型如何进行引用(citation)。
  3. 提升 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的原因:

  1. 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
  2. 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约束的常见使用场景

  1. 强化学习中的策略优化(如TRPO、PPO)

    • 训练策略时,不希望新策略与旧策略差异太大(以防止性能骤降)。
    • 使用 KL约束来控制策略更新的幅度。
    • 例如,在 PPO 中,有一个目标是控制: 其中 $\delta$ 是一个事先设定的小值,表示可接受的差异上限。
  2. 迁移学习 / 蒸馏(Distillation)

    • 学生模型在模仿教师模型时,使用 KL 散度来衡量两者输出的接近程度。
  3. 变分推断(Variational Inference)

    • 优化变分分布 $q(z)$ 去近似真实后验 $p(z|x)$,目标函数中会包含 KL 散度项作为约束。

PPO做出更新:与其使用KL约束约束自己保持更新旧策略,直接裁剪(clip)概率比率

DPO

QA

为什么RLHF第一步是微调不是重新训练一个模型?

  1. 已有模型具备语言能力
    • GPT 等预训练语言模型已经在大规模语料(如维基百科、Common Crawl)上训练过,拥有非常强的语言理解和生成能力。
    • 这些模型知道"如何写句子","如何保持上下文一致","基本事实知识"等。 → 所以我们不需要从零开始学这些语言知识,只需要进一步引导模型"学人类偏好"
  2. 人类演示数据太少,不足以训练一个完整模型
    • 从头训练需要 数百亿甚至万亿 token
    • 而人类标注的数据集(即 SFT 数据集)通常只有 几万到几十万个样本 → 如果从零训练,只用这些数据,模型根本无法学会流畅语言生成。
  3. 效率与成本
    • 微调一个预训练模型只需要几天或几小时(取决于大小)。
    • 从头训练一个 GPT 级别模型需要数百万美元的计算资源。