🩲二十二、强化学习-大模型
2025-5-7
| 2026-4-13
字数 阅读时长  分钟
type
Post
status
Published
password
date
May 7, 2025
slug
summary
category
人工智能
URL
tags
NLP
强化学习
LLM
icon
 
 

RHLF(PPO)

背景

强化学习基本思路

notion image
强化学习的终极目标是训练智能体(Actor)学会一套最优决策策略,使其在与环境(Env)的动态交互过程中,从初始状态出发,通过序列决策逐步行动,最终实现长期累积的奖励最大化。也就是让价值函数最大化

Actor-Critic

Actor‑Critic 架构是强化学习中一类兼具策略优化与价值评估的混合方法。该框架由两部分构成:Actor 执行策略学习并生成动作,Critic 利用时序差分等方法学习价值函数,为策略更新提供优势估计或价值反馈。
  • Actor:可以用输入一个向量 ,输出一个概率分布的神经网络来建模
  • Critic:可以用输入两个向量 ,输出一个标量的神经网络来建模 ,负责评估 Actor 当前策略的优劣,为 Actor 提供价值评估信号,指导策略更新。
Actor
Actor 的核心目标是优化参数化策略 ,最大化长期累积奖励的期望,所以Actor 的目标函数是
那么如何优化Actor呢
Critic
Critic 用于评估 Actor 当前策略的优劣,并为其提供价值评估信号以指导策略更新。我们可以利用 Critic 网络来拟合并生成上式中的
  1. 首先初始化 Critic 网络;
  1. 利用环境反馈的即时奖励与时序差分目标更新 Critic 网络,使其逐步逼近并拟合真实动作价值
    1. 其中为Critic模型的参数,为其对应的学习率。
