MindSpeed-LLM 过程奖励模型(Process Reward Model)
过程奖励模型简介
过程奖励模型PRM(Process Reward Model)可以对推理过程中的每个推理步骤进行评分,逐步评估推理路径,识别可能出现的任何错误的特定位置来提供精确的反馈,这是强化学习和自动校正中有价值的信号。

过程奖励模型原理
过程奖励模型的核心思想是通过步骤级别的标注数据集,训练过程奖励模型来预测解决方案中每个中间步骤的正确性,基本原理如下:
rsi=PRM([q,s1:i−1],si)r_{s_i}=PRM([q,s_{1:i-1}], s_i)
其中 s1:i=[s1,...,si]s_{1:i}=[s_1,...,s_i] 表解决方案 ss 中的第 sis_i 个步骤,这提供了比 ORM 更精确和更细粒度的反馈,因为它识别了错误的确切位置。
给定一个数学问题 qq 和对应的解决方案 ss,PRM为 ss 的每个推理步骤 sis_i 分配一个分数,通常使用以下方式进行训练:
LPRM=∑i=1Kysilogrsi+(1−ysi)log(1−rsi){\mathcal L}_{PRM} = \sum\limits_{i=1}\limits^{K} y_{s_i} log r_{s_i} + (1-y_{s_i})log(1-r_{s_i})
其中 ysiy_{s_i} 是步骤 sis_{i} 的标签,表示步骤 sis_{i} 是否正确;rsir_{s_{i}} 是PRM为步骤 sis_{i} 的分配的sigmoid分数,KK 表示 ss 包含的推理步骤数。
过程奖励模型训练示例
在1x8的集群配置下,使用Atlas 900 A2 PODc进行全参数微调。以LLaMA2-7B模型在TP1PP8切分后生成的权重作为输入,进行过程奖励模型训练示例。
数据预处理
MATH-SHEPHERD 数据集下载及预处理可以参考 过程奖励数据预处理。
接下来将以MATH-SHEPHERD数据集作为输入,进行过程奖励模型训练示例。
启动脚本
使用examples/mcore/llama2/模型目录下的过程奖励模型微调脚本。
填写相关路径
DATA_PATH:指定数据预处理后的保存路径。
TOKENIZER_MODEL:指定模型的分词器路径(例如tokenizer.model)。
CKPT_LOAD_DIR:指向权重转换后保存的路径。
CKPT_SAVE_DIR:指向用户指定的微调后权重保存路径(例如指定保存到ckpt文件夹下)。
因此,根据之前的示例,路径应填写如下:
DATA_PATH="./prm_dataset/math-shepherd"
CKPT_SAVE_DIR="./ckpt/"
TOKENIZER_MODEL="./model_from_hf/llama-2-7b-hf/"
CKPT_LOAD_DIR="./model_weights/llama-2-7b-mcore/"
指令微调相关参数
【--stage】
必选,用于指定训练方法为prm
【--placeholder-token】
微调数据prompt中每个推理步骤间的分割占位符,默认为"ки"。
【--reward-tokens】
微调数据label中表示每个推理步骤是否正确的奖励hard标签token,"+"代表当前推理步骤是正确的,"-"代表当前推理步骤是错误的。
运行脚本
bash ./examples/mcore/llama2/train_prm_llama2_7b_full_ptd.sh