LLM里的预训练,SFT,DPO, NTP, GRPO,微调,蒸馏的解释及流程

NLP and transform

https://github.com/datawhalechina/happy-llm/tree/main

────────────────────────────────────────────────────────

  1. 预训练(Pre-training)
    ────────────────────────────────────────────────────────
    • 核心思路
  • 在大规模非结构化文本数据(如网络爬取的语料、书籍、百科等)上进行自监督学习,常见目标包括自回归的“下一词预测(Next Token Prediction,NTP)”或掩码语言模型(MLM)等。
  • 通过在海量文本上学习上下文关联,模型能够获取通用的语言理解与生成能力。

• 典型流程

  1. 数据准备:收集和清洗大规模语料库。
  2. 训练目标:
    • 自回归:给定前面所有token,预测下一个token(NTP)。
    • MLM:随机遮盖部分token,让模型去预测被遮盖的token。
  3. 训练方式:通常使用随机梯度下降(如Adam)进行长期大规模训练。
  4. 输出:得到一个能较好学习语言知识的LLM(如GPT、BERT之类的底座模型)。

────────────────────────────────────────────────────────
2. NTP(Next Token Prediction)
────────────────────────────────────────────────────────
• 核心思路

  • NTP并不是一个单独的微调步骤,而是语言模型中最常用的训练目标,也可以视为“自回归语言模型”的传统训练目标。“预训练”环节常见的就是这种NTP形式。
  • 给定已经生成的前文,预测下一步可能的token,相当于让模型学习语言的条件概率分布。

• 典型流程

  • 在预训练中大规模使用:对大量文本进行自回归损失的最小化(交叉熵损失),模型学会在上下文条件下预测下一个词或子词。

────────────────────────────────────────────────────────
3. 微调(Fine-tuning)
────────────────────────────────────────────────────────
• 核心思路

  • 微调是预训练之后让模型面向具体任务或场景进一步训练的过程,通常会根据实际需要,选择不同的微调方法。
  • 监督微调(SFT)就是微调的一种典型形式;除此之外还有使用偏好反馈、对抗训练、蒸馏式微调等。

• 典型流程

  1. 数据准备:根据下游任务或目标场景,收集小规模但高质量的数据。
  2. 模型初始化:加载预训练的LLM。
  3. 训练:根据具体方法(如监督、强化学习、知识蒸馏等)进行若干轮训练。
  4. 验证与调整:在开发集或内测中不断监控、验证并调整超参数。
  5. 最终得到适合场景需求的模型。

────────────────────────────────────────────────────────
4. SFT(Supervised Fine-tuning,监督微调)
────────────────────────────────────────────────────────
• 核心思路

  • 这是最常见、最直接的微调方法:基于有标签(如指令-输出对、问题-答案对等)的数据集对预训练模型进行进一步训练。
  • 目的是让模型学会在特定需求或任务上输出更准确、符合要求的结果。

• 典型流程

  1. 收集训练数据:如对话式问答、多轮对话数据、翻译数据、摘要数据等。
  2. 损失函数:通常仍是语言模型的交叉熵损失,只不过这里的“目标输出”是有监督标签。
  3. 训练:对预训练模型进行少量epoch的训练,学习对特定任务的映射。
  4. 模型效果:在该任务上更准确,同时保留预训练学到的语言和知识能力。

────────────────────────────────────────────────────────
5. DPO(Direct Preference Optimization)
────────────────────────────────────────────────────────
• 核心思路

  • DPO是一种基于偏好的对齐(Alignment)训练方法,和RLHF(基于强化学习的人类反馈)类似,但不需要复杂的强化学习算法(如PPO)。
  • 它直接利用“偏好数据”(例如,人类对两个回答的好坏标注)来优化模型,使得模型倾向输出更“被偏好”的结果。

• 典型流程

  1. 收集或构造偏好数据:常见形式为“同一条指令下的两个回答,标注出人类更偏好的回答”。
  2. 目标函数:通过对这两个回答在模型输出概率上的对数几率等差异进行优化,迫使模型更偏向人类标注的较优回答。
  3. 模型训练:使用梯度下降,使得模型最小化“不符合偏好”的损失。
  4. 获取对齐后的模型,减少产生不合需求或低质量回答的概率。

────────────────────────────────────────────────────────
6. GRPO
────────────────────────────────────────────────────────
• 可能含义

  • GRPO在近期文献和社区讨论中常被解释为对偏好优化的一种方法,和DPO、PPO等一样,也是试图将“人类偏好”或“奖励模型偏好”融入到语言模型中。
  • “GRPO”通常被扩展为“(G)uided/(G)radient/(G)enerative + RPO(Reward/Preference Optimization)”等不同解读,核心思路是在微调步骤里融入“偏好学习”或“奖励驱动”,从而让模型输出更符合人工偏好或对话安全性规范的内容。

• 典型流程

  1. 和DPO类似,先收集偏好数据或由一个“奖励模型”对模型输出进行打分。
  2. 用带有偏好/奖励的优化目标替代或融入原始的自监督或监督训练目标。
  3. 通过梯度更新,让模型朝着“更高人类偏好/更高奖励分数”的方向改进。

────────────────────────────────────────────────────────
7. 蒸馏(Distillation)
────────────────────────────────────────────────────────
• 核心思路

  • 蒸馏是一个模型压缩和加速推理的常见方法,将体量、参数量更大的教师模型(Teacher)所得的预测分布和知识“蒸馏”给体量更小的学生模型(Student)。
  • 学生模型在训练阶段不仅学习原始目标标签,还要在很大程度上拟合教师模型的输出分布(即软标签),从而在保证精度的前提下缩减模型规模、加快推理速度,减少部署成本。

• 典型流程

  1. 准备教师模型:往往是一个大参数量、性能较好的预训练或微调后模型。
  2. 学生模型初始化:模型参数规模/深度较小。
  3. 训练:
    • 损失由两部分组成:模仿教师模型的输出分布(KL散度) + 对真实标签的交叉熵(可选)。
    • 通过在平衡两种损失的同时训练学生模型,最终可使其性能接近教师模型。
  4. 产出:蒸馏完成的学生模型,能够以较少的资源在推理时获得较好效果。

────────────────────────────────────────────────────────
总结与整体流程示例
────────────────────────────────────────────────────────
在实际项目中,这些方法往往组合使用,形成一个多阶段的LLM训练/微调流水线。一个常见的高层次示例可能是:

  1. 预训练阶段:

    • 使用NTP(下一词预测)或MLM等自监督目标,在大规模无监督语料上训练得到基础大模型。
  2. 监督微调(SFT)阶段:

    • 通过标注好的高质量指令-回答对,将模型调教得更贴近下游任务需求。
  3. 偏好对齐(例如DPO、GRPO等)阶段:

    • 进一步利用人类偏好(或者一个奖励模型)来进行优化,对模型进行对齐,让其在回答形式、内容上更符合偏好或安全规范。
  4. 知识蒸馏或模型压缩阶段(可选):

    • 若需要在移动端或资源有限的场景部署,则可以用大模型作为教师,对小模型进行蒸馏,保证尽可能高的性能同时降低计算开销。

以上各环节常常配合使用,具体细节与流程会因目标任务、数据可得性、计算资源等各种因素而变化。通过这些组合方法,LLM能够在性能、对齐度和效率间找到平衡,并产出满足应用需求的高质量对话或文本生成结果。

posted @ 2025-06-11 21:48  iTech  阅读(557)  评论(0)    收藏  举报