GitHub 热门项目:GRPO-Zero

摘要

GitHub项目:GRPO-Zero 仓库地址:https://github。

the policy gradient training GRPO
2026-05-18 1 阅读 GitHub Trending
GitHub 项目:GRPO-零 仓库地址:https://github.com/policy-gradient/GRPO-Zero 星级:1844 | 作者:政策梯度 项目描述:从头开始实现DeepSeek R1的GRPO算法 =================================================== 自述文件内容: #GRPO:零 GRPO 训练具有最小的依赖性(并且 GPU 内存使用率低!)。我们几乎从头开始实现所有内容,仅依赖“tokenizers”进行标记化和“pytorch”进行训练。 - 没有“transformers”和“vLLM”依赖性! - 默认配置设置为在单个 A40 GPU(48GB VRAM)上运行几个小时以获得良好的结果。 (如果您从 RunPod 租用 A40,每小时费用为“0.44 美元”。) - 我们还通过将优化器卸载到 CPU 来支持使用 24GB VRAM GPU(例如 RTX 4090 GPU)进行训练。幸运的是,这只会给训练增加很小的开销,因为我们在整个训练过程中只更新策略网络几百次。 - 我们支持 [DAPO 项目](https://arxiv.org/abs/2503.14476) 对原始 GRPO 算法的多项改进,包括: - **代币级策略梯度损失**:每个代币在策略梯度损失中的权重相等。 - **删除 KL 散度**:策略梯度损失中不使用 KL 散度。这减少了 GPU 内存的使用,因为我们不再需要参考策略网络。 - **超长剧集过滤**:跳过超出上下文长度限制的未完成剧集。这稳定了训练。尽管我们默认禁用它,以在有限的上下文长度下观察模型学习。将“skip_unfinished_episodes”设置为“true”以启用它。 ## 算法 组相对策略优化(GRPO)是 Deepseek 提出的一种用于通过强化学习训练大型语言模型的算法。这个想法很简单:对于每个问题,我们随机抽取多个答案。然后,答案的优势被定义为标准化奖励。这摆脱了价值估计网络。特别地,我们实现以下算法: 1. 对于每个训练步骤,随机抽取 $N$ 个问题 $q_1, q_2, \cdots, q_N$。 2. 对于每个问题 $q_i$,样本 $M$ 回答 $a_{i,1}、a_{i,2}、\cdots、a_{i,M}$。 3. 计算每个答案 $a_{i,j}$ 的奖励 $r_{i,j}$。 4. 计算每个问题 $q_i$ 的奖励平均值和标准差。 $$ \开始{对齐} \mu_i &\leftarrow \text{mean}(r_{i,1}, r_{i,2}, \cdots, r_{i,M}) \\ \sigma_i &\leftarrow \text{std}(r_{i,1}, r_{i,2}, \cdots, r_{i,M}) \结束{对齐} $$ 5. 对于答案 $a_{i,j}$ 中的每个标记 $t$,将优势计算为 $$A_{i,j}[t] \leftarrow \frac{r_{i,j} - \mu_i}{\sigma_i}$$ 6. 使用 PPO 替代目标计算策略梯度。为简单起见,我们每次迭代仅进行一次策略更新,其中 PPO 目标的梯度相当于遵循普通策略梯度估计(每个令牌)。 $$ \nabla_\theta \log \pi_\theta(a_{i,j}[t]) \cdot A_{i,j}[t] $$ 7. 使用梯度更新策略网络$\pi(\theta)$。返回步骤 1。 ## 倒计时任务 我们将在 [CountDown 任务](https://huggingface.co/datasets/Jiayi-Pan/Countdown-Tasks-3to4) 上训练 Qwen2.5 模型。给定 3 或 4 个数字的列表和一个目标数字,模型需要生成一个数学公式