本文中各方法的分布:
位置
|
方法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
如何在不知道真实环境分布的情况下估算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的期望值。
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方法的公式。
Q-learning方法的改进版本之——DQN(Deep Q-Network)
-
思路:
使用神经网络解决Q-learning中
状态不连续
的问题。在DQN中,Q值函数不是用表格存储,而是用神经网络来近似。神经网络Q(s,a;θ)参数化Q值函数,其中θ是神经网络的参数。计算细节包括:经验回放(Experience Replay)、目标网络(Target Network)、损失函数(Loss)等,如下图。
图1-4解:DQN的算法流程——选择动作+存储经验
图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中期望Reward的计算
图1-7解: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算法的由来
AC代码学习见https://github.com/louisnino/RLcode/blob/master/tutorial_AC.py,其执行逻辑梳理如下:
图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给出的算法流程
PPO代码学习见https://github.com/louisnino/RLcode/blob/master/tutorial_PPO.py,其执行逻辑梳理如下:
图1-12解:整体代码流程
训练流程的1-4步代码解读分别见下面四幅图:
图1-13解:PPO代码1-初始化环境和PPO
图1-14解:PPO代码2-收集轨迹数据
图1-15解:PPO代码3-计算折扣回报+策略迭代入口
图1-16解:PPO代码4-策略迭代优化细节(即ppo.update()细节)
快速背诵:收(收集轨迹数据)、计(计算折扣回报)、策(策略迭代优化)
1.3)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解:采样经验数据的各种原因
LLM中实际使用的公式:
图2-1解:LLM中PPO的公式
图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样本得分
step3:Reward最大化
图3-2解:DPO推导的step3,即引入Z(x)化简Reward最大化公式
图3-3解:DPO推导的step3,即求出最大的Reward
step4:带入step2
图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公式解析
2)优势函数计算
图4-2解:GRPO的优势函数计算
五、参考文献
-
-
芒果草莓:DQN基本概念和算法流程(附Pytorch代码)
-
一辄:强化学习 | Policy Gradient | Natural PG 详细推导(1)
-
张斯俊:如何理解策略梯度(Policy Gradient)算法?(附代码及代码解释)
-
张斯俊:理解Actor-Critic的关键是什么?(附代码及代码分析)
-
https://zhuanlan.zhihu.com/p/13043187674
-
-
-
-
Plunck:【LLM】GRPO:改进PPO增强推理能力
作者 | 假如给我一只AI
原文链接:https://zhuanlan.zhihu.com/p/20949520788
🏴☠️宝藏级🏴☠️ 原创公众号『
数据STUDIO
』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括
可戳
👉
Python
|
MySQL
|
数据分析
|
数据可视化
|
机器学习与数据挖掘
|
爬虫
等,从入门到进阶!
长按👇关注- 数据STUDIO -设为星标,干货速递