保留正文与补采附件。源页面当前未重新核验;具体限制见交付清单。

[](javascript:void(0)) ZhiHu logo 关注推荐热榜专栏圈子AI WorksBeta 故事 ​ 直答 切换模式 登录/注册 RL in NLP:强化学习在自然语言处理下的应用 首发于许婧的学习笔记 切换模式 RL in NLP:强化学习在自然语言处理下的应用

RL in NLP:强化学习在自然语言处理下的应用

许婧 许婧 ​ 北京大学 数据科学硕士 收录于 · 许婧的学习笔记 56 人赞同了该文章 ​ 目录

本文目标

强化学习简介

强化学习(Reinforcement Learning)是一种时序决策学习框架,通过智能体和环境交互 at=π(ot)a_t=\pi({o_t}) ,得到的奖励 rt=r(ot,at)r_t=r({o_t, a_t}) ,从而来优化策略 π\pi ,使其能够在环境中自主学习。

回顾关键概念

以单智能体时序决策问题为例

其区别会影响policy网络的实现方式。

RL发展路径(至PPO)

Value-based 状态的值 V(s)或者状态行动对(state-action pair)的值Q(s,a) ,作为一种累积奖赏的估计,可以通过最大化值函数来优化得到最优策略,这种优化方法称为value-based。所以,

》两者的关系: V^\pi(s)=\underset{a \sim \pi}{\mathrm{E}}\left[Q^\pi(s, a)\right] ; V^(s)=\max _a Q^(s, a) 贝尔曼方程 中心思想:当前值估计=当前奖赏+未来值估计
\begin{aligned} V^\pi(s) & =\underset{\substack{a \sim \pi \\ s^{\prime} \sim P}}{\mathrm{E}}\left[r(s, a)+\gamma V^\pi\left(s^{\prime}\right)\right] \\ Q^\pi(s, a) & =\underset{s^{\prime} \sim P}{\mathrm{E}}\left[r(s, a)+\gamma \underset{a^{\prime} \sim \pi}{\mathrm{E}}\left[Q^\pi\left(s^{\prime}, a^{\prime}\right)\right]\right] \end{aligned}
所以,最优值函数的贝尔曼公式为:
\begin{aligned} V^(s) & =\max _a \underset{s^{\prime} \sim P}{\mathrm{E}}\left[r(s, a)+\gamma V^\left(s^{\prime}\right)\right] \\ Q^(s, a) & =\underset{s^{\prime} \sim P}{\mathrm{E}}\left[r(s, a)+\gamma \max _{a^{\prime}} Q^\left(s^{\prime}, a^{\prime}\right)\right] \end{aligned} 优势函数Advantage Functions 强化学习中,有时不需要知道一个行动的绝对好坏,而只需要知道它相对于其他action的相对优势。即,
A^\pi(s, a)=Q^\pi(s, a)-V^\pi(s) Policy-based

\begin{array}{rlr} \nabla_\theta J\left(\pi_\theta\right) & =\nabla_\theta \underset{\tau \sim \pi_\theta}{\mathrm{E}}[R(\tau)] & \\ & =\nabla_\theta \int_\tau P(\tau \mid \theta) R(\tau) & \text { Expand expectation } \\ & =\int_\tau \nabla_\theta P(\tau \mid \theta) R(\tau) & \text { Bring gradient under integral } \\ & =\int_\tau P(\tau \mid \theta) \nabla_\theta \log P(\tau \mid \theta) R(\tau) & \text { Log-derivative trick } \\ & =\underset{\tau \sim \pi_\theta}{\mathrm{E}}\left[\nabla_\theta \log P(\tau \mid \theta) R(\tau)\right] & \text { Return to expectation form } \\ \therefore \nabla_\theta J\left(\pi_\theta\right) & =\underset{\tau \sim \pi_\theta}{\mathrm{E}}\left[\sum_{t=0}^T \nabla_\theta \log \pi_\theta\left(a_t \mid s_t\right) R(\tau)\right] & \text { Expression for grad-log-prob } \end{array}

\nabla_\theta J\left(\pi_\theta\right) =\underset{\tau \sim \pi_\theta}{\mathrm{E}}\left[\nabla_\theta \log P(\tau \mid \theta) R(\tau)\right] * 第一项: \nabla_\theta \log P(\tau \mid \theta) 是一个方向向量,其方向是 \log P(\tau \mid \theta) 对于参数 \theta 变化最快的方向,参数在这个方向上更新可以增大或者降低 \log P(\tau \mid \theta) ,也就是能增大或者降低轨迹 \tau 的概率 P(\tau \mid \theta) 。 * 第二项: R(\tau) 是一个标量,在策略梯度中作为向量 \nabla_\theta \log P(\tau \mid \theta) 的更新幅值, R(\tau) 越大,向量的幅值越大,轨迹 \tau 出现的概率 P(\tau \mid \theta) 在参数更新后会更大。因此,策略梯度的直观含义是通过增大高回报轨迹的概率+降低低回报轨迹的概率,来最大化累计回报。

