笔记|生成模型(二十一):DAPO:从 GRPO 到大规模推理 RL 的工程实践
本文为 RL 系列的第六篇。在上几篇中我们推导了 GRPO
的核心思想并将其应用于图像生成。本文将介绍 GRPO
的工程增强版——DAPO(Decoupled Clip and Dynamic sAmpling Policy
Optimization),它是字节跳动 Seed 团队与清华 AIR 联合提出的大规模 LLM
强化学习算法,用 Qwen2.5-32B 基座模型在 AIME 2024 上达到 50 分(超过
DeepSeek-R1-Zero 的 47 分),且训练步数减少 50%。
论文:DAPO: An Open-Source
LLM Reinforcement Learning System at Scale(2025.03)
先看问题:GRPO
在大规模训练中遇到了什么?
还是用上一篇的数学题例子开场。 假设我们用 GRPO
训练一个推理模型解数学竞赛题(AIME 级别),每道题让模型生成 \(G = 16\) 个回答,然后用规则判题:对了奖励
\(+1\),错了奖励 \(-1\)。
先看一组理想情况下的训练数据:
题目
回答数
正确/错误
奖励分布
\(\s ...
笔记|生成模型(二十):Flow-GRPO 与图像生成应用(基于 Flux 的代码解析)
本文为 RL 系列第五篇。在完整梳理了从 REINFORCE 到 PPO、DPO,再到最新
GRPO 的演进路线后,我们将目光转向图像生成领域。本文将结合
flow_grpo 开源代码库,深入解析如何将 GRPO 算法应用于基于
Flow Matching 的图像生成模型(如 Flux)的微调中。
图像生成中的强化学习
先用一个例子理解为什么需要 RL。
假设你用一个 Flux 模型生成图像,给定
Prompt:"一只橘猫坐在蓝色沙发上"。模型可能生成以下几种结果:
生成结果
问题
一只白色猫坐在蓝色沙发上
颜色不对(应该是橘猫)
一只橘猫站在蓝色沙发旁边
动作不对(应该是"坐在")
一只橘猫坐在蓝色沙发上,画面清晰
完美
一只橘猫坐在蓝色沙发上,但画面模糊
质量差
传统的训练方式(Flow Matching
损失)只是让模型学会"生成看起来像训练集的图像"。但训练集里可能有模糊的、构图差的、与
Prompt 不一致的图像——模型无法区分好坏。
RL 的价值:我们训练一个"美术老师"(奖励模型,如
PickScore 或 ImageReward)来给 ...
笔记|生成模型(十九):大模型在线 RL 破局者:GRPO 算法详解
本文为系列第四篇。在了解了 PPO 的显存痛点和 DPO
的离线局限性后,我们终于迎来了目前大模型在线 RL
的最前沿破局者——GRPO(Group Relative Policy
Optimization)。本文将详细推导 GRPO 的核心思想,看它是如何优雅地丢弃
Critic 网络,实现高效的在线强化学习的。
在线 RL 的不可替代性与
Critic 的累赘
正如上一篇所言,DPO
虽然简单省显存,但它只能"死记硬背"人类给出的标准答案(离线学习)。为了让模型产生"顿悟"和自我进化,我们必须回归在线强化学习(Online
RL)。
然而,PPO 算法中的 Critic
网络(价值网络)成为了最大的绊脚石。对于百亿参数的大模型,多维护一个
Critic 意味着显存开销直接翻倍。
核心思考出发点:既然 Critic
只是为了给出一个"及格线"(基准值 \(V(s)\)),我们能不能彻底去掉 Critic
模型,用一种更简单的方法来估计这个"及格线"?
GRPO 的核心思想:矮子里拔高个
先用一个具体的数学题例子来理解。
假设大模型遇到了这道数学题(Prompt \(s\)):
...
笔记|生成模型(十八):大模型对齐的另一条路:DPO (Direct Preference Optimization)
本文为系列第三篇。在上一篇中,我们提到 PPO
算法虽然稳定,但在百亿参数大模型微调时面临着极大的显存压力(需要同时维护
Actor 和 Critic 模型)。为了解决这一痛点,斯坦福大学在 2023
年提出了一条完全不同于在线 RL 的路线——DPO。本文将简要介绍 DPO
算法,作为后续回归 RL 路线(GRPO)的对比铺垫。
PPO
的繁琐与显存危机:大模型吃不消了
先看例子:假设我们要用 RLHF
微调一个大模型,让它学会写出更好的代码。传统流程分三步:
SFT:用大量代码问答数据做监督微调——教模型"怎么写代码"。
RM:给同一道编程题生成两份代码(A 和
B),让人类标注哪份更好,训练一个"代码评审员"(奖励模型)。
RL:让模型自己去写代码,"评审员"给分,模型根据分数用
PPO 算法调整自己。
这个流程极其繁琐,且在 PPO
阶段,显存中需要同时驻留四个庞大的模型:
Actor
模型(正在训练的策略网络,即写代码的学生)
Critic 模型(价值网络,通常与 Actor
同等规模,估计代码题的"难度")
Reference 模型(冻结的 SFT
模型,防止学生 ...
笔记|生成模型(十七):信任区域与近端策略优化 (从 TRPO 到 PPO)
本文为系列第二篇。在上一篇中,我们介绍了策略梯度和 Actor-Critic
架构。然而,包括 REINFORCE
在内的所有基础策略梯度方法,都存在更新步长难以控制、训练不稳定的核心困境。本文将首先深入剖析这一不稳定性的三个层面,然后详细推导如何通过限制策略更新幅度来保证训练的单调递增,从
TRPO 的数学思想一路演进到目前大模型 RLHF(Reinforcement Learning from
Human Feedback,基于人类反馈的强化学习)的基石——PPO 算法。
关键概念回顾:Q
函数与优势函数
在深入本文之前,我们先回顾上一篇中两个最重要的概念。
动作价值函数 \(Q^\pi(s,
a)\)
衡量的不是"当前这一步动作有多好",而是"选择这个动作后,一直走完全程能拿多少分"。具体来说:在状态
\(s\) 下选择动作 \(a\),然后从下一步开始按策略 \(\pi\)
继续行动直到结束,所获得的期望累积奖励。
以面试为例(假设面试有 3 轮):\(Q^\pi(s_1,
\text{讲项目}) = \underbrace{r_1}_{\text{第1轮得分}} + \g ...
笔记|生成模型(十六):强化学习基础与策略梯度
本文为大模型对齐与强化学习系列的第一篇,主要回顾强化学习(RL)的基础概念,并严格推导策略梯度定理,从最基础的
REINFORCE 算法讲起,逐步引入 Actor-Critic 架构,为后续深入理解 PPO 和
GRPO 打下坚实的理论基础。
强化学习基础概念:从"训狗"说起
对于纯小白读者来说,理解强化学习(Reinforcement Learning,
RL)最直观的例子就是"训狗"。
智能体(Agent):就是那只狗(在 AI
中就是我们的模型)。
环境(Environment):狗所处的现实世界。
状态(State):狗当前看到的画面、听到的口令(比如你喊"坐下")。
动作(Action):狗做出的反应(比如坐下、趴下、或者跑开)。
奖励(Reward):如果狗做对了,你给它一块肉(正奖励);做错了,你呵斥它(负奖励或零奖励)。
强化学习的核心目标,就是让这只狗(模型)在不断的"尝试-犯错-获得奖励"的过程中,自己摸索出一条规律:在什么情况下,做什么动作,能吃到最多的肉。这条规律,在数学上就叫做策略(Policy)。
马尔可夫决策过程 (MDP)
强化学习问题通常被建 ...
笔记|生成模型(十五):Flux 架构解析
本文为系列第十六篇。继 Stable Diffusion 3 之后,Black Forest
Labs(由原 Stable Diffusion 核心团队创立)推出了 Flux 系列模型。Flux
同样采用了 Flow Matching 和 DiT
架构,但在细节设计上有着独特的创新,使其在图像质量和指令遵循上达到了目前的顶尖水平。本文将深入解析
Flux 的核心架构。
Flux 整体架构概览
Flux 模型的参数量达到了惊人的
12B(120亿),是目前最大的开源图像生成模型之一。它的整体流程与 SD3
类似,但在 Transformer Block 的设计上采用了混合架构。
Flux 的核心骨干网络由两部分组成:
Double Stream Blocks (双流块):类似于 SD3 的
MMDiT,文本和图像序列分别处理,但在注意力层进行交互。
Single Stream Blocks
(单流块):文本和图像序列被完全拼接在一起,作为一个统一的序列通过相同的
MLP 和注意力层。
Double Stream 与
Single Stream 的混合设计
Double Stre ...
笔记|生成模型(十四):Stable Diffusion 3 架构解析 (MMDiT)
本文为系列第十四篇。在介绍了 Flow Matching
之后,我们来看看它是如何在现代大模型中落地的。Stable Diffusion 3 (SD3)
是 Stability AI 推出的新一代图像生成模型,它不仅采用了 Flow Matching
作为训练目标,还在架构上进行了重大革新,提出了 MMDiT (Multimodal
Diffusion Transformer)。本文将深入解析 SD3 的核心架构。
从 U-Net 到 DiT 的演进
在 SD 1.5 和 SDXL 时代,扩散模型的主力骨干网络一直是 U-Net。U-Net
通过下采样和上采样结合跳跃连接,在图像特征提取上表现出色。然而,随着模型规模的扩大,U-Net
的扩展性(Scaling Law)遇到了瓶颈。
与此同时,Transformer 在自然语言处理(NLP)领域大放异彩。Peebles 和
Xie 提出的 DiT (Diffusion Transformer) 证明了
Transformer 同样可以作为扩散模型的骨干网络,并且具有更好的扩展性。
SD3 彻底抛弃了 U-Net,全面拥抱 Trans ...
笔记|生成模型(十三):Flow Matching理论与实现
论文链接:Flow
Matching for Generative Modeling
在 Stable Diffusion 3 中,模型是通过 Flow Matching
的方法训练的。从这个方法的名字来看,就知道它和 Flow-based Model
有比较强的关联,因此在正式开始介绍这个方法之前先交代一些 Flow-based
Model 相关的背景知识。
Flow-based Models
Normalizing Flow
Normalizing Flow
是一种基于变换对概率分布进行建模的模型,其通过一系列离散且可逆的变换实现任意分布与先验分布(例如标准高斯分布)之间的相互转换。在
Normalizing Flow
训练完成后,就可以直接从高斯分布中进行采样,并通过逆变换得到原始分布中的样本,实现生成的过程。
从这个角度看,Normalizing Flow 和 Diffusion Model
是有一些相通的,其做法的对比如下表所示。从表中可以看到,两者大致的过程是非常类似的,尽管依然有些地方不一样,但这两者应该可以通过一定的方法得到一个比较统一的表示。
模型 ...
笔记|生成模型(十二):Normalizing Flow理论与实现
Normalizing
flow(标准化流)是一类对概率分布进行建模的工具,它能完成简单的概率分布(例如高斯分布)和任意复杂分布之间的相互转换,经常被用于
data generation、density estimation、inpainting 等任务中,例如 Stability
AI 提出的 Stable Diffusion
3 中用到的 rectified flow 就是 normalizing flow 的变体之一。
为了便于理解,在正式开始介绍之前先简要说明一下 normalizing flow
的做法。如上图所示,为了将一个高斯分布 \(z_0\) 转换为一个复杂的分布 \(z_K\),normalizing flow 会对初始的分布
\(z_0\)
进行多次可逆的变换,将其逐渐转换为 \(z_K\)。由于每一次变换都是可逆的,从 \(z_K\) 出发也能得到高斯分布 \(z_0\)。这样,我们就实现了复杂分布与高斯分布之间的互相转换,从而能从简单的高斯分布建立任意复杂分布。
对 diffusion models 比较熟悉的读者可能已经发现了,这个过程和
diffusi ...