大模型微调和强化学习
该内容为为视频课程大模型微调和强化学习的笔记,仅先做基础框架构建,后续随时优化更新。课程地址 Fine-tuning and Reinforcement Learning for LLMs: Intro to Post-Training - DeepLearning.AI
总览背景知识
微调(fine-tuning)和强化学习(reinforcement learning, RL)都是 LLM 中的后训练技术。

| 数据 | 评级器(grader) | 稳定性 | 计算 | |
|---|---|---|---|---|
| 微调 | 提前准备好{输入、输出}数据 大规模收集可能较困难 |
- | 更稳定 | 计算量更少,方法更高效 |
| 强化学习 | 输入数据 | 优秀的评级器 可能难以创建和调优 |
稳定性较差 | 计算量更大 |
对于微调来说,最重要的部分是数据,要有非常精准的输入和输出的数据。对于强化学习来说,要有一个非常好的评级器,能够去评估 LLM 回答的好坏。
通常来说会将微调和强化学习一起用于后处理的流程,具体如下:

例子 1:大语言模型,如果要实现思考推理(reasoning)的功能,通常流程如下:
- CoT 微调:在针对特定领域的{输入、思考+答案}CoT 数据集上进行微调(约 2-10 k 条数据)。助理这里的思考部分需要使用特定的分隔符进行区分。
- 推理强化学习:添加带有验证器和奖励模型的强化学习训练环境。
例子 2:大语言模型的安全性(safety and security, RLAIF)
可以单独微调或 RF,也可以两种一同使用。其核心需要写出合适完整的评估规范。

可以参考 deepseek-r1 的流程学习如何进行 FT 和 RF。

核心技术点
章节 ppt Core Techniques in Fine-tuning and RL
数据准备
Fine-tuning Data
- Pairs: {input, target output}
- Reasoning: {input, "think" + answer}
RL Data
- List: {inputs} → Tuples: {input, output, reward} from input + graders + environment
- [Optional] Tuples: {input, output A, output B, preference=which is better} for reward model
数据划分
数据集划分同其他训练类似,区分训练集,验证集,测试集
微调方法如下:

奖励模型(reward)如下:验证集可以放在训练集中。

RF 如下:训练和测试中的 reward model 是不一样的。

同时,需要注意在最终的验证中需要混入一些与训练集不同分布的且不常见的作为输入。

数据防泄露
有以下注意的方法。
- 控制(近似)重复样本。
- 使用 MinHash/LSH(局部敏感哈希)算法
- 采用能识别模板和改写的去重方法(template- and paraphrase-aware)
- 不要随机切分数据,这很可能导致数据泄漏。
- 必须避免"相同输入,不同输出"跨数据集出。
- 时间切分:根据时间顺序划分数据,即评估数据必须是在训练数据之后创建的。
- 帮助检验模型"泛化到未来"的能力("generalizing into the future")
微调技术点
其步骤类似于初始化的训练过程。其中损失函数为交叉熵。由于交叉熵公式中为对数,因此多个 token 输出的结果本应相乘可以转化为相加操作。

超参数部分
- Learning rate 学习率

可以使用一些策略,如 Cosine Annealing,Linear Decay with Warmup 等等。
Transformers 默认 AdamW:lr=5e-5
Pytorch 中 SGD:lr=0.01,Adam:lr=0.001 - Number of epoch 训练轮次
- Batchsize 训练批次大小
损失函数曲线
实际在训练过程中,如果出现过拟合可能并没有那么糟糕,有时候会让模型效果变更好。

Fine-tuning: Parameter efficient fine-tuning (PEFT)
实际上如果需要微调整个模型需要大量的算力和 GPU,但是实际上权重中并不需要完全更新。大部分的权重可以被奇异值分解(SVD)得到的前几组数据表征。
这里涉及到一些技术,例如 LoRA。
如下高阶举证可以被分解为低阶举证相乘,r 论文中为 4,RF 中甚至可能为 1。如果任务更新很大,r 值一般会变大很多。对于 LoRA 的超参数也需要变化,例如学习率通常是一般的 10 倍。

LoRA 中权重的更新部分 \Delta W 被分解了,因此计算量减少。实际原本的权重部分基本被冻结不会进行更新,只更新 \Delta W 部分权重 。


LoRA 通常加在 transformer 结构中,但是也不仅仅如此。

