强化学习 (Reinforcement Learning, RL) 作为机器学习的一个重要分支,近年来在自然语言处理 (Natural Language Processing, NLP) 领域,尤其是在大型语言模型 (Large Language Models, LLMs) 的对齐和推理能力提升方面展现出巨大的潜力。本文将深入探讨 RLNLP 中的应用,并结合实际案例,剖析如何通过 RLHF (Reinforcement Learning from Human Feedback) 等技术,克服传统微调的局限性,打造更智能、更符合人类期望的 LLMs

传统微调的局限性与RL的优势

传统微调方法主要依赖最大似然估计 (Maximum Likelihood Estimation),旨在最大化下一个token出现的概率。这种方法在某些情况下存在明显的局限性,例如:

  • 任务不匹配 (Task Mismatch): 当目标是训练 LLMs 生成有帮助且礼貌的回复时,很难通过最大似然估计有效地编码这些目标。例如,仅仅训练模型生成“谢谢”可能并不能让模型理解在什么场景下使用“谢谢”才是礼貌的,缺乏上下文理解。
  • 数据不匹配 (Data Mismatch): 训练数据可能包含不希望出现的实例,例如来自Reddit的评论可能包含有毒内容。直接使用这些数据进行训练,模型很容易学习到不良行为。
  • 暴露偏差 (Exposure Bias): 模型如果在训练时只接触到正确的回应,将缺乏处理错误的能力。这在构建基于 LLMs 的智能体时尤为重要,因为智能体需要能够从错误中恢复并学习。

RL 的引入,为解决上述问题提供了新的思路。与传统训练不同,RL 不需要现成的数据集,而是通过与环境交互,根据奖励函数 (Reward Function) 提供的反馈信号,不断优化模型策略。简单来说,RL 通过“试错”的方式,让模型学习到在特定环境下应该采取什么样的行动才能获得最大的奖励。

RL在NLP中的训练流程:Actor-Critic框架

RLLLMs 中的训练流程可以类比于 Actor-Critic 算法。LLM 扮演 Actor 的角色,负责生成文本序列;奖励函数扮演 Critic 的角色,负责评估生成的文本质量,并提供奖励信号。

具体步骤如下:

  1. 状态 (State): 将提示 (Prompt) 和已生成的文本序列作为当前状态。例如,对于聊天机器人,状态可以是用户输入的上一条信息和模型已生成的对话历史。
  2. 行动 (Action): 模型根据当前状态,选择下一个 token 生成。这对应于 Actor 的动作。
  3. 环境 (Environment): 环境接受生成的 token,将其添加到已有的文本序列中,并更新状态。
  4. 奖励 (Reward): 奖励函数评估完整文本序列的质量,并提供奖励值。这个奖励值将用于指导 Actor 优化策略。

通过不断迭代上述步骤,LLM 可以学习到生成高质量文本序列的策略,从而提高在特定任务上的表现。

NLP中常见的奖励函数:规则型与模型型

奖励函数是 RL 训练中至关重要的组成部分,它直接决定了模型学习的方向和最终表现。在 NLP 中,常见的奖励函数可以分为规则型和模型型两种。

1. 规则型奖励 (Rule-based Rewards):

当输出的某些属性可以通过代码自动检查和验证时,可以使用规则型奖励。这种奖励函数通常是一个简单的函数,接受 LLM 输出作为输入,并返回一个奖励值。

  • 输出长度: 例如,当希望模型生成特定长度的文本时,可以将输出长度作为奖励函数。例如:奖励= – abs(实际长度-目标长度)。
  • 计算问题的准确性: 当训练模型解决计算问题时,可以将答案的准确性作为奖励函数。
  • 代码测试用例通过率: 当训练模型生成代码时,可以使用代码通过的测试用例数量作为奖励函数。 比如,如果模型生成的代码能够通过所有测试用例,则奖励为1,否则为0。

案例: 假设要训练一个模型生成五行诗,可以使用以下奖励函数:

def reward_function(output):
    lines = output.split('\n')
    if len(lines) == 5:
        reward = 1
    else:
        reward = -1
    return reward

然而,仅仅使用上述目标,模型可能会通过生成五行无意义的文本来“作弊”。因此,在实际应用中,通常需要添加额外的正则化项,以避免这种“失败模式”。比如可以加一个基于预训练模型(例如BERT)的文本流畅度打分,避免模型生成一些无意义的语句。

2. 模型型奖励 (Model-based Rewards):

模型型奖励使用机器学习模型(通常是另一个 LLM)来评估输出的质量。这种方法更加灵活,可以用于评估更复杂的属性,例如安全性、礼貌性等。

模型型奖励可以分为两种类型:

  • 直接评估模型 (Direct Assessment Model): 奖励模型是一个 LLM,它将提示-输出对 (x, y) 映射到一个实数奖励值。例如,可以使用一个模型来评估输出是否安全。
  • 偏好模型 (Preference Model): 当标签不再是二元而是具有多个值(例如从 1 到 10)时,即使存在参考标准,人工标注也会变得更加困难,并且人与人之间或个人内部的不一致性也可能变得更加严重。 因此,为了收集带标签的数据,通常更容易要求标注者比较两个输出并选择更好的一个,而不是对特定输出进行评分。偏好模型接收一对输出 (chosenoutput, rejectedoutput),并训练模型为 chosenoutput 分配更高的分数,为 rejectedoutput 分配更低的分数。

