专栏名称: 数据STUDIO
点击领取《Python学习手册》,后台回复「福利」获取。『数据STUDIO』专注于数据科学原创文章分享,内容以 Python 为核心语言,涵盖机器学习、数据分析、可视化、MySQL等领域干货知识总结及实战项目。
目录
相关文章推荐
51好读  ›  专栏  ›  数据STUDIO

LLM强化学习算法演进之路:Q-Learning->DQN->PPO->DPO等

数据STUDIO  · 公众号  ·  · 2025-03-06 11:30

正文

请到「今天看啥」查看全文



本文中各方法的分布:

位置 方法1 方法2 方法3 方法4 方法5 方法6 方法7
第一章节 MC TD QL DQN PG AC PPO
第二章节 LLM的PPO





第三章节 LLM的DPO





第四章节 LLM的GRPO





一、强化学习理论基础

  • Q值:代表智能体选择某个动作后,一直到最终状态奖励总和的期望, Q值评价动作
  • V值:代表智能体在这个状态下,一直到最终状态的奖励总和的期望, V值评价状态
图1-1解:Q到V,V到Q,V到V之间的转换——强化学习的理论核心,建议常看常新,参考:https://zhuanlan.zhihu.com/p/109498587
图1-1解:Q到V,V到Q,V到V之间的转换——强化学习的理论核心,建议常看常新,参考:https://zhuanlan.zhihu.com/p/109498587

如何在不知道真实环境分布的情况下估算V值,已经诞生了多种方法,大体归纳为基于价值、基于策略两种:

1.1)基于价值的方法

代表:MC(Monte-Carlo,蒙特卡洛)方法、TD(Temporal-Difference,时序差分),基于TD的变体包括SARSA、Q-learning、DQN)

MC方法

  • 思路: 通过样本回合(episode,也叫trajectory,即轨迹)的完全体验来估计状态值函数V(s)。具体来说,它使用从一个状态开始到回合结束的真实收益来进行估计。
  • 缺点: 算法要求采样必须走到最终状态;面对巨大的状态空间,小概率能到达最终状态。

TD方法

  • 思路: 不必等待一个完整的回合结束才能进行更新,而是可以在每个时间步进行增量更新。
  • 延展方法: SARSA、Q-learning、DQN。
图1-2解:从MC到TD。MC的注意点:里面的V(s)实际是V(S_t);更新状态值函数实际是加权增量平均,即V=(1-α)V+αG=V+α(G-V),有时候α=1/N(s),N表示状态s被访问的次数,此时根据大数定理,最终的V会是G的期望值。
图1-2解:从MC到TD。MC的注意点:里面的V(s)实际是V(S_t);更新状态值函数实际是加权增量平均,即V=(1-α)V+αG=V+α(G-V),有时候α=1/N(s),N表示状态s被访问的次数,此时根据大数定理,最终的V会是G的期望值。

TD方法的变体之——SARSA(State-Action-Reward-State-Action)

  • 思路: SARSA算法更新的是状态-动作价值函数(Q值),通过五元组(当前状态S、当前动作A、收到的奖励R、下一个状态S’、下一个动作A’)来进行学习。SARSA被称为“on-policy”算法,因为它更新的Q值是基于当前策略选择的动作。

TD方法的变体之——Q-learning

  • 思路: 采用Q表(Q-table)来存储状态-动作对的价值。通过不断更新Q表来学习一个最优策略,使得Agent能够在环境中最大化累积奖励。这是一种“off-policy”算法,即更新Q值时不依赖于当前执行的策略。它使用贪心策略来更新Q值,即选择下一个状态中的最大Q值进行更新。Q表是一个二维表格,其中:行代表环境中的所有可能状态s;列代表在每个状态下所有可能的动作a;表中的每个元素 Q(s,a)表示在状态s采取动作a后的预期累积奖励。
  • 缺点: 它只能解决离散的、有限状态、有限动作空间的任务。
  • 选取action的策略——greedy-epsilon(又叫ε-greedy) :即以概率1−ε选择当前已知的最优动作(即利用)。这通常是基于当前的Q值或策略评估选出的动作。以概率ε随机选择一个动作(即探索),以确保算法有机会尝试不同的动作,可能发现更优的策略。其实从下图中Q-learning的公式就可以看出,即形式如Q=(1-α)Q+αG=Q+α(G-Q)。
图1-3解:SARSA和Q-learning方法公式对比。上)SARSA方法的公式=TD的公式+替换V为Q;下)Q-learning方法的公式。
图1-3解:SARSA和Q-learning方法公式对比。上)SARSA方法的公式=TD的公式+替换V为Q;下)Q-learning方法的公式。

Q-learning方法的改进版本之——DQN(Deep Q-Network)

  • 思路: 使用神经网络解决Q-learning中 状态不连续 的问题。在DQN中,Q值函数不是用表格存储,而是用神经网络来近似。神经网络Q(s,a;θ)参数化Q值函数,其中θ是神经网络的参数。计算细节包括:经验回放(Experience Replay)、目标网络(Target Network)、损失函数(Loss)等,如下图。