LoRA 的超参数
W_{FT} = W + \frac{\alpha}{r} \Delta W
α 是一个缩放系数,用来调节"LoRA 新学到的知识"相对于"原模型已有知识"的影响比例
- α 越大:LoRA 的增量部分 ΔWΔW 影响越大,模型更多依赖新训练的参数
- α 越小:原始权重 WW 占主导,模型更多保留预训练知识
- 与 r 的关系:\frac{\alpha}{r} 作为整体缩放系数,平衡了秩和缩放的共同作用
LoRA 的训练占用对比

LoRA开箱即用的库
- PEFT in Hugging Face: LoRA · Hugging Face
- Unsloth
- Llama Factory
RL 的奖励模型和偏好学习
奖励模型(Reward )是微调和强化学习的重要区分。强化学习中主要是要给出这个最终的奖励,使其学习到能够最大化产生这种回报的行为。
Reward 可以是正值与负值。最简单的 reward 可以是验证器(verifiers),这个通常用于有确定问题的答案。还可以使用其他 LLM 作为评判,或者训练一个单独的奖励模型。其也被称为偏好模型(perference model)。
RLHF:RL with human feedback 带有人类反馈的强化学习
验证器和奖励模型的区别

RL 的训练目标
用概率比率加权优势,从而在提升奖励的同时保持策略稳定,用奖励信号调整模型生成概率,但要防止更新幅度过大
整体思路为
分解如下
左侧部分重要性采样比率(importance ratio),表示"当前策略和参考策略对同一 token 的概率比。
右侧部分 how good token was 为优势函数,其中一种可表示为 r(y_i, x, y_{<i}) - b(x, y_{<i}):
- r(y_i, x, y_{<i}) 是奖励模型给这个 token 打的分数(how good
- b(x, y_{<i}) 是基线(baseline),通常是状态价值 V(s) 的估计
- 两者之差 就是优势函数(advantage function) A(s,a),衡量"选这个 token 比平均水平好多少"
RL 的训练需要大量的 GPU 占用,大概是 LoRA 微调的 3~4 倍。

整体 RL 的训练循环如下
- 获取 RL 数据
- a. 生成 rollout(推理结果):让参考 LLM 根据输入生成输出 {input, output}
- b. 应用奖励模型 → 得到轨迹 {input, output, reward}
- i. 在 RLHF 中,使用偏好学习(preference learning)训练一个奖励模型
- 在轨迹数据上用 RL 训练你的主 LLM
- a. 定义训练目标:用优势函数(advantage)加权下一个 token 的概率。注意优势函数只是最简单的一种,有很多更加现代的方式。
- i. 使用参考 LLM 来稳定对下一个 token 概率的度量
- ii. 使用奖励(经基线调整后)来计算优势函数
- b. 用训练目标更新 LLM,以最大化奖励
- a. 定义训练目标:用优势函数(advantage)加权下一个 token 的概率。注意优势函数只是最简单的一种,有很多更加现代的方式。
- 重复步骤 1+2 直到完成
RL 的 PPO 和 GRPO 训练算法
标准的训练流程如下

其中重要部分是优化基线部分的表达,可以使用 PPO 或 GRPO。
现代实际中通常使用 GAE(Generalized Advantage Estimation,广义优势估计)用来计算优势函数。
PPO,Proximal policy optimization,近段策略优化
采取小而稳定的步骤,以防止模型在训练过程中崩溃。

GRPO,Group relative policy optimization,组相对策略优化。由 deepseek 提出的改进策略,可以显著减少训练资源。

两种方案对比

评估(Evaluation)阶段
章节 PPT Evaluation as the North Star
评估阶段很重要,它决定了你应该收集哪些数据和如何进行训练。
损失函数虽然在预训练和训练过程中很重要,但是在后训练阶段实际上意义不大。
效率的评估方法:
- TTFT(Time to First Token):首 token 时间,从发送请求到收到第一个 token 的延迟
- TPOT(Time per Output Token):每个输出 token 的生成时间
- 每 token 成本(per sample)
- Token 效率(冗长 vs. 简洁)
RL 评估阶段
要注意 reward hacking(奖励作弊),这在评估阶段很难被发现。
这里就需要验证器和奖励模型设计的更加细致。
如果使用奖励模型进行评分,注意评估阶段的奖励模型要是一个单独的新模型。
例如 deepseek-r1 仅仅使用了验证器

错误分析(error analysis)
实际上需要针对出现的错误情况进行逐级错误分析 ,因为错误没有那么好定位。
每次在分级过程中缩小范围以精准定位问题。这比较消耗 GPU 的算力。
- Clustering text errors:通过将输入 embedding,并使用类型 Kmeans 的方式聚类。但同时也可以使用 LLM 直接进行聚类分析。


一个比较重要错误名为灾难性遗忘(Catastrophic forgetting)。它经常出现在微调过程中,这时模型会忘记预训练阶段所学习到的内容。解决这个问题的方法之一是在微调过程中加入少量预训练数据(占据总体数据的1%即可)。
一些错误分析的种类和原因,可以改进的方案:Fine-tuning & RL for LLMs: Intro to Post-training - DeepLearning.AI
构建评估的方案
先进行小规模评估,大概 20 个例子开始进行,保证例子的一致性即可,就可以发现模型的一些基本问题。之后以指数级别扩张评估干规模,去拓展模型在其他方面的测试评估能力。
几种评估的方面:
- Representative
- Actionable
- Reliable:可以对多种数据进行统计显著性校验。
Red-teaming:一种试图突破模型,并找到绕过防御措施的方法。
数据驱动的后训练评估
章节 PPT Data Driven Post-Training
后训练所需的数据量
后训练所需的数据量很大程度上取决于预训练模型时的数据量。
其真正核心的问题在于是后训练时的数据质量。
在后训练阶段,需要明确预训练模型已经知晓学会哪些任务知识。如果在预训练阶段没有学习到这些知识,那么就会花费很大的精力,在后训练阶段进行学习。
从较少的数据开始,识别评估需要补充哪些数据,再逐步扩展。

同时 RL 的训练以来于输入数据的分布

微调阶段的数据

迭代增强
通过不断的反复迭代评估,改进模型。先找到最糟糕的故障模式,然后在那个基础上不断迭代优化。

建议微调始终从 LoRA 开始,关于 LoRA 的参数设定

关于思维链(chain of thought)
通过增加 <think>标签以标记模型思考的部分。在输入的时候,可以规定一些语句,例如:使用思考功能,或者让用户选择,以动态的决定是否要让模型输出思考的内容。
这时候训练数据中可能有大概 30%或以下的内容需要加上思考,其余的内容直接给出答案。
RL 数据
重点分为两个方面,rollouts 和 reward model 的偏好数据。

RL 的总体训练流程如下

Rollouts 数据规模
可以从每个输入对应 8 个输出开始。然后逐步增加每个输入对应输出的数量。

如果只是使用简单的验证器(verifies),只需遵循打分即可。
如果使用 reward model 引导训练。从小数据集开始,可以将整个数据集运行 1~2 epoch 的 PPO。并观察后逐渐增加数据量,优化 RM。

Reward model 通常会表现出过拟合的迹象。其涉及很多不同的因素,需要制定出合适的规则限制。
模型训练可以离线,也可以在线


合成数据 pipline
可以构建 pipline 自动合成数据。同时可以使用 LLM 对数据进行过滤,例如使用 Rejection sampling 等。
可以使用模版高效地合成数据,并避免一些错误。
例如,下面的是为了保证安全性:

平衡数据和奖励的关系
- 需要考虑数据混合比例的关系,以保证专业性和泛化性的平衡。
生产注意事项
章节 PPT Production Considerations
可以参考 deepseek-R1 和 R1 zero 的流程。

Agent 开发
Agent 就是在原有模型基础上做了很多相关的后处理优化。其实能够做一些 api 的调用,或者搜索等功能。借助 api 或搜索工具,联合 RAG 可以实时进行内容更新。
RL 的开发更新流程

一些定位问题并干预的方法

生产环境监控项例子如下:

基础设施考虑方面

开源微调工具选取

开源 RL 工具选取

开源推理框架选择

模型选取建议先从小模型开始,如果要使用参数量较大的模型,也可以使用量化和蒸馏去减少参数。
多路由模型

关于 GPU 的选取
需要进行内存和速度的权衡

同时可以使用 KV cache 去增加推理速度和内存的消耗。
关于不同处理 GPU 的消耗

对于一个 GRPO 的训练

对于部署方容量的考量

生产部署检查清单
- 清晰可复现的模型配置
- 跨开发→预发布→生产环境设置推广规则和回滚条件
- 监控与可观测性(行为层面和系统层面)
- 反馈→数据管道准备好用于捕获问题和收集下一代模型的数据
- 基础设施分配能够满足使用场景的投资回报率(ROI)和扩展需求
