尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Swift 中的 REINFORCE Leave-One-Out (RLOO):原理、参数配置与源码实现解析
Swift 中的 REINFORCE Leave-One-Out (RLOO)原理、参数配置与源码实现解析【免费下载链接】swiftUse PEFT or Full-parameter to CPT/SFT/DPO/GRPO 600 LLMs (Qwen3.6, DeepSeek-V4, GLM-5.1, InternLM3, Llama4, ...) and 300 MLLMs (Qwen3-VL, Qwen3-Omni, InternVL3.5, Ovis2.5, GLM4.5v, Gemma4, Llava, Phi4, ...) (AAAI 2025).项目地址: https://gitcode.com/GitHub_Trending/swift1/swift本篇技术指南聚焦于 MS-Swift 项目即当前 swift 仓库中以GRPOTrainer为底座实现的 REINFORCE Leave-One-OutRLOO强化学习训练方案系统讲解 RLOO 与 GRPO 在优势函数基线构造与 KL 正则化处理上的两大核心区别并结合仓库源码与完整训练脚本给出可直接复用的参数配置与实战建议。读完本文你将掌握如何通过--advantage_estimator rloo与--kl_in_reward true在 Swift 中一键切换 RLOO 训练并理解其底层实现细节。一、算法背景从 REINFORCE 到 RLOOREINFORCE Leave-One-Out (RLOO) 基于经典的 REINFORCE 策略梯度方法通过留一法Leave-One-Out构造无偏的优势函数基线。与 PPO 系列方法依赖独立的 Critic 价值网络不同RLOO 和 GRPO 一样都采用组内对比的方式估计优势函数从而避免全局基线估计带来的高方差问题。在 MS-Swift 中RLOO 并未独立实现一套训练器而是作为GRPOTrainer的一个优势估计器选项存在——这一点从仓库中的训练脚本即可验证脚本仍以swift rlhf --rlhf_type grpo启动仅在参数上声明 RLOO 相关的配置参见 rloo.sh。因此在理解 RLOO 之前先将其与 GRPO 放在同一框架下对比是最高效的路径。二、RLOO 与 GRPO 的核心区别GRPO 和 RLOO 都通过为每个 prompt 并行采样多条响应来估计优势两者的核心区别体现在以下两个方面。区别 1优势函数基线的构造方法GRPOGroup Relative Policy OptimizationGRPO 对每个 prompt 生成 $G$ 个响应样本使用组内所有样本的均值和标准差进行标准化$$ \hat{A}{i} \frac{R_i - \text{mean}({R_j}{j1}^G)}{\text{std}({R_j}_{j1}^G)} $$其中$R_i$ 是第 $i$ 个样本的奖励值$\text{mean}({R_j}{j1}^G) \frac{1}{G}\sum{j1}^G R_j$ 是组内均值$\text{std}({R_j}_{j1}^G)$ 是组内标准差RLOOREINFORCE Leave-One-OutRLOO 对每个 prompt 生成 $K$ 个响应样本使用**留一法Leave-One-Out**构造基线即第 $i$ 个样本的基线为除自己外的其他 $K-1$ 个样本的均值$$ \hat{A}{i} R_i - \frac{1}{K-1}\sum{j \neq i} R_j $$这个公式可以等价地改写为$$ \hat{A}_{i} \frac{K}{K-1} \left(R_i - \bar{R}\right) $$其中 $\bar{R} \frac{1}{K}\sum_{j1}^K R_j$ 是组内所有样本的均值。说明这里使用 $K$ 对齐论文符号与 GRPO 中的 $G$ 含义一致均对应配置参数num_generations。为什么使用留一法留一法的关键优势在于无偏性。对于第 $i$ 个样本其奖励 $R_i$ 和基线 $\frac{1}{K-1}\sum_{j \neq i} R_j$ 是独立的因此优势估计是无偏的。相比之下如果使用包含自身的均值作为基线会引入偏差。区别 2KL 散度正则化项的处理方式为防止策略偏离参考策略过远两种算法都引入了 KL 散度正则化但处理方式不同GRPO将 KL 散度作为独立的正则化项添加到损失函数中$$ \mathcal{L}(\theta) -\mathbb{E}\left[\hat{A}i \log \pi\theta(a_i|s_i)\right] \beta \cdot \text{KL}(\pi_\theta || \pi_{\text{ref}}) $$RLOO将 KL 散度直接整合到奖励项中构造修正后的奖励$$ Ri R_i - \beta \cdot \text{KL}(\pi\theta || \pi_{\text{ref}}) $$其中 $\beta$ 是 KL 散度的权重系数对应参数beta$\pi_{\text{ref}}$ 是参考策略通常是 SFT 模型或初始策略。三、源码实现剖析RLOO 在 Swift 中的落地方式理解了算法公式之后我们来看 MS-Swift 是如何在源码中实现这两种优势估计的。核心实现位于 advantage.py 的compute_advantages函数该函数是纯张量运算可同时服务于 HF、Megatron 与 Ray 等不同后端。从源码结构看RLOO 与 GRPO 在实现上共享了绝大部分逻辑关键分支如下advantage.pyKL 先扣除若kl_in_rewardTrue且beta ! 0在计算优势之前先执行rewards rewards - beta * kl_values这正对应 RLOO 中将 KL 整合进奖励的处理方式而 GRPO 默认kl_in_rewardFalseKL 项将在损失层面单独叠加。优势计算分支当advantage_estimator rloo且K 1时执行advantages rewards * K / (K - 1) - group_mean * K / (K - 1)这正是 $\hat{A}_{i} \frac{K}{K-1}(R_i - \bar{R})$ 的向量化实现否则退化为advantages rewards - group_mean未标准化前的 GRPO 形式。标准化与否GRPO 默认scale_rewardsgroup会在后续用组内标准差对优势归一化而 RLOO 的默认scale_rewardsnone不再额外除以标准差与论文中仅去均值的做法保持一致。此外compute_advantages_dynamicadvantage.py提供了面向动态采样数量如多轮对话场景的优势计算版本其中 RLOO 分支按照prompt_id分组后对每组分别执行留一法计算K取该组实际样本数支持每组样本数不同的情况。在训练器侧grpo_trainer.py 在计算优势时传入advantage_estimatorself.advantage_estimator、kl_in_rewardself.kl_in_reward与beta将参数层的配置直接透传给上述核心函数当beta ! 0且kl_in_rewardFalse时KL 惩罚则作为独立的损失项在训练循环中计算grpo_trainer.py印证了两种 KL 处理路径在工程上的并存。四、参数设置在 Swift 中启用 RLOO 训练在 MS-Swift 中可以基于GRPOTrainer通过设置以下两个参数实现 RLOO 训练# 基本 RLOO 配置 --advantage_estimator rloo # 使用 RLOO 的留一法优势函数计算 --kl_in_reward true # 将 KL 散度项整合到奖励中RLOO 默认方式值得注意的是这两个参数在 rlhf_args.py 中存在默认值联动逻辑当kl_in_reward未显式指定时选择rloo或reinforce_plus_plus优势估计器会自动将kl_in_reward置为True选择grpo则自动置为False。也就是说即使你只写--advantage_estimator rloo一行框架也会自动按 RLOO 的默认约定KL 并入奖励工作。同理scale_rewards也会随估计器自动取值GRPO 默认groupRLOO 默认none。完整可运行的训练脚本可参考仓库中的 rloo.sh其为一份基于 Qwen2.5-VL-3B-Instruct 的多模态 RLOO 训练示例核心片段如下CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 \ NPROC_PER_NODE8 \ swift rlhf \ --rlhf_type grpo \ --advantage_estimator rloo \ --kl_in_reward true \ --model Qwen/Qwen2.5-VL-3B-Instruct \ --external_plugins examples/train/grpo/plugin/plugin.py \ --reward_funcs external_r1v_acc format \ --use_vllm true \ --vllm_mode colocate \ --vllm_gpu_memory_utilization 0.4 \ --vllm_tensor_parallel_size 1 \ --vllm_max_model_len 16384 \ --tuner_type lora \ --torch_dtype bfloat16 \ --dataset AI-ModelScope/clevr_cogen_a_train \ --overlong_filter false \ --epsilon 3e-4 \ --epsilon_high 4e-4 \ --max_completion_length 1024 \ --num_train_epochs 1 \ --per_device_train_batch_size 2 \ --learning_rate 1e-6 \ --gradient_accumulation_steps 4 \ --eval_steps 1000 \ --save_steps 1000 \ --save_total_limit 10 \ --sleep_level 1 \ --offload_model true \ --offload_optimizer true \ --logging_steps 1 \ --dataloader_num_workers 4 \ --num_generations 16 \ --temperature 1.0 \ --system examples/train/grpo/prompt.txt \ --deepspeed zero2 \ --log_completions true \ --report_to tensorboard swanlab \ --num_iterations 1 \ --async_generate false \ --beta 0.001 \ --attn_impl flash_attention_2 \ --padding_free true \ --loss_type grpo该脚本展示了 RLOO 在真实多模态场景中的典型用法以 vLLM colocate 模式做采样加速、LoRA 微调、DeepSpeed ZeRO-2 优化并通过--num_generations 16控制每个 prompt 的采样数量 $K$。五、重要参数说明--advantage_estimator选择优势函数估计方法grpo默认使用组内均值和标准差进行标准化rloo使用留一法Leave-One-Out构造基线reinforce_plus_plus另一种基于 REINFORCE 的变体同样自动启用kl_in_reward--kl_in_reward控制 KL 散度正则化项的处理位置falseKL 散度作为损失函数的独立正则化项GRPO 方式trueKL 散度直接从奖励中扣除构造修正后的奖励RLOO 方式未显式指定时由advantage_estimator自动推断GRPO 默认falseRLOO/REINFORCE 默认true--num_generations每个 prompt 生成的样本数量 $K$对应论文符号 $K$默认值为 8该值必须能被采样阶段与评估阶段的总批量大小整除以保证生成任务可以均匀分配到各设备当num_generations小于等于 1 时留一法退化为无基线形式RLOO 优势计算会走rewards - group_mean的兜底分支--betaKL 散度正则化系数 $\beta$控制策略更新的保守程度beta越大策略越不允许偏离参考模型在 RLOO 中它直接作用于修正奖励 $R_i R_i - \beta \cdot \text{KL}$设置--beta 0可完全关闭 KL 损失计算且不会加载参考模型ref model可减少显存占用--scale_rewards奖励缩放方式GRPO 默认group组内标准差归一化RLOO 默认none仅去均值该参数与advantage_estimator有自动联动一般无需手动调整六、实战建议与注意事项结合 GRPO 训练框架的通用实践经验详见 GRPO.md使用 RLOO 时有以下几点值得关注样本数量 $K$ 的选取RLOO 的优势来自组内对比$K$ 过小会导致基线噪声大$K$ 过大会显著增加采样与奖励计算的开销。参考示例脚本中--num_generations 16的设置实际使用中可根据显存与推理吞吐量权衡。批量大小以 completion 为单位在 GRPO/RLOO 训练中per_device_train_batch_size表示每张 GPU 同时处理的 completion 数量而非 prompt 数量。一次完整梯度累计 batch 的总量等于num_processes * per_device_train_batch_size * gradient_accumulation_stepsnum_generations需要整除采样与评估阶段的批量大小。vLLM colocate 模式下的显存控制RLOO 同样依赖 vLLM 加速采样。训练与推理共享 GPU 时可通过--vllm_gpu_memory_utilization降低推理显存占用、--sleep_level 1在训练阶段释放 vLLM 显存、--offload_model true --offload_optimizer true在推理阶段释放训练侧显存示例脚本中的组合即为此类实践。on-policy 特性num_iterations保持 1 且每轮 rollout 后立即更新时新旧策略一致重要性采样比恒为 1clip 机制不生效此时优势估计的准确性对训练效果影响更为直接——这也是 RLOO 无偏基线价值凸显的场景。监控指标训练过程中可通过reward/{reward_func_name}/mean、reward_std、frac_reward_zero_std、kl等指标详见 GRPO.md 的 logged metrics 章节观察奖励分布与策略偏移情况辅助判断beta与num_generations的取值是否合理。除上述参数外RLOO 其余参数与 GRPO 参数完全一致可参照该文档进行完整配置。MS-Swift 将 RLOO 作为GRPOTrainer的一个优势估计器选项集成使得在 GRPO 与 RLOO 之间切换仅需修改两个参数为算法对比实验与生产环境调优提供了极大的便利。【免费下载链接】swiftUse PEFT or Full-parameter to CPT/SFT/DPO/GRPO 600 LLMs (Qwen3.6, DeepSeek-V4, GLM-5.1, InternLM3, Llama4, ...) and 300 MLLMs (Qwen3-VL, Qwen3-Omni, InternVL3.5, Ovis2.5, GLM4.5v, Gemma4, Llava, Phi4, ...) (AAAI 2025).项目地址: https://gitcode.com/GitHub_Trending/swift1/swift创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