图1-4解:DQN的算法流程——选择动作+存储经验
图1-4解:DQN的算法流程——选择动作+存储经验
图1-5解:DQN的算法流程——训练流程。注:一开始记忆库memory中没有经验,也没有训练evaluate network,积累了一定数量的经验之后,再开始训练evaluate network。
图1-5解:DQN的算法流程——训练流程。注:一开始记忆库memory中没有经验,也没有训练evaluate network,积累了一定数量的经验之后,再开始训练evaluate network。

DQN代码学习:https://github.com/louisnino/RLcode/blob/master/tutorial_DQN.py

1.2)基于策略的方法

代表:PG(Policy Gradient,策略梯度)、AC、PPO(Proximal Policy Optimization,近端策略优化)

PG方法

  • 思路: 利用reward奖励直接对选择行为的可能性进行增强和减弱,好的行为会被增加下一次被选中的概率,不好的行为会被减弱下次被选中的概率。
  • 缺点: 数据使用效率低(每次收集的数据只用一次就丢弃了,即on-policy);采用蒙特卡洛的思想,每次要走到最后,太慢了。
图1-6解:PG和前面几种方法的区别
图1-6解:PG和前面几种方法的区别
图1-6解:PG中期望Reward的计算
图1-6解:PG中期望Reward的计算
图1-7解:PG中最大化期望Reward的计算
图1-7解:PG中最大化期望Reward的计算
图1-8解:PG中最大化期望Reward的计算-梯度计算细节推导
图1-8解:PG中最大化期望Reward的计算-梯度计算细节推导

PG代码见https://github.com/louisnino/RLcode/blob/master/tutorial_PG.py,其执行逻辑梳理如下:

图1-9解:PG代码执行逻辑

Actor-Critic(AC)方法

  • 思路: 为了解决PG中采用蒙特卡洛必须走到最后的状态才计算G值,改为TD的思路。但是,PG需要计算G值,那么在TD中,我们应该怎样估算每一步的Q值呢?即神经网络。 AC采用两个神经网络:Actor网络负责对网络输入状态S输出策略&选择动作,Critic网络负责计算每个动作的分数。
  • 缺点: 仍然是一个在线策略,即on-policy。
图1-10解:AC算法的由来
图1-10解:AC算法的由来

AC代码学习见https://github.com/louisnino/RLcode/blob/master/tutorial_AC.py,其执行逻辑梳理如下:

图1-11解:AC代码执行逻辑
图1-11解:AC代码执行逻辑

PPO方法

概念:从离散问题到连续问题

  • 用AC来解决连续型控制问题。方法是输入avg和var,构造一个正态分布来表示策略。
  • avg表示平均数,也就是整个正态分布的中轴线,avg的变化,表示整个图像向左右移动。
  • var表示方差,当sigma越大,图像越扁平;sigma约小,图像越突出,而最大值所在的位置,就是中轴线。
  • 如何实现:神经网络可以直接输出mu和sigma,就能获得整个策略的概率密度函数。

概念:两种策略

  • 行为策略:不是当前策略,用于产出数据。
  • 目标策略:会更新的策略,是需要被优化的策略。
  • 如果两个策略是同一个策略,那么称为On Policy=在线策略;如果不是同一个策略,那么称为Off Policy=离线策略。

概率:重要性采样(Important-sampling

  • 目标:用行为策略获取的数据,能够更新目标策略,把AC从在线策略,变成离线策略。
  • 含义:目标策略出现动作a的概率 除以 行为策略出现a的概率。

概念:N步更新

  • 之前的TD叫做TD(0),而N步更新为TD(n),可以看成TD(0)其实是TD(n)的一种特殊情况。
  • 实际上我们只需要计算最后的V(s'),根据这个估算的V(s'), 我们反推经过的所有state的V值。这个其实和PG估算G的过程是一样的,只不过我们并不需要走到最后,而是中途截断,用网络估算。
表1-1解:PPO给出的算法流程
表1-1解:PPO给出的算法流程

PPO代码学习见https://github.com/louisnino/RLcode/blob/master/tutorial_PPO.py,其执行逻辑梳理如下:

图1-12解:整体代码流程
图1-12解:整体代码流程

训练流程的1-4步代码解读分别见下面四幅图:

图1-13解:PPO代码1-初始化环境和PPO
图1-13解:PPO代码1-初始化环境和PPO
图1-14解:PPO代码2-收集轨迹数据
图1-14解:PPO代码2-收集轨迹数据
图1-15解:PPO代码3-计算折扣回报+策略迭代入口
图1-15解:PPO代码3-计算折扣回报+策略迭代入口
图1-16解:PPO代码4-策略迭代优化细节(即ppo.update()细节)
图1-16解:PPO代码4-策略迭代优化细节(即ppo.update()细节)

快速背诵:收(收集轨迹数据)、计(计算折扣回报)、策(策略迭代优化)

1.3)PG->AC->TRPO->PPO->DPO方法演进公式对比