Actor-Critic框架 (以PPO为例)

  1. 轨迹的总回报: \Sigma_{t=0}^{\infty} r_t
  2. 动作后的回报: \Sigma_{t^{\prime}=t}^{\infty} r_{t^{\prime}}
  3. 加入基线的形式: \Sigma_{t^{\prime}=t}^{\infty} r_{t^{\prime}}-b\left(s_t\right) 【Expected Grad-Log-Prob (EGLP) 引理,合理的b可减小方差】
  4. 状态-行为值函数: Q^\pi\left(s_t, a_t\right)
  5. 优势函数: A^\pi\left(s_t, a_t\right)
  6. TD残差: r_t+V^\pi\left(s_{t+1}\right)-V^\pi\left(s_t\right)

1~3:直接应用轨迹的回报累积回报,无偏,但是由于需要累积多步的回报,因此方差大 。
4~6: 利用动作值函数,优势函数、TD偏差、GAE代替累积回报,其优点是方差小,但是这三种方法都属于用近似函数估计值,因此计算出来的策略梯度都存在偏差 。 * GAE( generalized advantage estimator ):平衡TD方法引入的偏差与MC方法带来的方差 ,公式如下

* 近似的GAE ,对k步的估计做了加权

这种结合了近似估计轨迹回报的策略优化方式称为AC方法,此时, \pi_\theta\left(a_t \mid s_t\right) 称为Actor, 对 R(\tau) 的估计函数称为Critic。

* PPO在具体实现上做了简化:

  * L^{C P I}(\theta)=\hat{\mathbb{E}}_t\left[\frac{\pi_\theta\left(a_t \mid s_t\right)}{\pi_{\theta_{\text {old }}}\left(a_t \mid s_t\right)} \hat{A}_t\right]=\hat{\mathbb{E}}_t\left[r_t(\theta) \hat{A}_t\right] with **ratio 裁剪**  

    * ratio: \frac{\pi_\theta\left(a_t \mid s_t\right)}{\pi_{\theta_{\text {old }}}\left(a_t \mid s_t\right)} 作为importance sampling系数,矫正由于不同策略下优势函数估计分布的偏差,当两分布差异过大时,importance sampling的近似估计会有较大误差。

* L^{C L I P}(\theta)=\hat{\mathbb{E}}_t\left[\min \left(r_t(\theta) \hat{A}_t, \operatorname{clip}\left(r_t(\theta), 1-\epsilon, 1+\epsilon\right) \hat{A}_t\right)\right]

* 代码实现

    def actor_loss_fn(self, logprobs, old_logprobs, advantages, mask):
        ## policy gradient loss
        log_ratio = (logprobs - old_logprobs) * mask
        ratio = torch.exp(log_ratio)
        pg_loss1 = -advantages * ratio
        pg_loss2 = -advantages * torch.clamp(ratio, 1.0 - self.cliprange,
                                             1.0 + self.cliprange)
        pg_loss = torch.sum(torch.max(pg_loss1, pg_loss2) * mask) / mask.sum()
        return pg_loss

    def get_advantages_and_returns(self, values, rewards, start):
        lastgaelam = 0
        advantages_reversed = []
        length = rewards.size()[-1]
        for t in reversed(range(start, length)):
            nextvalues = values[:, t + 1] if t < length - 1 else 0.0
            delta = rewards[:, t] + self.gamma * nextvalues - values[:, t] # TD 残差
            lastgaelam = delta + self.gamma * self.lam * lastgaelam  # GAE
            advantages_reversed.append(lastgaelam)
        advantages = torch.stack(advantages_reversed[::-1], dim=1)
        returns = advantages + values[:, start:]
        return advantages.detach(), returns
    def critic_loss_fn(self, values, old_values, returns, mask):
        ## value loss
        values_clipped = torch.clamp(
            values,
            old_values - self.cliprange_value,
            old_values + self.cliprange_value,
        )
        vf_loss1 = (values - returns)**2
        vf_loss2 = (values_clipped - returns)**2
        vf_loss = 0.5 * torch.sum(
            torch.max(vf_loss1, vf_loss2) * mask) / mask.sum()
        return vf_loss