CMS还是SAAS建站?一文讲透技术选型、成本与SEO那把账

CMS还是SAAS建站?一文讲透技术选型、成本与SEO那把账

先说结论:CMS系统建站和SAAS建站从来不是谁取代谁的关系,而是两条技术路线,服务的是不同需求、不同阶段、不同资源的站点。我做了十来年网站相关的开发和咨询,经手过政府门户、企业官网、垂直内容站、电商站点,也折腾过…

📅 2026/9/14 15:42:56
军工信创环境下基于国产PHP框架的视频分片秒传实战

军工信创环境下基于国产PHP框架的视频分片秒传实战

1. 军工项目里的视频上传,到底难在哪国产化PHP框架近年在政企、军工、能源等领域落地越来越频繁,但很多人接项目时会遇到同一个棘手需求——大视频文件上传。视频动辄几个GB,网络环境又不是自建机房那种千兆内网,脆弱的链路下传一…

📅 2026/9/14 15:42:56
MCP Toolbox for Databases 的 Couchbase 数据源配置详解:从连接串到参数化 SQL 工具

MCP Toolbox for Databases 的 Couchbase 数据源配置详解:从连接串到参数化 SQL 工具

MCP Toolbox for Databases 的 Couchbase 数据源配置详解:从连接串到参数化 SQL 工具 【免费下载链接】mcp-toolbox MCP Toolbox for Databases is an open source MCP server for databases. 项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox …

