开源推荐
morning
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 个数字的列表和一个目标数字,模型需要生成一个数学公式