大模型强化学习:信息论低效下的有效机制解析
在 LLM大语言模型应用落地过程中强化学习RLReinforcement Learning是一个绕不开的话题。从 ChatGPT 的 RLHF基于人类反馈的强化学习到 OpenAI o1 系列背后的 RLVR可验证奖励强化学习再到最近火热的 GRPOGroup Relative Policy Optimization训练范式LLM 与 RL 的组合已经成为大模型能力提升的关键路径。但这里有一个非常有意思的矛盾从信息论的角度看RL 在语言模型这种超大动作空间场景下样本效率是极低的。理论上策略需要尝试海量 token 组合才能找到最优解这种效率低下的方法为什么在实际训练中却能持续带来模型能力的显著提升本文将围绕 “How Can LLM RL Work Despite Information-Theoretic Inefficiency” 这个主题拆解 LLM 与 RL 结合的底层逻辑。我会先说明“信息论低效”指的是什么再从预训练先验、奖励密度、KL 约束、并行采样等角度解释为什么它依然有效。文中会给出策略梯度、PPO 和 GRPO 的简化实现示例帮助你把理论落到工程视角上最后附上常见问题排查清单和工程建议。1. 背景LLM 为什么需要 RL1.1 RLHF 带来的能力跃迁在 RLHF 出现之前LLM 的训练主要分为两步预训练和监督微调SFT。预训练阶段让模型学会语言规律SFT 阶段让模型学会对齐指令的答案格式。但 SFT 有一个天然瓶颈它只能模仿人类标注者给出的答案无法在“人类偏好”这个维度上继续优化。RLHF 的引入改变了这一点。它用奖励模型Reward Model代替人类标注让模型能够在训练中不断试错通过最大化累积奖励来学习“什么是更好的回答”。这种机制让模型不再局限于训练数据的分布而是能够主动探索更好的生成策略。1.2 RLVR 与推理能力的爆发如果说 RLHF 解决的是“回答更符合偏好”的问题那么 RLVRReinforcement Learning with Verifiable Rewards解决的就是“推理更准确”的问题。在 RLVR 场景中奖励不是来自人类偏好模型而是来自客观的规则验证比如数学题答案是否正确、代码能否通过测试、SQL 查询结果是否符合预期。o1 系列模型的一个关键技术点就是在推理阶段用 RL 训练模型产生更长的思维链Chain of Thought。这种训练方式让模型学会了自我纠错、回溯验证和多路径尝试而这些能力很难通过 SFT 直接注入。1.3 “信息论低效”争议的由来那么问题来了RL 在 LLM 上的成功是否违反信息论的基本直觉要理解这个问题需要先看 LLM 的动作空间。语言模型生成一句话本质是在一个巨大的 token 序列空间中选择一条路径。假设词表大小为 32k生成 100 个 token理论上的路径数量是 32000 的 100 次方这是一个天文数字。在如此巨大的搜索空间中策略梯度方法若完全从零开始探索效率确实低到无法接受。正是因为这个原因不少研究者认为 LLM RL 在信息论意义上是“低效”的。但实际工程结果却告诉我们它非常有效。这种反差本身就是值得深入思考的问题。2. 信息论低效论的核心逻辑2.1 策略梯度的高方差先来看 RL 中最基础的策略梯度公式[ \nabla J(\theta) \mathbb{E}{\tau \sim \pi\theta} [\sum_{t1}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot R(\tau)] ]这个梯度是采样估计出来的。每次采样只能得到一条轨迹而不同轨迹之间的累积回报差异可能非常大。如果模型随机初始化大多数采样轨迹的回报都接近 0偶尔一条轨迹得到正回报梯度方向就会被这条“幸运轨迹”主导。在语言模型中这种高方差问题被进一步放大。原因是动作空间巨大每次只更新一个 batch 的样本很难准确估计出策略梯度的真实方向。2.2 奖励稀疏性在 LLM RL 的早期阶段奖励信号通常非常稀疏。一个数学题模型可能生成了 500 个 token最后结果错误整个序列的奖励就是 0。如果生成 500 个 token 后得到的奖励是 0模型其实很难从中学到“哪一步出了问题”。这种稀疏奖励问题在理论上会严重影响样本效率。RL 算法需要大量尝试才能偶尔碰到正奖励样本从而更新策略。样本效率低意味着需要极大的算力和时间开销。2.3 巨大的动作空间语言模型每一步动作空间是词表大小通常在 32k 到 200k 之间。对比 Atari 游戏只有 18 个离散动作围棋只有 361 个落子位置语言模型的每一步决策空间大得惊人。从信息论角度来看策略梯度每更新一次需要的信息量非常大。如果这些信息完全依赖 RL 采样来获取确实是一种浪费。这也是“in-theoretic inefficiency”这个说法的来源。3. LLM RL 为何仍有效六个关键机制既然理论上如此低效为什么实践中依然有效核心原因是LLM RL 并不是从零开始的随机探索而是在一个极其强大的先验模型基础上做局部优化。以下几个机制让“理论低效”和“实践有效”能够同时成立。3.1 预训练先验压缩了搜索空间LLM 在预训练阶段已经学会了大量世界知识和语言规律。RL 阶段面对的不再是一个“完全未知的搜索空间”而是一个“已经接近答案的局部区域”。策略只需要在已有分布附近做微调而不是从零搜索整个空间。举个例子让模型回答“中国的首都是哪里”预训练模型已经知道答案是北京。RL 并不需要重新探索所有城市名只需要让模型在“北京”这个 token 上稍微提高概率在“上海”“南京”等错误答案上稍微降低概率。这种微调所需的样本量远小于从零学习一个任务所需的样本量。从优化角度看RL 是在一个很好的初始点附近寻找局部最优解。这就好比你已经在山顶附近只需要小幅调整就能登顶而信息论低效的结论是针对“从山脚重新攀登”的情况而言的。3.2 奖励模型提供了密度化反馈虽然最终奖励可能稀疏但工程上通常使用奖励模型Reward Model为每个 token 或每个句子片段提供中间奖励。奖励模型不是只给最终结果打分而是逐步评估生成质量的偏好趋势。在 PPOProximal Policy Optimization训练中模型每个 step 都可以从 Critic 网络或奖励模型得到一个价值估计。这种中间反馈机制相当于把稀疏的最终奖励转化为相对稠密的信号有效缓解了信息不足的问题。此外在 RLVR 场景中如果答案是确定的我们可以用规则给中间推理步骤打分。比如数学题中“关键步骤是否包含”“变量替换是否正确”“计算过程是否跳跃”这些都可以作为过程奖励信号。3.3 KL 约束与信任域减小了无效探索直接做策略梯度时模型很容易在某个 batch 中策略更新幅度过大导致生成分布剧烈变化甚至产生乱码。PPO 算法通过 clip 机制限制策略更新幅度而 RLHF 训练中普遍加入的 KL 惩罚项则是让模型不要偏离参考策略SFT 模型太远。KL 约束的作用是双向的防止模型在探索时产生语法错误或语义崩塌。确保 RL 过程稳定避免奖励黑客攻击Reward Hacking。这种约束等于把探索范围限制在一个“可信区域”内。虽然看起来限制了探索但实际上大幅降低了无效探索的概率。从信息论角度看KL 约束相当于给搜索空间加了一个先验分布约束减少了需要探索的熵。3.4 语言知识的组合性与奖励的可迁移性语言任务有一个重要特性reward 信号往往具有可迁移性。也就是说模型学会了“解决一元一次方程”的奖励模式后在面对“二元一次方程”时不需要从零重新学习而是可以迁移过去的成功经验。这种组合泛化能力是语言任务独有的优势。奖励模型评估的是“逻辑是否通顺”“答案是否合理”“步骤是否完整”这些能力和具体题目之间的关系不是一一对应的而是可以推广到同类问题上。因此即使每次训练样本有限模型也能从有限的奖励信号中抽象出可复用的规则。3.5 并行采样把样本效率转化为算力效率信息论中的“样本效率”是一个理论概念但工程上更关注的是“墙钟时间”Wall-clock Time。LLM RL 可以通过大规模并行采样来弥补单条轨迹的效率损失。以 GRPO 为例对于一个输入 prompt可以同时采样 8 条甚至 64 条不同的生成结果。这些结果共享同一个 prompt 信息奖励模型可以批量打分。虽然每条轨迹的探索看起来效率低但大量并行采样让有效探索的总量大幅增加从而在有限时间内获得足够的信息来更新策略。这也解释了为什么 LLM RL 的训练通常需要大量 GPU。它不是“样本效率高”而是“算力堆出来的有效更新”。3.6 价值模型与优势函数降低方差PPO 中引入 Critic 网络来估计状态价值函数 ( V(s) )然后用优势函数 ( A(s,a) Q(s,a) - V(s) ) 来代替原始回报。优势函数的本质是“这个动作比平均情况好多少”而不是“这个动作的绝对回报是多少”。这种去均值化的设计可以显著降低策略梯度的方差。对于语言模型来说即使不同轨迹的绝对得分差别很大但相对优势往往更稳定更有利于策略更新。GRPO 更进一步直接使用组内相对奖励来代替 Critic 网络避免训练价值模型带来的额外不稳定因素。4. 从理论到代码策略梯度在 LLM 场景中的最小实现为了更直观地理解 LLM RL 的工作原理下面给出一个简化的策略梯度训练示例。这里的目的是演示核心逻辑而不是复现完整的 LLM 训练流程。4.1 核心训练的抽象流程LLM RL 的训练循环可以拆成四步用当前策略模型对 prompt 采样生成一段文本。用奖励模型或规则函数对生成文本打分。根据得分计算策略梯度更新模型参数。用 KL 惩罚约束模型不要偏离参考模型太远。4.2 简化的 Policy Gradient 实现# 文件路径demo_policy_gradient.py import torch import torch.nn.functional as F def compute_policy_gradient( log_probs: torch.Tensor, # 模型对每个 token 的 log 概率 advantages: torch.Tensor, # 每个 token 的优势值 kl_penalty: torch.Tensor # 与参考模型的 KL 散度 ) - torch.Tensor: 最小可运行的策略梯度计算。 这里使用 REINFORCE 的简化版本加入 KL 惩罚项。 # 策略梯度损失对 log_prob 乘优势值取负号便于梯度下降 pg_loss -(log_probs * advantages).mean() # KL 惩罚限制策略偏移 kl_loss kl_penalty.mean() # 总损失 loss pg_loss 0.01 * kl_loss return loss def generate_with_model(model, tokenizer, prompt: str, max_new_tokens: int 32): 使用当前策略模型采样一段文本。 这里用 transformers 库作为示例实际训练中建议使用 vLLM 加速。 inputs tokenizer(prompt, return_tensorspt) outputs model.generate( **inputs, max_new_tokensmax_new_tokens, do_sampleTrue, temperature0.8, return_dict_in_generateTrue, output_scoresTrue ) return outputs def simple_reward_function(response: str, answer: str) - float: 最简单的规则奖励判断答案是否包含正确结果。 生产环境建议使用奖励模型或可验证规则。 return 1.0 if answer in response else 0.0 # 模拟一次训练更新 def train_step(model, ref_model, tokenizer, prompt, answer): outputs generate_with_model(model, tokenizer, prompt) response tokenizer.decode(outputs.sequences[0], skip_special_tokensTrue) # 计算奖励 reward simple_reward_function(response, answer) # 计算 log 概率和 KL 散度 # 实际训练中需要重新前向计算生成部分的 log 概率 # 这里省略细节只展示逻辑框架 advantages torch.tensor([reward]) # KL 惩罚实际计算时使用双前向 kl_penalty torch.tensor([0.0]) loss compute_policy_gradient( log_probstorch.tensor([0.5]), advantagesadvantages, kl_penaltykl_penalty ) return loss需要注意这个示例隐藏了很多工程细节比如生成后需要重新前向计算每个 token 的 log 概率而不是直接使用生成时的 score。需要对生成部分的 token 做 mask过滤掉 prompt 部分。KL 散度需要参考模型通常是 SFT 模型冻结参数后计算。优势值需要经过归一化或 GAE广义优势估计计算。4.3 PPO 中的 KL 惩罚实现PPO 在 LLM RL 中用得非常广。它的核心是 clip 目标函数下面是简化实现# 文件路径demo_ppo_clip.py import torch def ppo_clip_loss( log_probs: torch.Tensor, old_log_probs: torch.Tensor, advantages: torch.Tensor, clip_epsilon: float 0.2 ) - torch.Tensor: PPO 的 clip 损失。 限制策略更新幅度防止一次更新太大。 ratio (log_probs - old_log_probs).exp() surr1 ratio * advantages surr2 torch.clamp(ratio, 1.0 - clip_epsilon, 1.0 clip_epsilon) * advantages loss -torch.min(surr1, surr2).mean() return loss def kl_penalty_loss( ref_log_probs: torch.Tensor, cur_log_probs: torch.Tensor ) - torch.Tensor: 计算当前策略与参考策略的 KL 散度。 当 log_probs 是同一个 token 序列时KL 近似为二者均值之差。 log_ratio cur_log_probs - ref_log_probs return log_ratio.mean()这里 KL 计算方式用的是近似形式。严格的 KL 散度需要对当前策略分布和参考策略分布的 token 概率逐项计算在 LLM 场景中由于词表巨大通常使用采样近似或 log-ratio 近似。4.4 GRPO 的相对奖励归一化DeepSeek 提出的 GRPO 是当前 LLM RL 训练中的热门方法。它不训练 Critic 网络而是通过组内相对比较来计算优势大幅减少显存占用。下面给出核心计算逻辑# 文件路径demo_grpo.py import torch def grpo_advantage(rewards: torch.Tensor) - torch.Tensor: GRPO 优势计算组内归一化。 rewards 形状为 [group_size]是同一个 prompt 下多个采样结果的奖励。 mean_reward rewards.mean() std_reward rewards.std() 1e-6 # 避免除零 advantages (rewards - mean_reward) / std_reward return advantages def grpo_loss( log_probs: torch.Tensor, # 每个样本的 log 概率形状 [group_size] old_log_probs: torch.Tensor, rewards: torch.Tensor, clip_epsilon: float 0.2 ) - torch.Tensor: GRPO 的最终损失。 对同一个 prompt 采样 group_size 条结果组内比较优劣。 advantages grpo_advantage(rewards) ratio (log_probs - old_log_probs).exp() surr1 ratio * advantages surr2 torch.clamp(ratio, 1.0 - clip_epsilon, 1.0 clip_epsilon) * advantages loss -torch.min(surr1, surr2).mean() return loss # 模拟 8 条采样结果 rewards torch.tensor([0.0, 1.0, 0.5, 0.0, 0.8, 0.2, 0.6, 0.3]) advantages grpo_advantage(rewards) print(归一化优势, advantages)运行这段代码输出类似归一化优势 tensor([-0.9562, 1.7593, 0.2825, -0.9562, 1.1512, -0.5745, 0.7267, -0.4324])可以看到得分最高的样本获得了正向优势得分最低的样本获得了负向优势。GRPO 通过这种组内相对比较不依赖价值网络就能估计出 token 级别的优化方向。5. 工程实战一个可运行的 LLMRL 训练框架5.1 项目结构规划在实际项目中LLM RL 的训练代码通常比上面的示例复杂得多。一个标准的工程结构可以参考llm_rl_project/ ├── configs/ │ └── train_config.yaml ├── data/ │ ├── prompts.jsonl │ └── answers.jsonl ├── models/ │ ├── policy_model/ # 待训练的策略模型 │ └── ref_model/ # 参考模型冻结 ├── rl_algorithms/ │ ├── ppo_trainer.py │ ├── grpo_trainer.py │ └── reward_model.py ├── utils/ │ ├── kl_utils.py │ ├── logging_utils.py │ └── data_utils.py ├── scripts/ │ ├── train_ppo.sh │ └── train_grpo.sh └── main.py5.2 训练数据的组织方式每条训练数据一般包含两个部分prompt 和 golden_answer。对于 RLVR 任务golden_answer 用于规则校验对于 RLHF 任务则需要配合奖励模型使用。{prompt: 求解方程 x^2 - 5x 6 0请给出x的值, answer: x2 或 x3} {prompt: 编写一个Python函数判断一个数是否为质数, answer: def is_prime(n): ...}5.3 PPO 训练核心循环下面是一个更接近工程实践的 PPO 训练循环骨架# 文件路径rl_algorithms/ppo_trainer.py import torch from torch.utils.data import DataLoader from transformers import AutoModelForCausalLM, AutoTokenizer class PPOTrainer: def __init__(self, policy_model_path, ref_model_path, lr1e-6): self.policy_model AutoModelForCausalLM.from_pretrained(policy_model_path) self.ref_model AutoModelForCausalLM.from_pretrained(ref_model_path) self.tokenizer AutoTokenizer.from_pretrained(policy_model_path) # 冻结参考模型 for param in self.ref_model.parameters(): param.requires_grad False self.optimizer torch.optim.AdamW(self.policy_model.parameters(), lrlr) def compute_log_probs(self, model, input_ids, attention_mask, labels): 计算指定 token 位置的 log 概率 outputs model(input_idsinput_ids, attention_maskattention_mask) logits outputs.logits # 移动 logits 使其与 labels 对齐 shift_logits logits[..., :-1, :].contiguous() shift_labels labels[..., 1:].contiguous() log_probs torch.log_softmax(shift_logits, dim-1) token_log_probs log_probs.gather(-1, shift_labels.unsqueeze(-1)).squeeze(-1) # mask 掉 pad 部分 mask shift_labels ! -100 return (token_log_probs * mask).sum(dim-1) def train(self, dataloader, epochs1, kl_coef0.05): for epoch in range(epochs): for batch in dataloader: prompt_ids batch[prompt_ids] response_ids batch[response_ids] rewards batch[rewards] # 当前策略的 log 概率 cur_log_probs self.compute_log_probs( self.policy_model, response_ids, response_ids ! self.tokenizer.pad_token_id, response_ids ) # 参考模型的 log 概率 with torch.no_grad(): ref_log_probs self.compute_log_probs( self.ref_model, response_ids, response_ids ! self.tokenizer.pad_token_id, response_ids ) # 计算优势简化版本实际应使用 GAE advantages rewards - rewards.mean() # 计算 PPO clip 损失 old_log_probs cur_log_probs.detach() ratio (cur_log_probs - old_log_probs).exp() surr1 ratio * advantages surr2 torch.clamp(ratio, 0.8, 1.2) * advantages pg_loss -torch.min(surr1, surr2).mean() # KL 惩罚 kl_loss (cur_log_probs - ref_log_probs).mean() loss pg_loss kl_coef * kl_loss self.optimizer.zero_grad() loss.backward() self.optimizer.step() print(fEpoch {epoch}, Loss: {loss.item():.4f})5.4 运行与验证训练完成后如何判断 RL 是否有效通常从三个维度评估奖励分数是否提升。生成结果的多样性是否保持。KL 散度是否在合理范围内。你可以用下面的脚本验证模型效果# 文件路径scripts/eval_model.sh python -c from transformers import AutoModelForCausalLM, AutoTokenizer model_path ./models/policy_model model AutoModelForCausalLM.from_pretrained(model_path) tokenizer AutoTokenizer.from_pretrained(model_path) prompt 请简要解释什么是贝叶斯定理 inputs tokenizer(prompt, return_tensorspt) outputs model.generate(**inputs, max_new_tokens256, do_sampleTrue, temperature0.7) print(tokenizer.decode(outputs[0], skip_special_tokensTrue)) 6. 常见问题与排查思路LLM RL 训练过程中会遇到很多问题下面整理一份高频排查清单问题现象常见原因解决思路训练 loss 不断增大KL 惩罚系数过高或学习率过大降低学习率减小 kl_coef模型输出质量下降出现乱码策略更新幅度过大减小 clip epsilon增加 KL 惩罚奖励分数不提升奖励信号过于稀疏使用过程奖励或增加奖励模型密度训练显存溢出模型参数量过大或 batch size 太高使用 LoRA 微调减轻内存压力减少采样数量采样生成速度过慢单次推理生成太多 token使用 vLLM 加速推理或减少生成长度奖励黑客现象模型找到奖励公式的漏洞设计更严谨的规则增加 KL 约束训练不稳定性加剧价值模型或优势估计波动大使用 GRPO 替代 PPO去掉 Critic 网络6.1 如何判断 KL 惩罚系数是否合理KL 惩罚系数直接影响训练稳定性。一个常见的经验法则是观察采样序列的平均 KL 散度如果平均 KL 散度低于 0.01说明策略几乎没有更新需要增大系数或加大学习率。如果平均 KL 散度高于 1.0说明策略已经大幅偏离参考模型容易出现质量崩塌。你可以把 KL 散度加入日志系统每 100 步打印一次方便监控。6.2 什么时候 GRPO 优于 PPOGRPO 最大的优点是省掉了 Critic 网络。Critic 网络训练本身具有不稳定性需要额外的显存和调参成本。GRPO 通过组内采样对比来估计优势在很多场景下更稳定也更省显存。但 GRPO 对采样质量要求更高。如果同一个 prompt 下采样的 8 条结果质量都差不多组内归一化后的优势会接近 0导致学习信号微弱。因此GRPO 适合探索性较强的场景而 PPO 更适合需要精确价值估计的场景。7. 最佳实践与工程建议7.1 从 SFT 开始不要跳过RL 不是万能药。如果一个任务用 SFT 微调就已经能达到不错的效果优先用 SFT。RL 是在 SFT 基础上继续提升模型的上限而不是替代 SFT。直接对预训练模型做 RL通常收敛慢且不稳定。7.2 将 RL 视为“策略微调”而非“全量学习”在处理 LLM RL 问题时建议把 RL 阶段理解成“在已有能力的基础上做偏好对齐和策略微调”。预训练和 SFT 已经让模型具备了语言能力和任务能力RL 的作用是重新分配 token 的概率权重提高正确行为的概率降低错误行为的概率。这种视角可以帮助你更好地设计奖励函数和训练目标。7.3 奖励函数要简单、可验证奖励函数是 LLM RL 中最关键的工程组件。设计奖励函数时尽量避免使用模糊的语义评分。对于数学、代码等任务优先使用可验证的确定性结果对于对话、写作等任务可以使用奖励模型但要定期评估奖励模型是否存在奖励黑客风险。# 一个推荐的规则奖励实现思路 def math_reward_func(response, answer): 数学题奖励满分 2 分。 1 分给步骤完整性1 分给最终答案正确性。 这样比二值奖励提供更多学习信号。 score 0.0 # 步骤完整性是否包含已知条件、方程展开、最终答案 if 解 in response and in response: score 0.5 # 答案正确性 if answer in response: score 1.5 return score7.4 监控多个维度的指标不要只盯着训练 loss。LLM RL 训练需要同时监控Reward score奖励均值、中位数、分位数。KL 散度当前策略与参考策略的距离。Token 级困惑度防止模型生成崩溃。生成长度观察模型是否通过拉长输出来投机。回答多样性防止模型退化成只会说固定格式。7.5 使用 LoRA 降低实验成本在早期实验阶段不必直接对全量参数做 RL。可以使用 LoRA 或 QLoRA 进行策略微调大幅降低显存占用和训练时间。等实验验证了奖励函数和训练设置的稳定性再切换到全量微调。# 文件路径configs/lora_config.yaml model: base_model: your-base-model lora_rank: 32 lora_alpha: 64 lora_dropout: 0.05 training: batch_size: 4 max_length: 1024 group_size: 8 # GRPO 采样数量 learning_rate: 1.0e-5 kl_coef: 0.05 clip_epsilon: 0.2 max_epochs: 27.6 定期与参考模型对比训练过程中定期让参考模型和当前策略模型生成同样的 prompt人工对比输出质量。这个操作虽然简单但比任何自动化评估指标都直观。如果你发现策略模型在某些简单的例子上反而不如参考模型说明 RL 训练出现了问题需要及时回滚或调整训练参数。8. 总结与下一步学习方向LLM RL 虽然在理论上存在信息论效率低下的问题但在实际工程中依然能发挥作用根本原因在于强大的预训练先验、密集化奖励、KL 约束、并行采样以及语言知识的组合性这六种机制共同抵消了样本效率的不足。本文从“信息论低效”的争论出发分析了策略梯度在 LLM 场景中面临的高方差和稀疏奖励问题再从六个关键机制解释了它可以正常工作的原因。通过策略梯度、PPO、GRPO 三个简化代码示例你应该对 LLM RL 的训练循环有了具体的感知。如果接下来想深入学习建议按这个顺序推进先弄清楚 RLHF 的整体流程理解奖励模型、策略模型、参考模型三者的关系。阅读 PPO 原论文重点关注 clip 目标和 GAE 优势估计。了解 GRPO 与 PPO 的差异理解“去 Critic 化”带来的优势。动手复现一个 1B 以下模型的 RLVR 训练实验比如数学推理任务。再熟悉分布式训练框架DeepSpeed、Megatron以及推理加速工具vLLM。在实际项目中最重要的事情是守住一条底线不要盲目调大学习率和 KL 惩罚系数。先用小模型、小数据量验证奖励函数是否合理再扩大规模。毕竟RL 训练的成本高、周期长一旦策略崩溃回滚的代价远高于多花两天调试奖励函数的成本。如果这篇文章对你有帮助欢迎收藏备用。下一篇文章可以继续聊聊“如何设计一个不产生奖励黑客的奖励函数”到时见。
