已合并
增加奖励模型训练相关文档 #1926
AtomGit-Bot创建于 2024年11月25日
增加奖励模型训练相关文档 #1926
已合并
AtomGit-Bot创建于 2024年11月25日
refs/pull/1926/head合入到master
4 个文件变更+76-1
@@ -517,7 +517,7 @@ MindSpeed-LLM作为昇腾大模型训练框架,旨在为华为 [昇腾芯片](
517 </tr>517 </tr>
518 <tr>518 <tr>
519 <td>奖励模型</td>519 <td>奖励模型</td>
520- <td>ORM</td>520+ <td><a href="./docs/features/outcome_reward_model.md">ORM</a></td>
521 <td>✅</td>521 <td>✅</td>
522 <td>❌</td>522 <td>❌</td>
523 <td>【昇腾】</td>523 <td>【昇腾】</td>
@@ -0,0 +1,75 @@
1+# 结果奖励模型训练
2+ 
3+奖励模型(Reward Model)主要用于在基于人类反馈的强化学习(RLHF)过程中对大语言模型的回答进行评估,以使得模型生成的结果更加符合人类的喜好。结果奖励模型(Outcome Reward Model, ORM)仅对最终的结果进行评分,而不关注推理的过程。ORM 的输入是一个问题及回答,输出是该回答与问题匹配程度的评分。
4+ 
5+![](../../sources/images/reward_model/rm_in_rlhf.png)
6+ 
7+ORM 训练使用 [Pairwise](./pairwise_dataset.md) 数据集,每条数据包含一个问题及配对的两条回答,一条是相对符合人类偏好的回答(chosen),一条是相对不符合人类偏好的回答(reject)。
8+ 
9+ORM 结构以预训练模型为基础,将最后的 unembedding layer 替换为一个输出特征数为1的线性层 value head,将模型的输出映射为一个标量评分。
10+ 
11+ORM 训练过程中,loss 采用以下公式计算得出:
12+$$
13+loss(\theta) = -E_{(x, y_c, y_r) \sim D} \log(\sigma(r_\theta(x, y_c) - r_\theta(x, y_r)))
14+$$
15+其中,$r_\theta(x,y)$ 表示 ORM 对该 “问题$x$-回答$y$” 的评分,$y_c$ 表示符合人类偏好的回答(chosen),$y_r$ 表示不符合人类偏好的回答(reject),$D$ 表示人工排序的 Pairwise 数据集。
16+ 
17+## 使用说明
18+ 
19+### 数据预处理示例
20+ 
21+```shell
22+python ./preprocess_data.py \
23+ --input /data/dpo_en.json \
24+ --tokenizer-type PretrainedFromHF \
25+ --tokenizer-not-use-fast \
26+ --tokenizer-name-or-path /data/chatglm3-6b-base \
27+ --output-prefix dataset/dpo_en \
28+ --workers 4 \
29+ --log-interval 1000 \
30+ --handler-name SharegptStylePairwiseHandler \
31+ --prompt-type chatglm3
32+```
33+ 
34+注意 ORM 训练需要使用 Pairwise 数据集及对应的 Pairwise handler。更多关于 Pairwise 数据集预处理说明详见:[Pairwise-dataset](./pairwise_dataset.md)
35+ 
36+### 训练脚本示例
37+ 
38+目前仓上已包含 ChatGLM3-6B, Llama2-7B 奖励模型训练脚本。以 ChatGLM3-6B 为例,训练脚本参照:examples/mcore/chatglm3/reward_chatglm3_6B.sh
39+ 
40+相较预训练,奖励模型训练需要额外配置以下参数:
41+ 
42+- **`--stage rm`**
43+ 
44+ 指定进行奖励模型训练
45+ 
46+- **`--is-pairwise-dataset`**
47+ 
48+ 必选,奖励模型训练需要使用 Pairwise 类型数据集
49+ 
50+- **`--load-checkpoint-loosely`**
51+ 
52+ 可选,在已有的预训练模型基础上训练奖励模型,增加的 value head 部分权重需要随机初始化,需允许松弛加载
53+ 
54+- **`--no-post-layer-norm`**
55+ 
56+ 可选,不使用模型最后的 layernorm 层
57+ 
58+## **ModelLink 与 <a href="https://github.com/hiyouga/LLaMA-Factory/tree/main">LLaMA-Factory</a> loss 对比**
59+ 
60+数据集:dpo_en
61+ 
62+训练参数设置:
63+```
64+per_device_train_batch_size: 1
65+gradient_accumulation_steps: 1
66+learning_rate: 1.0e-7
67+lr_scheduler_type: constant
68+fp32: true
69+```
70+ 
71+![alt text](../../sources/images/reward_model/rm_chatglm3_loss_compare.png)
72+ 
73+## 参考文献
74+ 
75+- [Training language models to follow instructions with human feedback](https://arxiv.org/abs/2203.02155)