GRPO
群体相对策略优化(GRPO)算法最初由deepseek团队提出,是近端策略优化(PPO)的一个变体。
GRPO 是一种在线学习算法,它通过使用训练过程中已训练模型自身生成的数据进行迭代改进。GRPO 目标背后的逻辑是在确保模型与参考策略保持接近的同时,最大化生成的completion的优势。
DeepSeek团队在使用纯强化学习 训练 R1-Zero 时观察到了一个“aha moment”。该模型学会了通过重新评估其初始方法来延长其思考时间,而无需任何人工指导或预定义指令。
-
该模型将生成多个响应
-
每个响应都根据正确性或由某奖励函数而不是 LLM 奖励模型创建的另一个指标进行评分
-
计算该组的平均分数
-
将每个响应的分数与组平均值进行比较
-
该模型经过强化,有利于得分较高的响应
例如,假设我们想要一个模型来求解:
1+1=?>> 思维链/解决 >> 答案是 2.
2+2=?>> 思维链/解决 >> 答案是 4.
以前必须收集大量数据来填充锻炼/思维链过程。但是GRPO可以引导模型自动展示推理功能并创建推理跟踪。
构建聊天模板
提示模型在提供答案之前阐明其推理。需要先将提示和响应建立一个明确的格式。
# system prompt
SYSTEM_PROMPT = """
Respond in the following format:
<reasoning>
...
</reasoning>
<answer>
...
</answer>
"""
XML_COT_FORMAT = """\
<reasoning>
{reasoning}
</reasoning>
<answer>
{answer}
</answer>
"""
数据集
选择OpenAI的 GSM8K 数据集,其中包含小学数学问题,每个答案都会有一个推理过程,并在 “####”后面附上最终答案。(该数据集在诸多论文中出现过)

数据集是通过提取答案并将其格式化为结构化字符串来准备的
# 准备数据集
import re
from datasets import load_dataset, Dataset
# 提取推理过程
def extract_xml_answer(text: str) -> str:
answer = text.split("<answer>")[-1]
answer = answer.split("</answer>")[0]
return answer.strip()
# 提取最终答案
def extract_hash_answer(text: str) -> str | None:
if "####" not in text:
return None
return text.split("####")[1

最低0.47元/天 解锁文章
2301