PPO小结:
ppo(proximal policy optimization)通过优化一个upper bound来更新策略,在保证performance接近的情况下,限制步长的移动,对子问题逐步优化,理论上更容易得到单调递增的策略。

RL应用场景适合性判断

  1. 是否有reward delay/sparse reward 问题? 1. 如果每次预测都有非常准确的密集反馈(dense reward )作为Ground Truth,单步的最优解就是全局最优解时,一般SL便能解决问题 ;反之,如果GT反馈信号存在delay问题,即当前决策的好坏由未来的某个反馈评估,则适合尝试RL。
  2. GT的标注成本过大? 1. 某些情况下,虽然可以枚举GT,但枚举空间过大 ,需要人工逐字逐句改写,但评估GT好坏的准则较为简单、可实现 ,则可以通过构建RM(准召要够),基于RL的流程逐步引导最优策略的学习。

RLHF in NLP

Natural Language Policy Optimization (NLPO) 自然语言策略优化 更大的语言模型并不意味着更服从用户意图,可能生成不真实、有毒或对用户毫无帮助的输出。这是因为最近许多大型 LM 使用的语言建模目标“从互联网预测网页上的下一个token”与“有效且安全地遵循用户的指令”的目标不同,常用的评估指标基于规则的文本生成指标 (如 BLEU 和 ROUGE),没有显式地引入人的偏好和主观意见,导致目标没对齐(objective misaligned )。
研究者尝试使用更主观的人类评价作为优化引导,基于RL去优化LLM中的alignment问题,使模型生成内容的流畅性和语法的正确性的同时,兼顾到人类对生成内容的有用性、真实性和无害性的偏好。

InstructGPT原理与训练流程

1、监督式微调LM(SFT)

2、Reward 建模(RM) 1. 注:instruct gpt实操采用6B RM,因为这样可以节省大量计算量,并发现 175B RM 训练可能不稳定,因此也不太适合用作 RL 的价值函数 2. 比较数据集收集方式:生成 C^2_K 对回复共人类打标,并将一条prompt对应的pair作为一个batch的元素。从而使得只训一个epoch时,K对比较数据只会过一次RM,进而避免模型过拟合,实验验证效果较好。 3. Loss function of RM:

3、PPO微调 LM(RL)

1. 关键概念对齐 1. 策略 (policy) :一个接受prompt并返回一系列文本 (或文本的概率分布) 的 LM 2. 行动空间 (action space) : LM 的词表对应的所有token 3. 观察空间 (observation space) :可能的输入token序列 4. 奖励函数(reward model):偏好模型和策略转变约束 (Policy shift constraint) 的结合 2. PPO-ptx与PPO的不同: 1. reward上加了约束惩罚 ,以避免策略过于发散; 2. 加了pretrain loss 以保证LM被RL之后在原始benchmark上的表现不要掉。 3. 实践体感:pretrain loss对alignment没有太大帮助(有问题欢迎指出) 3. 损失函数

\begin{aligned} \text { objective }(\phi)= & E_{(x, y) \sim D_{\pi_\phi^{\mathrm{RL}}}}\left[r_\theta(x, y)-\beta \log \left(\pi_\phi^{\mathrm{RL}}(y \mid x) / \pi^{\mathrm{SFT}}(y \mid x)\right)\right]+ \\ & \gamma E_{x \sim D_{\text {pretrain }}}\left[\log \left(\pi_\phi^{\mathrm{RL}}(x)\right)\right] \end{aligned}

RLHF主流代码库

TRLX(使用前建议确认下最新版实现方式是否有修改&&是否满足自身需求)
该代码库之前没有完全按照InstructGPT思路来,主要体现在:

  1. RM和Critic模型没有同质:在InstructGPT中,是使用RM来初始化Critic网络,SFT model初始化Actor网络;但在TRLX具体实现中,使用了SFT model同时作为Actor和Critic的初始化。 1. Tips:训练时需要注意将critic loss的权重适当加大,保证RL训练初期主要是在优化critic网络。在Critic学习到较稳定后,再学习Actor网络,从而避免前期Critic还未稳定下对Actor有优化上的太大误导。
  2. 没有加入Pretrain Loss:但实践之下没有太大的影响Policy的训练收敛性。

实践时出现的现象:

DeepSpeed-Chat
该代码库是微软官方出的,整体思路选择和InstructGPT基本一致

其他

RM训练数据的打标探索

一般从哪些角度评价一条response是“helpful/truthful/harmless”?[PUBLIC] InstructGPT: Final labeling instructions给出了标注指南

