AlibabaResearch / DAMO-ConvAI

DAMO-ConvAI: The official repository which contains the codebase for Alibaba DAMO Conversational AI.
MIT License
1.1k stars 178 forks source link

PRO:关于奖励的问题 #59

Closed Boom-1995 closed 11 months ago

Boom-1995 commented 1 year ago

大佬你好,我在看PRO的代码的时候,发现训练数据中是包含<x, y_i>这一对couple的reward值的,如果我想用自己的数据去做的话,这个reward值怎么获得呢,还是得自己训练一个RM模型来打分吗?那这和rlhf中的RM模型有什么区别吗

F2-Song commented 1 year ago

Hi,感谢关注PRO~

数据集中的reward值是提前跑出来的,所使用的reward model (rm)在论文里有公布哈。这些reward值主要提供了排序信息;尽管temperature计算也需要具体reward值,但根据消融实验,在HH-RLHF这个数据集上,PRO仅去掉temperature的结果也还挺可观的(如果SFT Loss还在的话)。

关于rm的选择,我们使用的是在这个数据集上训练过并开源的rm,在选择rm时我们没有特别关注过是否来自RLHF。在其他数据上可能需要找对应的rm或者自行训练,我们在其他数据集上使用了其他开源的rm,实验结果能有和HH-RLHF基本一致的结论。

供参考~

Boom-1995 commented 12 months ago

好的,超级感谢您的解答~ 我已经跑通了咱们的数据制造代码,和训练代码,但是在训练过程中,我发现我利用hh-rlhf数据集结合本项目提供的数据处理脚本跑出来的数据中,好像缺少sft_index这个参数,但是咱们提供的下载链接中下载的数据则有这个参数,请问这个sft_index=0的意思是什么呢?是代表在答案列表中reward分数最高的那个答案的position吗?

F2-Song commented 12 months ago

感谢指出这一点~

数据预处理代码里确实应该加上设置sft_index,我们之后会更新这一点。

这个sft_index目前在compute_loss函数中会被使用。正如您所说,其是代表在答案列表中reward分数最高的那个答案的position,用于计算sft_loss。当然,因为数据预处理代码中有对candidates list的rerank,也可以用sft_index去存储原top 1 candidate的current index。

当初增加这一字段是用在一些self-bootstrap的实验里的,对PRO本身并不重要,因此在PRO的主实验中我们就简单的将sft_index设为0了。