已合并
增加奖励模型训练相关文档 #1926
AtomGit-Bot创建于 2024年11月25日
增加奖励模型训练相关文档 #1926
已合并
从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 | + | ||
| 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 | + | ||
| 72 | + | ||
| 73 | +## 参考文献 | ||
| 74 | + | ||
| 75 | +- [Training language models to follow instructions with human feedback](https://arxiv.org/abs/2203.02155) | ||