贝尔曼方程的艺术。
引子
上一篇文章主要讲了贝尔曼方程、TRPO和PPO算法。TRPO和PPO都是「基于信号进行优化的算法」。但是信号哪里给出?我们并不知道。也就是说,我们现在再假设存在打分机制的情况下,知道了如何优化。这篇文章讲一讲信号是如何得来的。
在游戏引擎中,信号可以通过A*算法等算法得来,但是再自然语言处理领域,信号则没有一个清晰的算法给出。但是,文本信号是符合马尔可夫性的,所以,可以应用RL方法进行求解。
RLHF
RLHF通过一个「训练好的奖励模型」提供信号。
当LLM生成一个文段之后,RLHF通常对整段文本打分,然后通过GAE等方法,将整段文本的打分,分散到每一个token上。通过上一篇文章,我们知道优势函数:
$$
\rm A^\pi(s,a)=Q^\pi(s,a)-V(s)
$$
每一个token都有分数,就可以计算$\rm Q^\pi(s,a)$。
随后依靠TRPO或者PPO运算即可。
在这个流程中,对文本打分的成员可以是一个训练好的模型,是人工训练的,在这里引入了人类反馈的监督讯号。
那么,读者可能会认为:
$$
\rm Loss_{RLHF} = Loss_{PPO}
$$
其实,实际过程中:
$$
\rm Loss_{RLHF} = Loss_{PPO} + \beta D_{KL}(\pi_{new}||\pi_{old})
$$
这里,$\beta$是一个参数。加上一项是因为,如果RLHF的奖励模型训练质量不高,可能会导致模型「作弊」,这个时候需要加上一个KL散度约束,确保新策略和旧策略之间差的不要太多。
DPO
DPO算法的中文是「直接偏好优化」,是对RLHF的优化。
RLHF的效果和人类反馈监督信号强相关,也就是说,奖励模型的训练至关重要。
DPO的想法就是,既然我需要人类的信号,那么何必训一个模型,我直接使用带有监督信号的数据集不可以吗?可以的,不仅如此,可以通过数学证明这样的训练方法等价于优化一个奖励模型。
DPO首先推导出了这样一个神奇妙妙公式,含义是:如果想找到一个策略$\pi$,使得它在某个未知的奖励模型$R$上的期望奖励最大化,同时限制它和初始策略$\rm\pi_{ref}$的KL散度,那么最优策略$\pi^*$满足:
$$
\rm \log{\frac{\pi^*(y|x)}{\pi_{ref}(y|x)}} = \frac{1}{\beta}E_R(Q_R(x,y)-V_R(x))
$$
通俗而言就是,最优策略和初始策略的比值(对数形式),正比于优势函数。
DPO直接利用这个相对关系,推导出了一个不需要奖励模型、不需要 PPO、甚至不需要计算梯度的目标函数。
基于此,DPO构造了一个损失函数。它不需要去算复杂的贝尔曼方程迭代,而是直接比较两个回复的好坏。这也就表明了,只要对于一个问题,有正例和反例,就可以训练。再通俗一点说,它把复杂的强化学习变成了类似SFT的格式。这个损失函数是:
$$
\rm L_{DPO}(\pi_\theta) = -E_{(x,y_{win},y_{lose})\sim D}[
log \sigma (\beta \log \frac{\pi_\theta(y_{win}|x)}{\pi_{ref}(y_{win}|x)} - \beta \log \frac{\pi_\theta(y_{lose}|x)}{\pi_{ref}(y_{lose}|x)})]
$$
感性认识就是,这样优化策略——让好回答的概率更高,差回答的概率更低。
我们发现了同样的路径,PPO是对TRPO的优化,优化掉了KL散度的计算;DPO也是对RLHF的优化,无须训练奖励模型,也无须显式计算KL散度。