📅 2026/9/14 15:37:55
MORE NEWS

更多资讯

📰

企业级Agent平台落地指南:从超级个体到超级团队的关键实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

5分钟跑通 vue-vben-admin 工作台:从启动到改成自己的样子

5分钟跑通 vue-vben-admin 工作台:从启动到改成自己的样子 【免费下载链接】vue-vben-admin A modern vue admin panel built with Vue3, Shadcn UI, Vite, TypeScript, and Monorepo. Its fast! 项目地址: https://gitcode.com/GitHub_Trending/vu/vue-vben-admi…

📰

自恋型人格的双面性:从健康到病态的心理学解析

1. 自恋现象的双重性解析第一次接触"自恋型人格"案例是在2017年的心理咨询室。来访者张女士(化名)穿着考究,落座后第一句话是:"医生,我觉得周围人都配不上我的优秀。"但谈话进行到第40分钟&#x…

📰

P2G两阶段建模全流程:电解水制氢与甲烷化Matlab仿真详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Lynx Core Inspector 接口层剖析:运行时检查协调、Observer 契约与样式表数据结构

Lynx Core Inspector 接口层剖析:运行时检查协调、Observer 契约与样式表数据结构 【免费下载链接】lynx Empower the Web community and invite more to build across platforms. 项目地址: https://gitcode.com/GitHub_Trending/lynx10/lynx 本文以 core/i…

📰

Unity UI Overdraw优化实战:从GPU发烫到帧率稳定

1. 项目概述:为什么“同一面墙刷了N遍漆”是GPU发烫的元凶?Unity Overdraw——这个听起来像美术流程里的日常操作,实则在运行时悄悄把GPU拖进高温红区。我第一次在Pico4设备上跑UI密集型应用时,手柄刚握十分钟就烫得不敢碰&#x…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