dppo、drpo、ode、sde、flowmatching算法
dppo、drpo、ode、sde、flowmatching算法任务
背景:强化学习(Reinforcement Learning, RL) 、大模型、多模态
算法 :
dppo
drpo
ode
sde
flowmatching
1、听懂迭代后算法
2、概念得懂
总结与关联性
| 概念 | 核心思想 | 典型应用场景 |
|---|---|---|
| DPPO | 分布式策略优化 + 扩散模型生成连续动作 | 机器人控制、自动驾驶、Sim2Real |
| DRPO | 直接优化用户偏好,无需奖励函数 | 对话系统、推荐系统、多模态对齐 |
| ODE | 建模连续动态系统(无噪声) | 物理仿真、生物动力学、工程控制 |
| SDE | 建模带噪声的动态系统(如扩散模型) | 金融数学、图像生成、物理系统 |
| Flow Matching | 学习连续映射路径生成数据 | 图像生成、语音合成、数据分布建模 |
学习建议
- 实践优先:尝试用 PyTorch/TensorFlow 实现 Flow Matching 或 DPPO 的简化版本。
- 数学基础:复习 ODE/SDE 的数值解法(如 Runge-Kutta、Euler 方法)。
- 论文阅读:精读 PPO、DRPO 和扩散模型的原始论文(如 DDPM、Score SDE)。
- 工具链:熟悉 MATLAB(ODE45)、Python(Scipy ODE 解算器)和深度学习框架。
1. DPPO
分布式 近端 策略 优化 (Distributed Proximal Policy Optimization)
核心思想
总结: DPPO 分布式近端策略优化算法,适用于 自动驾驶(路径规划、避障)。
DPPO 是 分布式近端策略优化算法,结合了 PPO(Proximal Policy Optimization-近端策略优化) 的稳定策略更新机制和 扩散模型 的生成能力,用于连续控制任务(如机器人、自动驾驶)。
- 目标:通过分布式并行训练加速策略优化,同时利用扩散模型生成连续动作。
- 关键技术:
- PPO 稳定性:限制策略更新幅度(裁剪机制),避免策略崩溃。
- 扩散模型:生成连续动作,解决离散动作空间的量化误差问题。
- 应用场景:
- 机器人控制(如机械臂、行走机器人)。
- 自动驾驶(路径规划、避障)。
- 模拟到现实迁移(Sim2Real)。
关键公式
$$
\text{PPO 目标函数} = \mathbb{E}t\left[ \min\left( \frac{\pi(a|s)}{\pi_{\text{old}}(a|s)} A_t, \text{clip}\left( \frac{\pi_{\theta}(a|s)}{\pi_{\text{old}}(a|s)}, 1-\epsilon, 1+\epsilon \right) A_t \right) \right]
$$
参考网页 :b站- PPO/DPPO,2017年出的算法
文章 : 个人网页-DPPO
文章: 知乎-ppo、dppo
1.2 、PPO 目标函数公式 & 举例
$$
L^{CLIP}(\theta) = \mathbb{E}_t\left[ \min\left( r_t(\theta) \cdot A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \cdot A_t \right) \right]
$$
其中:
- 1、新策略与旧策略的概率比 : $$ r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} $$ :
- 2、优势函数(Advantage),表示当前动作 $$ a_t $$ 在状态 $$ s_t $$ 下的相对价值(如 GAE 计算): $$ A_t $$
- 裁剪参数(通常取 0.1~0.3),限制策略更新的幅度。
公式的核心思想
- 策略更新限制:
- 如果 $ r_t(\theta) $ 超出 $ [1-\epsilon, 1+\epsilon] $ 范围,裁剪后取边界值。
- 通过取最小值操作,避免策略更新过大(防止崩溃)。
- 两种情况:
- 当 $ A_t > 0 $(好动作):限制 $ r_t(\theta) $ 不超过 $ 1+\epsilon $。
- 当 $ A_t < 0 $(坏动作):限制 $ r_t(\theta) $ 不低于 $ 1-\epsilon $。
举个例子:手动计算 PPO 目标函数
假设:
- 当前策略概率 $ \pi_\theta(a|s) = 0.6 $,旧策略概率 $ \pi_{\theta_{\text{old}}}(a|s) = 0.5 $。
- 优势值 $ A_t = 1.0 $。
- 裁剪参数 $ \epsilon = 0.2 $。
步骤 1:计算概率比 $ r_t(\theta) $
$$
r_t(\theta) = \frac{0.6}{0.5} = 1.2
$$
步骤 2:计算裁剪后的值
- 裁剪范围为 $ [1-\epsilon, 1+\epsilon] = [0.8, 1.2] $。
- 因为 $ r_t(\theta) = 1.2 $ 恰好等于上限 $ 1+\epsilon $,所以裁剪后仍为 1.2。
步骤 3:计算目标函数的两个项
- 原始项:$ r_t(\theta) \cdot A_t = 1.2 \times 1.0 = 1.2 $
- 裁剪项:$ \text{clip}(r_t(\theta)) \cdot A_t = 1.2 \times 1.0 = 1.2 $
步骤 4:取最小值
$$
\min(1.2, 1.2) = 1.2
$$
最终结果
$$
L^{CLIP}(\theta) = 1.2
$$
另一个例子:当 $ r_t(\theta) $ 超出裁剪范围
假设:
- $ \pi_\theta(a|s) = 0.7 $,$ \pi_{\theta_{\text{old}}}(a|s) = 0.5 $,$ A_t = 1.0 $,$ \epsilon = 0.2 $。
步骤 1:计算概率比
$$
r_t(\theta) = \frac{0.7}{0.5} = 1.4
$$
步骤 2:裁剪后的值
- 裁剪范围 $ [0.8, 1.2] $,所以 $ \text{clip}(1.4) = 1.2 $。
步骤 3:计算两个项
- 原始项:$ 1.4 \times 1.0 = 1.4 $
- 裁剪项:$ 1.2 \times 1.0 = 1.2 $
步骤 4:取最小值
$$
\min(1.4, 1.2) = 1.2
$$
最终结果
$$
L^{CLIP}(\theta) = 1.2
$$
关键总结
- 裁剪的作用:当 $ r_t(\theta) $ 超出允许范围时,限制其最大值(好动作)或最小值(坏动作)。
- 优势函数的作用:
- $ A_t > 0 $:增加好动作的概率(鼓励策略向好方向更新)。
- $ A_t < 0 $:减少坏动作的概率(抑制策略向差方向更新)。
- 实际训练中的期望值:PPO 会通过多次采样(mini-batch)近似期望值 $ \mathbb{E}_t $。
代码实现示例(PyTorch)
import torch
def ppo_loss(ratio, advantages, epsilon=0.2):
surr1 = ratio * advantages # 原始项
surr2 = torch.clamp(ratio, 1 - epsilon, 1 + epsilon) * advantages # 裁剪项
loss = -torch.min(surr1, surr2).mean() # 取最小值并求负(优化目标)
return loss
# 示例数据
ratio = torch.tensor([1.2]) # 概率比
advantages = torch.tensor([1.0]) # 优势值
# 计算损失
loss = ppo_loss(ratio, advantages)
print("PPO Loss:", loss.item())
扩展思考
- 如果 $ A_t < 0 $:假设 $ A_t = -1.0 $,$ r_t(\theta) = 0.9 $,$ \epsilon = 0.2 $,则:
- 原始项:$ 0.9 \times (-1.0) = -0.9 $
- 裁剪项:$ \text{clip}(0.9) = 0.9 $,所以裁剪后为 $ 0.9 \times (-1.0) = -0.9 $
- 最终取最小值 $ -0.9 $,目标函数为 $ -0.9 $(因为 $ A_t < 0 $ 时,裁剪限制 $ r_t(\theta) \geq 0.8 $,避免过度惩罚坏动作)。
希望这个讲解和例子能帮助你理解 PPO 目标函数的计算逻辑!
2. DRPO
DRPO直接偏好优化( Direct Preference Optimization) ,多模态任务(如图像-文本生成对齐)
核心思想
DRPO 是 直接偏好优化算法,专注于通过用户反馈优化模型输出(如大语言模型),无需显式构造奖励函数。
- 目标:直接优化用户对模型输出的偏好(如对话质量、推荐结果)。
- 关键技术:
- 人类反馈数据:通过问卷调查、A/B 测试等收集用户偏好。
- 偏好损失函数:直接优化模型输出与用户偏好的匹配度。
- 应用场景:
- 对话系统(如 Chatbot 的回复质量优化)。
- 推荐系统(用户点击率优化)。
- 多模态任务(如图像-文本生成对齐)。
优势
- 无需手动设计奖励函数,直接对齐用户需求。
- 在基础模型上超越 SFT/RLHF 微调模型性能。
3. ODE(Ordinary Differential Equation)
核心思想
ODE(常微分方程)是描述 连续动态系统 的数学工具,广泛用于物理、工程和生物学建模。
- 形式:$$
\frac{dy}{dt} = f(t, y)
$$ - 数值解法:
- Euler 方法:简单但精度低。
- Runge-Kutta 方法(如 ODE45):高阶方法,适用于复杂系统。
- 应用场景:
- 物理仿真(自由落体、简谐振动)。
- 生物动力学(药物代谢、细胞分裂)。
- 工程控制(PID 控制器设计)。
MATLAB 示例(ODE45)
% 定义 ODE
function dydt = myODE(t, y)
dydt = -2 * y + sin(t);
end
% 调用 ODE45 求解
[t, y] = ode45(@myODE, [0 10], 1);
plot(t, y);
xlabel('Time');
ylabel('Solution y');
4. SDE(Stochastic Differential Equation)
核心思想
SDE(随机微分方程)是 包含随机项的微分方程,用于建模 带有噪声的动态系统。
- 形式:$$
dX_t = \mu(X_t, t)dt + \sigma(X_t, t)dW_t
$$- $ \mu $:漂移项(Drift Term)。
- $ \sigma $:扩散项(Diffusion Term)。
- $ dW_t $:Wiener 过程(布朗运动)。
- 应用场景:
- 金融数学:期权定价(Black-Scholes 模型)。
- 扩散模型:图像生成(如 DDPM、NCSN)。
- 物理系统:粒子布朗运动、热传导噪声建模。
扩散模型中的 SDE 示例
- 正向加噪过程(VP-SDE):$$
dX_t = -\frac{1}{2}\beta(t)X_t dt + \sqrt{\beta(t)}dW_t
$$ - 反向去噪过程:$$
dX_t = \left[ \frac{1}{2}\beta(t)X_t + \sigma(t)^2 \nabla \log p_t(X_t) \right] dt + \sigma(t)d\tilde{W}_t
$$
5. Flow Matching(流匹配)
核心思想
Flow Matching 是一种 生成模型 方法,通过学习从随机噪声到目标数据的 连续映射路径,生成高质量样本。
- 核心原理:
- 输入随机噪声(如高斯分布),逐步调整其分布,使其逼近目标数据分布。
- 避免直接学习随机到目标的映射(容易坍缩到均值),而是通过 逐步修正 实现生成。
- 关键技术:
- 映射路径建模:使用神经网络学习从时间 $ t=0 $(噪声)到 $ t=1 $(目标数据)的连续变换。
- 损失函数:最小化路径上的梯度差异(如 KL 散度或 MSE)。
代码示例(简化)
import torch
# 定义映射路径
class FlowMatching(torch.nn.Module):
def forward(self, x, t):
return self.net(torch.cat([x, t], dim=-1))
# 训练流程
optimizer = torch.optim.Adam(model.parameters())
for x in dataloader:
t = torch.rand(x.shape[0]) # 随机时间步
noise = torch.randn_like(x)
x_t = (1 - t) * x + t * noise # 插值
pred = model(x_t, t)
loss = torch.mean((pred - (x - noise)) ** 2) # MSE 损失
loss.backward()
optimizer.step()
浙公网安备 33010602011771号