论文笔记分享,标题:Training Language Models to Self-Correct via Reinforcement Learning。来自google deepmind。
Reflection、Self-Correct这些东西在O1出来之后,挺火的。但是,正常的LLM在没有外部输入的时候,本身的自我修正能力是不够的。
除此之外,像PE以及FT这些,一般都比较难的让模型获得一个比较好的自我修正。
所有SCoRe来了,通过一通强化学习炼丹,在MATH任务上的自我修正性能提高了15.6%,在HumanEval任务上提高了9.1%。流程上会先进行第一次尝试,进行反思,第二次尝试中完成最终的结果。
2阶段训练,如果是单次的训练这种修正过程,模型很容易就学习到一个简单的策略。比如不对第一次的结果进行修正,或者先给一个明显错误的结果,然后在进行刻意修正。
为了避免这种情况,需要需要在第一阶段,引导模型探索更广泛的解题空间。第一阶段训练,第一次尝试的结果会用KL散度约束跟基础模型的结果保持一致。第二次尝试的结果最大化与正确答案之间的损失。如下图。第一阶段的损失函数:
有了第一阶段打底,第二阶段就放纵一点了。这次需要2次尝试一方面都尽可能的与正确答案去靠拢,还增加了一个额外的损失,鼓励从第一次尝试错误到第二次正确的奖励,这分别对应了下面2个奖励函数。
最后,贴一个与其他方法的效果对比提升图。