参数更新
  1. Actor收到来自环境的状态
  1. Actor生成动作 ,然后Critic估计状态动作价值 。然后用策略迭代算法来更新Actor的参数。
    1. 环境收到 之后给出 ,和即时奖励;更新参数后的Actor用 生成 。然后通过时序差分算法更新Critic模型的参数

      原理

      目标函数

      重要性采样

      我们想要估计目标分布 下的期望,但无法直接从 采样,只能从另一个分布 采样。
      其中

      优势函数

      使用代替,表示 “在状态 s 做动作 a 比平均水平好多少”。
      💡
      好处在于,我们只需要用单个神经网络拟合状态价值函数 即可。否则,若直接按照 计算优势,则需要分别维护两个网络,一个表示状态价值 ,另一个表示动作价值 ,既增加模型复杂度,也提升训练开销。
      近似
      💡
      因为有时候无法获得,此时我们可以使用进行近似。

      置信域

      KL散度
      衡量新策略和参考策略之间的差异。KL散度的引入是为了防止新策略偏离参考策略太远,从而保持一定的稳定性。
      clip截断

      参数更新

      Actor损失函数
      其中
      Critic损失函数
      Critic预测值为,Critic的损失函数为:

      大模型中的计算流程

      1、初始化

      • 使用奖励模型(token-level)初始化Critic Model;
      • LLM初始化Actor Model以及Ref Model

      2、数据预处理

      基于prompt+response生成prob_old、prob_ref、value_old、reward数据。
      notion image

      3、奖励

      3.1、奖励值
      奖励值=-(KL散度)+奖励(reward模型输出)
      notion image
      3.2、优势函数
      💡
      此处等价于原理中的,核心原因在于不同论文的符号表达习惯存在差异:部分论文将定义为 Agent 在第步状态下执行动作所获得的奖励,而另一部分论文则将该奖励标注为,二者所指代的奖励信号完全一致,仅符号标注不同,不存在本质区别。

      4、更新Actor

      generate—>actor—>prob_new
      因为有时候无法获得,此时我们可以使用进行近似。

      5、更新Critic

      generate—>critic—>value_new
      5.1、推导
      5.2、两个网络
      一个是生成的主网络,另一个生成的目标网络;主网络的参数一直在更新,目标网络的参数每隔一段时间根据主网络更新一次。

      DPO

      其中,表示人类偏好的响应,表示人类拒绝的响应 ;是参考策略,让尽量接近是一个超参数控制偏离的程度。
      notion image

      GRPO

      1、背景

      PPO 中的值函数通常是一个与策略模型大小相当的模型这带来了显著的内存和计算负担。此外,在 LLMs 的上下文中,值函数在训练过程中被用作优势计算中的Baseline,但通常只有最后一个 token 会被奖励模型赋予奖励分数,这可能使得值函数的训练变得复杂。 为了解决这些问题,我们提出了 Group Relative Policy Optimization (GRPO),不再需要像PPO那样加入额外的价值函数近似而是直接使用多个采样输出的平均奖励作为Baseline,显著减少了训练资源的使用。
      notion image

      2、核心思想

      GRPO的核心思想是通过组内相对奖励来优化策略模型,而不是依赖传统的批评模型(critic model)。具体来说,GRPO会在每个状态下采样一组动作,然后根据这些动作的相对表现来调整策略,而不是依赖一个单独的价值网络来估计每个动作的价值。

      2.1、奖励

      通过奖励模型或者基于规则的奖励机制。

      2.2、目标函数

      其中是超参数;是参考模型;是优势值,通过每组输出对应的一组奖励计算得出:
      策略更新:根据相对优势更新策略模型的参数,增加高奖励输出的概率,减少低奖励输出的概率。同时,通过KL散度约束确保策略更新的稳定性。
      💡
      越好的,reward 就越大,对应的也越大。,简单理解就是训练模型去输出更好的output。
      2.2.1、优势函数
      衡量某个输出相对于平均输出的优劣。如果某个输出的奖励高于平均值,那么会为正,反之则为负。
      2.2.2、重要性采样
      我们想要估计目标分布 下的期望,但无法直接从 采样,只能从另一个分布 采样。
      其中是序列的优势函数,即
      2.2.3、裁剪(Clip)
      为了防止策略更新过大,从而导致训练不稳定。裁剪操作通过限制概率比的范围来确保策略更新在一个合理的范围内。
      2.2.4、KL散度
      衡量新策略和参考策略之间的差异。KL散度的引入是为了防止新策略偏离参考策略太远,从而保持一定的稳定性。
      2.2.5、损失函数
      整体目标函数结合了概率比(重要性采样)、优势函数和KL散度,旨在通过最大化这个目标函数来优化策略模型。

      3、计算流程

      notion image

      3.1、采样动作组

      对于每个输入提示,模型根据当前策略生成一组不同的输出。这些输出的多样性为后续的相对奖励计算提供了基础。

      3.2、奖励评估

      使用奖励模型对每个输出进行评分,这些评分可以基于任务的特定标准,如数学题的正确性、代码的可运行性等。

      3.3、计算相对优势

      将每个输出的奖励值进行归一化处理,得到相对优势。这一过程通过比较同一输入下的多个输出,减少了策略更新的方差。

      3.4、重要性采样

      对优势函数进行重要性采样。GRPO的重要性采样分为句子级别以及token级别两种形式
      3.4.1、token级别
      trl、deepseek math论文中使用token级别进行重要性采样。对应token的概率值相除,再乘以优势函数。
      notion image
      3.4.2、句子级别
      deepseek v3、deepseek r1论文中使用句子级别进行重要性采样。整个句子的生成概率值相除,再乘以优势函数。
      notion image

      3.5、计算KL散度

      防止新策略偏离参考策略太远,从而保持一定的稳定性。

      3.6、策略更新

      根据相对优势更新策略模型的参数,增加高奖励输出的概率,减少低奖励输出的概率。同时,通过KL散度约束确保策略更新的稳定性。
      句子级别的重要性采样
      句子级别的重要性采样

      4、trl的实现

      主要有2个模型以及1个reward函数

      4.1、数据采样

      输入2条prompt,每个prompt生成8条回答。
      notion image

      4.2、计算KL散度

      4.2.1、计算completion的生成概率
      分别使用ref_model、model计算每一个token生成概率。eos以及其后面的token对应的logps都不要。这里只演示一个model的流程,ref_model同理
      notion image
      4.2.2、计算KL散度
      使用model、ref_model 的输出概率计算KL散度(只是用compeletion输出部分)。在trl安装包里使用的是泰勒展开式,近似计算KL散度。(真实 / 参考)与 (近似 / 模型)
      泰勒展开式
      notion image

      4.3、计算reward函数

      首先将prompt和model生成的内容拼接在一起,交给reward输出分数。然后每一组计算advantages
      notion image
      4.3.1、重要性采样
      notion image

      4.4、计算loss

      1. KL散度的每个token+reward。参考
      1. 所有token进行相加得到1个标量
      notion image

      5、奖励函数

      trl开源包

      💡
      如果你有多个奖励函数,将计算为每个函数的奖励之和,如果在配置中提供了reward_weights,则计算为加权和。
      💡
      奖励函数的输入包括prompts、completions、trainer_state以及kwargs,其中kwargs包括原始数据集中的所有字段
      字段
      优化后描述
      prompts
      模型的输入提示(Prompt),即喂给大模型的问题 / 指令,为字符串列表,长度与批次大小一致,对应训练数据中的输入样本
      completions
      模型的生成输出(Completion),即大模型针对prompts生成的完整回答,为字符串列表,长度与prompts严格对齐,是奖励评分的核心依据
      trainer_state (在kwargs中)
      训练器状态对象(TrainerState),记录训练进度、步数、轮次、日志等动态信息,用于实现课程学习、奖励退火、动态权重调整等进阶训练策略
      kwargs
      扩展参数字典,包含原始数据集中除prompts/completions外的所有字段(如ground_truth标准答案、full_answer参考解析等),用于实现基于真实标签的精准奖励计算
      奖励函数示例
      完整示例
      math_reward_func输入
      • task
        • prompts
          • completions
            • kwargs
            • NLP
            • 强化学习
            • LLM
            • Loading...
              目录