案例: Anthropic 发布的 HH-RLHF 数据集就是一个用于训练偏好模型的典型数据集。该数据集包含人工标注者对模型生成的不同回复的偏好,可以用于训练一个能够评估回复质量的奖励模型。

代码示例:

以下代码展示了如何加载和使用 UltraRM-13b 奖励模型:

from transformers import LlamaForCausalLM, LlamaTokenizer
import torch

model_name = "OpenAssistant/reward-model-deberta-v3-large"
tokenizer = LlamaTokenizer.from_pretrained(model_name)
model = LlamaForCausalLM.from_pretrained(model_name).to("cuda")

def get_reward(prompt, response):
    inputs = tokenizer(prompt + response, return_tensors="pt").to("cuda")
    with torch.no_grad():
        reward = model(**inputs).logits[0,-1].item()
    return reward

prompt = "Translate to French: Hello, how are you?"
response = "Bonjour, comment allez-vous?"

reward = get_reward(prompt, response)
print(f"Reward for the response: {reward}")

RL与LLMs:文本生成及其关系

RL 中,基本构建块包括在环境中导航的智能体,具有状态 s、动作 a、奖励 r(s,a),形成马尔可夫决策过程。将此框架应用于 LLM 文本生成的上下文中,我们可以有许多不同的设置。一个例子是:

  • 状态 (State): 提示和目前为止生成的文本。或者 s_t = (x, y_{<t})
  • 行动 (Action): 生成下一个 token,或者 a_t = y_t
  • 策略 (Policy): 当前语言模型
  • 环境 (Environment): 接受生成的 token 并将其附加到现有文本
  • 奖励 (Reward): 使用奖励模型评估完整序列

或者更简单地说,我们可以设置轨迹,使其仅包括生成完整响应序列的单个动作,而不是将动作设置为生成单个token。

或者当训练 LLM 作为服务机器人工作时:

  • 行动 (Action): 可以是对应于对话轮次的每个响应
  • 环境 (Environment): 是用户的响应
  • 奖励 (Reward): 是用户确认他们在对话结束时的问题已得到解决

就像纯 RL 中的策略优化一样,训练过程的目标是学习一种策略,以最大化从环境中获得的奖励。

GRPO:通过优化推理过程提升LLM能力

文章中提到了Deepseek R1 使用 GRPO (Generative Recursive Planning with Operators) 来提升 LLM 的推理能力。GRPO 是一种将强化学习应用于 LLM 推理过程的技术。它通过定义一系列操作符 (Operators) 和奖励函数,引导 LLM 逐步构建推理过程,最终得到正确答案。

案例: 考虑一个数学推理问题:“小明有 5 个苹果,小红有 3 个苹果,他们一共有多少个苹果?”

使用 GRPO,可以定义以下操作符:

  • 提取数字 (Extract Numbers): 从文本中提取数字信息。
  • 加法 (Addition): 执行加法运算。
  • 生成答案 (Generate Answer): 生成最终答案。

奖励函数可以设置为:如果最终答案正确,则奖励为 1,否则为 0。

通过 RL 训练,LLM 可以学习到如何正确地使用这些操作符,逐步解决数学推理问题。

RLHF: 让LLM更懂你

RLHF (Reinforcement Learning from Human Feedback) 是一种利用人类反馈来训练 LLM 的方法。它通过收集人类对模型生成结果的偏好,训练奖励模型,并使用该奖励模型来指导 LLM 的训练。

RLHF 的主要步骤如下:

  1. 收集数据: 收集人类对模型生成的不同回复的偏好。例如,可以让人类比较两个不同的回复,并选择更好的一个。
  2. 训练奖励模型: 使用收集到的数据训练一个奖励模型,该模型能够预测人类对不同回复的偏好。
  3. 强化学习训练: 使用奖励模型作为奖励函数,对 LLM 进行强化学习训练。

案例: ChatGPT 就是一个典型的使用 RLHF 训练的 LLM。OpenAI 通过收集大量的人类反馈,训练了一个能够准确评估回复质量的奖励模型,并使用该奖励模型来指导 ChatGPT 的训练,使其能够生成更符合人类期望的回复。

结论与展望

强化学习 已经证明了其在增强大型语言模型的性能和灵活性方面的强大潜力,尤其是在行为与人类愿望对齐或提高推理能力等难题中。通过使用奖励函数(基于规则或基于模型),我们可以优化 LLMs 以根据传统微调难以实现的特定标准生成输出。

然而,将 RL 应用于 NLP 并非易事,从设计有效的奖励函数、避免利用到优化训练过程以使其稳定。 在即将发布的文章中,我们将更深入地探讨并更具体地探索用于训练 LLMsRL 算法。

虽然将 RL 应用于 NLP 领域仍然面临诸多挑战,例如奖励函数的设计、探索与利用的平衡、训练的稳定性等,但随着技术的不断发展,我们有理由相信,RL 将在 NLP 领域发挥越来越重要的作用,推动 LLMs 向着更加智能、更加可靠的方向发展。未来,我们期待看到更多基于 RL 的创新应用,为人类带来更加美好的智能体验。