基于GRPO将QWEN训练为和deepseek一样的推理模型!

 GRPO

群体相对策略优化(GRPO)算法最初由deepseek团队提出,是近端策略优化(PPO)的一个变体。

GRPO 是一种在线学习算法,它通过使用训练过程中已训练模型自身生成的数据进行迭代改进。GRPO 目标背后的逻辑是在确保模型与参考策略保持接近的同时,最大化生成的completion的优势。

DeepSeek团队在使用纯强化学习 训练 R1-Zero 时观察到了一个“aha moment”。该模型学会了通过重新评估其初始方法来延长其思考时间,而无需任何人工指导或预定义指令。

  1. 该模型将生成多个响应

  2. 每个响应都根据正确性或由某奖励函数而不是 LLM 奖励模型创建的另一个指标进行评分

  3. 计算该组的平均分数

  4. 将每个响应的分数与组平均值进行比较

  5. 该模型经过强化,有利于得分较高的响应

例如,假设我们想要一个模型来求解:

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值