大模型DPO算法学习 - ChangminWu/Notes GitHub Wiki

在大模型训练任务中,以DPO为代表的偏好对齐是重要的一个环节。本文将简要介绍DPO算法的意义及其流程,并讨论其背后的理论背景。

大模型对齐人类偏好:RLHF与DPO

大模型训练通常分为三个主要环节:预训练、有监督微调(SFT)、偏好对齐。其中,预训练指在大规模的通用语料上进行无监督训练,旨在让模型获得基础的语言能力。有监督微调通常使用对话、问答等具有特定指令格式的数据,为大模型赋予指令遵从、对话、回答问题的能力。最终,通过偏好对齐使模型在回答问题时以人类所偏好的风格进行回答(例如详细或简略、语气专业礼貌,避免涉及敏感内容等)。

ChatGPT最早使用RLHF进行偏好对齐。这一算法大致分为以下几步:

  1. 由大模型对同一个问题生成不同回答,人工标注哪一个更好,形成偏好数据(question, good answer, bad answer);
  2. 基于偏好数据训练reward model,使得该模型可以给回答打分——越接近人类偏好的回答,分数越高;
  3. 用reward model对大模型输出的打分作为强化学习中的奖赏(reward),对大模型进行强化学习训练,最终令大模型的输出更接近人类偏好。

RLHF算法一度被认为是ChatGPT成功的关键因素之一,受到广泛关注。不过,该方法需要训练额外的reward model,并进行强化学习,计算开销较大。随后,斯坦福大学的团队提出了改进算法DPO,免除了强化学习的步骤,直接对大模型进行偏好优化。

DPO算法概述

DPO作为RLHF的改进技术,作者证明了其与RLHF的等价性。DPO精简了强化学习的环节,直接用大模型在偏好数据上排序正确的损失进行学习,提升了效率的同时,避免了舍近求远训练reward model带来的损失。

image

图1:RLHF与DPO流程对比

DPO训练同样基于偏好数据(question, good answer, bad answer)。这里问题记为x,较好的回答记为yw,较差的回答记为yl。其核心即为优化下面的损失函数: image

本文不再赘述该式的理论推导;而是牺牲一点点严谨性,对上式进行一个易于理解的简写: image

其中,l函数是一个单调平滑的损失函数(图2);如果好回答的生成概率高出差回答越多,就会取到l越靠右的位置,造成很少的损失;如果好回答的生成概率高出差回答少,甚至为负,则产生较大的损失。DPO训练让模型缩小这个损失,使得“好回答”的概率高出“差回答”尽可能多;最终,模型输出的分布会集中到人类偏好的分布上。

image 图2:DPO损失函数改写中l的函数图像

DPO的理论背景与技术发展

虽然DPO是一个新技术,其基于“数据偏好对”优化“排序正确性”的机器学习方法由来已久。2002年Jochims提出的Ranking SVM通过SVM在“数据偏好对”上学习,以优化模型的排序性能。次年,Cortes等发表在NIPS上的论文将这一学习范式命名为“AUC优化”。之所以如此命名,是因为这种“成对优化”等价于最大化模型的AUC指标(相较之下, SVM、Logistic Regression等可以看作是最大化模型的分类准确率)。

AUC意为“ROC曲线下面积”,是衡量模型排序性能的指标。如图3所示,沿着模型对样本的排序先后,ROC曲线从原点(0, 0)开始,找到一个正样本就向上走一步,找到一个负样本就向右走一步,最终到达坐标(1, 1)。显然,如果正样本都出现在排序列表起始,ROC曲线就会先向上再向右,曲线下面积就会接近1。研究指出,这个面积刚好等于模型把随机选取的一对样本正确排序的概率。因此,AUC优化算法可以写作如下形式:

image 图3:ROC曲线示例(动图)

可以看出,DPO的优化目标是AUC优化在生成式模型上应用的一种特例。如此一来,一些AUC优化领域的算法思想也可以推动DPO方法的优化。例如替代损失函数的选择、将弱监督学习的思路引入数据筛选与训练流程的优化等;最近提出DPO改进算法如KTO、IPO、Iterative DPO均属此类。限于篇幅,此处不再展开;对AUC优化领域感兴趣的读者,此处推荐阅读笔者的学位论文《弱标记AUC优化研究》的绪论部分,文中对于AUC优化方面的发展历程有一些简要的回顾。

image 图4:一些DPO技术的变种