> 技术文档 > DPO与PPO:强化学习优化算法通俗解析

DPO与PPO:强化学习优化算法通俗解析


DPO(DirectPreferenceOptimization)

是一种直接优化偏好数据的强化学习算法,主要用于语言模型微调。以下是其核心流程

特点

监督微调过程

没有策略采样,没有强化学习交互过程

针对这个问题,计算模型生成优选和劣选答案的概率(生成隐式奖励)

数据准备

收集偏好数据集D={(x,yw,yl)},其中x是输入,yw是优选回答,yl是劣选回答。

模型初始化

使用预训练语言模型πref作为参考模型,初始化待优化策略πθ

损失函数设计

目标是最小化以下损失函数:

  1. 优化过程
    • 通过梯度下降更新πθ,无需显式奖励模型或强化学习循环。
    • 直接利用偏好数据调整策略模型输出概率的比值。
  2. 输出结果
    • 最终得到优化后的策略模型πθ,其生成结果更符合人类偏好。

PPO(ProximalPolicyOptimization)

特点

是RLHF中用于策略优化的核心算法

通过概率比裁剪避免破坏性的大幅度更新

以下是PPO算法单轮迭代中轨迹数据处理与函数计算的完整逻辑流程说明,严格按实际计算顺序展开。

---

1.轨迹数据收集

环境交互

当前策略π_θ控制智能体在环境中执行动作,产生原始数据流

记录字段

-`s_t`:当前状态(环境返回)

-`a_t`:执行动作(策略网络采样结果)

-`r_t`:即时奖励(环境反馈)

-`s_{t+1}`:下一状态(环境返回)

-`done`:终止标志(环境反馈)

-`log_prob`:动作对数概率(策略网络输出)

-`value`:状态价值估计(价值网络输出)

可以理解为:

  1. 状态(st):当前已生成的token序列(上下文)
  2. 动作(at):策略模型πθ输出的下一个token(从词表采样)
  3. 奖励(rt):完整序列生成后由奖励模型计算(非逐token)
  4. 状态转移:将at追加到st构成st+1

关键特性

-必须完整收集一个episode的连续轨迹

-数据仅来自当前策略(on-policy特性)

示例:原始1000条问答数据会1:1对应生成1000条轨迹数据。每条轨迹包含:

  • 状态(问题文本)
  • 动作(模型生成的答案)
  • 奖励(人工或自动评分)
  • 优势估计(通过回报计算得出)
  • 旧策略的动作概率(log_probs_old)

轨迹数据示例

标准RL设定(如游戏控制):

    1. 每个动作a_t都对应即时环境反馈r_t
    2. 轨迹数据:(s0,a0,r0,s1,a1,r1,...)(s0,a0,r0,s1,a1,r1,...)

NLP适配设定(RLHF典型实现):

    1. 仅在序列终止时获得延迟奖励R(由奖励模型计算)
    2. 轨迹数据形式:(s0,a0,0,s1,a1,0,...,sT,R)(s0,a0,0,s1,a1,0,...,sT,R)
    3. 实现时需要将最终奖励R分配给所有时间步(通过折扣因子γ调节)

2.优势函数计算

输入数据

-轨迹中的`rewards`序列、`values`序列、`dones`序列

  • V(s_t)来自旧价值网络的前向推理
  • δ_t的计算需要r_tV(s_t)V(s_{t+1})三者的对齐

计算阶段

1.TD残差(δ_t)

-公式:`δ_t=r_t+γ*V(s_{t+1})*(1-done)-V(s_t)`

-物理意义:当前步的即时奖励与价值预测误差

-数据依赖:

-`V(s_t)`:旧价值网络对当前状态的估值

-`V(s_{t+1})`:旧价值网络对下一状态的估值

2.GAE优势(A_t)

-公式:`A_t=Σ(γλ)^lδ_{t+l}`(从t时刻向后加权求和)

-作用:平衡偏差与方差,λ=0时退化为TD误差

-计算方向:必须从轨迹末端向前逆向计算

---

3.策略函数更新

输入数据

-旧动作概率`log_probs_old`(轨迹记录值)

-新动作概率`log_probs_new`(当前策略网络重计算值)

-优势值`A_t`(上一步计算结果)

核心计算

1.概率比(r_t)