表1-2解:PG到AC到TRPO到PPO到DPO演进公式对比
表1-2解:PG到AC到TRPO到PPO到DPO演进公式对比

二、LLM的PPO模型

首先,看下PPO算法的四个模型:

模型名 解释&目标
Actor模型 解释:待训练的策略模型
目标:生成/采样Experience数据。
Reference模型 解释:通常为初始的Actor模型;
目标:防止"Actor模型在训练过程中学习的分布"走偏。
Critic模型 解释:待训练的判别模型(或称为价值模型);
目标:对每个状态打分,有时用Reward模型热启。
Reward模型 解释:通常指ORM(Outcome Reward Model);
目标:对生成的结果打分。

需要采样经验(Experience)数据的原因:

表2-1解:采样经验数据的各种原因
表2-1解:采样经验数据的各种原因

LLM中实际使用的公式:

图2-1解:LLM中PPO的公式
图2-1解:LLM中PPO的公式
图2-2解:LLM的PPO流程图解(流程来自Deepseek论文的图)
图2-2解:LLM的PPO流程图解(流程来自Deepseek论文的图)

代码参考Open_RLHF库的PPO实战:https://github.com/OpenRLHF/OpenRLHF/blob/main/openrlhf/trainer/ppo_trainer.py

三、LLM的DPO(Direct Preference Optimization)模型

  • 背景: 目前RLHF的流程太复杂,不仅需要单独训练reward模型,还需要从LLM的输出采样。
  • 优势: DPO通过理论证明,可以不需要引入reward模型,就可以完成LLM的偏好训练。实验证明,在生成情感、摘要、单论对话质量方面,DPO比基于PPO的RLHF更好。

DPO最终公式见表1-2,推导过程如下:

step1:明确目标

一个是Reward最大化,一个是positive的样本得分大于negative样本得分。因此,公式推导采用的策略是先最大化Reward,在带入"positive的样本得分大于negative样本得分"公式。

step2:表征positive的样本得分大于negative样本得分

图3-1解:DPO推导的step2,即表征positive的样本得分大于negative样本得分
图3-1解:DPO推导的step2,即表征positive的样本得分大于negative样本得分

step3:Reward最大化

图3-2解:DPO推导的step3,即引入Z(x)化简Reward最大化公式
图3-2解:DPO推导的step3,即引入Z(x)化简Reward最大化公式
图3-3解:DPO推导的step3,即求出最大的Reward
图3-3解:DPO推导的step3,即求出最大的Reward

step4:带入step2

图3-4解:DPO推导的step4,将最大的Reward带入setp2
图3-4解:DPO推导的step4,将最大的Reward带入setp2

代码参考Open_RLHF库的DPO实战:https://github.com/OpenRLHF/OpenRLHF/blob/main/openrlhf/trainer/dpo_trainer.py

四、LLM的GRPO(Group Relative Policy Optimization)模型

背景(PPO的缺点):

  • 需要训练一个与策略模型大小相当的价值模型(Critic模型),这带来了巨大的内存和计算负担;
  • 在 LLM 的上下文中,通常只有最后一个 token 会被奖励模型打分,这使得训练一个在每个 token 上都准确的价值函数变得困难。

GRPO的优势:

  • 避免了像 PPO 那样使用额外的价值函数近似,而是使用"同一问题下多个采样输出的平均奖励"作为基线。

1)优化目标

图4-1解:GRPO公式解析
图4-1解:GRPO公式解析

2)优势函数计算

图4-2解:GRPO的优势函数计算
图4-2解:GRPO的优势函数计算

五、参考文献

  • 绯红之刃:强化学习公式理解
  • 芒果草莓:DQN基本概念和算法流程(附Pytorch代码)
  • 一辄:强化学习 | Policy Gradient | Natural PG 详细推导(1)
  • 张斯俊:如何理解策略梯度(Policy Gradient)算法?(附代码及代码解释)
  • 张斯俊:理解Actor-Critic的关键是什么?(附代码及代码分析)
  • https://zhuanlan.zhihu.com/p/13043187674
  • 张斯俊:如何直观理解PPO算法?[理论篇]
  • arXiv reCAPTCHA
  • 怪兽:详细推导DPO算法
  • Plunck:【LLM】GRPO:改进PPO增强推理能力

作者 | 假如给我一只AI

原文链接:https://zhuanlan.zhihu.com/p/20949520788



🏴‍☠️宝藏级🏴‍☠️ 原创公众号『 数据STUDIO 』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括 可戳 👉 Python MySQL 数据分析 数据可视化 机器学习与数据挖掘 爬虫 等,从入门到进阶!

长按👇关注- 数据STUDIO -设为星标,干货速递







请到「今天看啥」查看全文