前言

大模型最近很是火啊,媒体铺天盖地的宣传,候选者简历中写到LLM微调等等。本文希望介绍下RHLF在整个训练工作中的位置以及起到的作用,方便理解与后续应用。

代码分析

本文以huggingface trl/RHLF notebooks讲到的几个例子作为入口。在这个文件夹下,一共有三个例子:

  1. gpt2-sentiment.ipynb
  2. gpt2-sentiment-control.ipynb
  3. best_of_n.ipynb

同时也按照上述这三个文件顺序进行分析。

一、gpt2-sentiment.ipynb

目的:这个文件实现的是如何利用RHLF学会生成正向评论。

1. Load IMDB dataset

数据集默认有两个字段,textlabel,即用户对一部电影的评论和这条评论的情感倾向(正向、负向)。

这里对text字段随机截断长度为n后面的文本,例如:text=这个电影我觉得很棒。 截取后变成query=这个电影

2. Model和Ref Model

这里采用GPT2作为训练model,ref model和model是一样的,可先理解成model是用来训练的,ref model是用来参考的。
ref model是RHLF训练过程中不可缺少的一部分,也跟在generation model后面添加ValueHead层是一个道理,关于强化学习更细力度,本文先忽略。

3. reward model

这里采用distilbert-imdb模型来作为打分模型,这个模型的作用是输入一条评论,它会给出positive、negative的打分。

4. 训练

即让model基于query生成指max_new_tokens的文本,然后让reward model来打分,以positive score为目标,不断优化model,使其能够基于用户给定的文本开头来生成正向评论。

这里的max_new_tokens也比较有意思,它可以有两层的不同解释:

  1. 一条文本的长度不会很长
  2. 折扣因子

关于后者,我觉得会是一个比较有意思的点。在RHLF中,有针对每一步给一个score,还有走完后针对整条路径给一个score。那这里的max_new_tokens是不是就可以理解成是中间的状态~
既不会因为每一步都打分造成训练效率低下也不会因为对整条路径打分导致某些点决策失误所带来的更大偏差,尽量环节这种情况。

结束。

二、gpt2-sentiment-control.ipynb

目的:通过添加prompt来控制生成评论的情感。

这里的prompt有三类:positive、negative、neutral。由于neutral是reward model本身能力所不具备的,看到这里也可以跳过。

其构造示例如下:

1
query="[positive]这个电影很"

那么预期目标是

如果是

1
query="[negative]这个电影很"

那么预期目标是不好之类的情感。

剩下流程和上面文件一致,此处忽略。

三、best_of_n.ipynb

目的:RHLF的目标是超越原有天花板,那这种是选取ref model的best of n来和RHLF训练后的做个比对。

整体下来,reward model占据很重要的作用,决定了RHLF的效果,需要注意。

更多看下原代码,整体流程不是很复杂。又水水水了一篇。