-公式:`r_t=exp(log_probs_new-log_probs_old)`

-作用:量化新旧策略差异

2.裁剪损失

-公式:`L=-min(r_t*A_t,clip(r_t,1±ε)*A_t)`

-关键参数:ε通常取0.1~0.3,强制限制策略更新幅度

---

4.价值函数更新

输入数据

-优势值`A_t`(已计算)

-旧价值估计`V(s_t)`(轨迹记录值)

计算流程

目标回报(R_t)

R_t作为Q(s_t,a_t)的无偏估计

-公式:`R_t=A_t+V(s_t)`

-物理意义:优势函数修正后的实际回报估计

价值损失

-公式:`L=(R_t-V_new(s_t))^2`

-优化目标:使价值网络预测逼近修正后的回报

5.联合优化

总损失函数

-总损失=策略损失+c1×价值损失-c2×策略熵

-熵项`H(π)`:策略网络输出动作分布的熵(自动计算)

更新逻辑

-对同一批轨迹数据执行K次小批量更新

-每次更新前需重新计算`log_probs_new`(因策略网络参数变化)

PPO的K次更新是单批数据下的策略精炼,而非重新生成数据的epoch循环

基于1000条原始问答数据的PPO训练过程总结

1.初始化阶段

-加载固定的1000个问题作为状态集

-使用初始策略为每个问题生成第一个答案(动作)

-计算每个问答对的奖励值和优势估计

-记录初始策略生成这些答案的动作概率

2.策略优化循环

-进行K次策略更新迭代(通常3-10次):

a.用当前策略重新计算这1000个答案的生成概率

b.计算新旧策略的概率比

c.应用PPO裁剪机制限制更新幅度

d.结合优势估计计算策略梯度

e.执行梯度下降更新策略参数

3.数据刷新阶段

-用更新后的策略重新为1000个问题生成新答案

-评估新答案的奖励和优势

-选择保留机制(完全替换或混合新旧答案)

4.重复训练

-回到步骤2继续优化

-持续迭代直至模型性能收敛

整个过程通过\"固定问题+动态答案\"的机制,在有限数据上实现高效策略优化。

共执行n次数据刷新,每次刷新后利用相同数据执行k次更新,总更新次数为n×k。

n_epochs=5#数据刷新次数

k_updates=3#每次刷新的更新次数

for_i in range(n_epochs):

#1.数据收集(刷新)

trajectories=collect_data(policy)

#2.使用相同数据执行k次更新

for_i in range(k_updates):

loss=compute_ppo_loss(trajectories)

optimizer.step(loss)

总结

DPO(Direct Preference Optimization)是一种直接基于偏好数据优化语言模型的算法,其核心流程包括:收集带偏好的问答数据集,初始化参考模型,通过概率比值计算隐式奖励,并直接优化策略模型。相比传统RLHF方法,DPO省去了强化学习交互和奖励模型训练环节。PPO(Proximal Policy Optimization)则是RLHF中的核心优化算法,通过概率比裁剪控制更新幅度。其完整流程包含:轨迹数据收集、优势函数计算、策略更新和价值函数更新等步骤,采用\"固定问题+动态答案\"机制实现高效策略优化。两种算法各具优势,为语言模型对齐人类偏好提供了不同解决方案。

宣传结语

在数字化转型的大潮中,小程序、人工智能和CRM系统正成为企业提升竞争力的关键利器。我们工作室专注于这些领域,为中小企业提供定制化的技术解决方案,助力业务升级与创新。

我们的核心服务包括:

  • 小程序开发:提供微信等平台的小程序定制开发,让用户无需下载安装即可使用您的服务。

  • 人工智能智能体:开发基于AI的智能系统(如智能客服、业务自动化助手),提升业务自动化能力和用户体验。

  • CRM客户管理系统开发:搭建高效可靠的CRM系统,实现客户数据的集中管理与深入分析,助力精细化运营。

我们的团队经验丰富,注重代码质量和系统稳定性,曾为多个行业提供数字化解决方案。在每一个项目中,我们都以专业严谨的态度确保按时、高质量交付。

如果您正寻求数字化转型的技术支持,请随时联系我。

电话:13047605699

邮箱:1768225144@qq.com

我们将竭诚为您提供最适合的技术方案,期待与您合作!