打标流程
对于每条输入指令,标签将由 3 部分组成:

  1. 打标instruction : 标记指令属性,包括PII/Tag/Closed domain/User intent is unclear等,以便构建prompt库。
  2. 打标AI 模型输出 : 对于 AI 模型的每个输出,给出 1-7 的评分+判断其是否包含暴力或色情内容等。
  3. 排序 AI 模型输出 : 您将对输出从最好到最差进行排名,包括平局。

*具体细节详见标注指南

采用人工or模型打标
因为人类打标一致性统一存在难度, 基础大模型能像人类一样标注数据吗? 一文中探索了利用模型代替人类进行打标的表现

》使用的prompt:

Question
{question}

The Start of Assistant 1's Answer
{answer_1}
The End of Assistant 1's Answer

The Start of Assistant 2's Answer
{answer_2}
The End of Assistant 2's Answer

System
We would like to request your feedback on the performance of two AI assistants in response to the user question displayed above.
Please compare the helpfulness, relevance, accuracy, level of details of their responses.
The rating[](https://zhida.zhihu.com/search?content_id=236913626&content_type=Article&match_order=1&q=rating&zd_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ6aGlkYV9zZXJ2ZXIiLCJleHAiOjE3OTExMzkxMTMsInEiOiJyYXRpbmciLCJ6aGlkYV9zb3VyY2UiOiJlbnRpdHkiLCJjb250ZW50X2lkIjoyMzY5MTM2MjYsImNvbnRlbnRfdHlwZSI6IkFydGljbGUiLCJtYXRjaF9vcmRlciI6MSwiemRfdG9rZW4iOm51bGx9.iYad3wZ4uL33Rc5Lg3PTfFPTtorS4XJ5VqgfREp4LK4&zhida_source=entity) should be from the set of 1, 2, 3, 4, 5, 6, 7, or 8, where higher numbers indicated that Assistant 2 was better than Assistant 1.
Please first output a single line containing only one value indicating the preference between Assistant 1 and 2.
In the subsequent line, please provide a brief explanation of your evaluation, avoiding any potential bias and ensuring that the order in which the responses were presented does not affect your judgment.

论文 How Far Can Camels Go? 展示了导致GPT-4 过高打分的潜在迹象: 多样性和回答的长度 问题发现小结:

更多RLHF框架

多粒度RLHF Instruct GPT的reward是response粒度的,但一段回答质量的好坏有时不是整体评估的,比如敏感词不该出现,回复中某段存在事实性错误。将reward全部delay到response尾部再给出会增加RL的学习难度。
FINE-GRAINED RLHF

多目标RLHF 由于不同场景有不同的业务目标(回答质量/安全性/业务逻辑等),方案:

  1. 解耦不同RM单独学习,然后RL时同时调用,并进行加权 1. 优:单独RM可在不同场景下复用,只需要调节RM之间的权重; 2. 缺:需要再开GPU存放更多的RM,以及gpu之间通讯同步。
  2. 多目标的打标,训rm时直接使用加权分,每个场景需要单独训练。

RLHF是必须的吗?

强化学习的短板:

  1. 基于反馈进行学习训练,可能存在“奖励破解 ”的问题,即通过卡reward设计上的漏洞,导致虽然获取更高的奖赏,但效果并没有真正的优化。
  2. 在训练过程中,代理模型需要和生成式模型进行不断交互,而这一过程可能非常耗时且效率不高 。
  3. 价值模型本身并无和人类思考模型上明显的对应 。我们脑海中并没有一个单独的打分模型,而且实际上长期维护一个固定的打分标准也非常困难。相反,我们的成长过程中价值判断的形成大部分来自每天的交互 —— 通过对相似场景的不同交互反馈的分析,我们逐渐意识到什么是会被鼓励的,什么是不允许的。

RRHF

源码链接,论文链接 1. 整体训练流程: 1. 基于prompt库,生成得到多个表现不一的回复。 2. 对多条回复进行RM inference得到具体反馈。 3. rank loss:按照反馈优劣构造对比pair作为训练数据;ft loss:选取最优回复作为训练数据。 2. 损失函数设计:

* fine-tuning loss function (sft)

* total loss

* loss function 特点分析: * 优点:rank loss function 做为一种对比学习方式和sft loss function结合,以期望达到align到最优回复的同时,拉低较差回复的生成概率。 * 缺点:但与可以细粒度奖赏的RL方式不同,这种对比学习的方式无法细粒度的区分出具体哪句话导致整体回复较差,优化方向需要模型自行根据训练数据比对分析,较不直接。

Stable Alignment

源码链接,论文链接,模型下载
讲解:10行代码媲美RLHF,用社交游戏数据训练社会对齐模型

* 中心思想:SFT 的同时,拉开最优回复和其他回复的分布 ,且加入动态margin ,迫使分数差别越大的两条回复,loss需要拉的更大

the margin between the SFT loss and the loss from lower-rated responses increases proportionally to the distance from the highest rating. This implies the model must strive harder to unlearn lower-rated responses, while simultaneously learning from the highest-rated ones. * 注意,一个mini-batch下,只有一条prompt,才能保证rating的可比性

DPO

rookiemango:天下苦RLHF久矣!来看看不同的训练方式!Direct Preference Optimization, Your Language Model is Secretly a Reward Model

小结

以上的方法其中心思想都是利用对比学习代替交互式的强化学习来拉开优劣回复的概率分布,整体思想与Generative adversarial imitation learning(NIPS 2016)的主要motivation大体相似,GAIL有给出相应的理论证明其有效性。 但是上述的方案还是按照response的粒度进行拉开好坏结果的生成分布,而无法像RL那样做进一步细粒度的优化。主要成本在于细粒度对比学习需要细粒度的改写,标注成本较大。

参考

  1. lecture16-guest.pdf
  2. [PUBLIC] InstructGPT: Final labeling instructions
  3. [External] Open LLM Leaderboard Human Labeling Instructions
  4. Can foundation models label data like humans?
  5. Let’s Verify Step by Step

发布于 2023-11-29 15:42・浙江 深度学习(Deep Learning) 自然语言处理 强化学习 (Reinforcement Learning) ​赞同 56​​5 条评论​83 ​11 ​分享 ​申请转载​ ​ 未登录用户

5 条评论 默认 最新 Yuuu Yuuu 补充一个参考链接:俞扬:DPO替代RLHF可造成多一倍的性能损失 2023-12-20 · 北京 ​回复​1 Autumn Autumn 学习了,“无法细粒度的区分出具体哪句话导致整体回复较差”,那么是不是可以人工标注出具体那一段比较差,然后用一种方式去训练模型会更好呢? 2023-11-30 · 北京 ​回复​喜欢 许婧 许婧 作者​ 嗯嗯是的,不过细粒度的标注就需要对应细粒度的rlhf。相当于从response reward回归到rl原来的step reward了,或者改为多粒度奖赏的rl。 2023-11-30 · 浙江 ​回复​喜欢 展开其他 1 条回复​ 何枝 何枝 赞赞同 2023-11-30 · 北京 ​回复​喜欢 关于作者 许婧 许婧 程序员 ​ 北京大学 数据科学硕士 回答 1 文章 1 关注者 59 ​关注她​发私信 大家都在搜 换一换 江歌妈妈发长文尘埃终将落定706 万热 中国男足 0-5 巴勒斯坦564 万热 原央视主持人阿丘回应被通报422 万热 华为与赛力斯达成新五年合作411 万热 迪拜航空确认航班发生事故400 万热 东航回应网传空姐跪地道歉327 万 王楚钦:不知道为什么就是感觉累320 万热 江苏高考作文《衬衫的价格为 9 磅 15 便士》爆火268 万 女装网店开始用防拆带了265 万 孕妇骑车别车被司机踹翻258 万

推荐阅读

强化学习和NLP 在上一篇文章讲 文字存储到大模型量化之后,本来想写多模态或者损失函数的内容,但是最近因为DeepSeek R1的原因,我又去找了之前学RL的视频,记录了点强化学习的内容。想说写下来以后就不容… 钱慕 强化学习在NLP和推荐系统中的应用简介强化学习在NLP和推荐系统中的应用简介 最AI的小...发表于平安寿险A... LSTM之父最新力作:颠倒强化学习,用监督学习解决RL问题LSTM之父最新力作:颠倒强化学习,用监督学习解决RL问题 新智元发表于AI前沿研... RL突破通用领域推理瓶颈!清华NLP实验室提出基于参考概率奖励的强化学习RLPRRL突破通用领域推理瓶颈!清华NLP实验室提出基于参考概率奖励的强化学习RLPR 青稞AI发表于青稞·论文...

想来知乎工作?请发送邮件到 jobs@zhihu.com 打开知乎App 在「我的页」右上角打开扫一扫 其他扫码方式:微信 下载知乎App 无障碍模式 验证码登录 密码登录 开通机构号 中国 +86 获取短信验证码 忘记密码 登录/注册 其他方式登录 未注册手机验证后自动登录,注册即代表同意《知乎协议》《隐私保护指引》 扫码下载知乎 App 关闭二维码