硬核拆解:从 PPO 到 GRPO,一文读懂 VLA 大模型背后的强化学习魔法 🤖

你是否也曾迷失在强化学习(RL)的缩写海洋里?

PPO, SAC, DPO, GRPO, Reinforce++, CrossQ… 每一个缩写背后都是复杂的数学推导。特别是当这些算法撞上 VLA(视觉-语言-动作) 大模型时,事情变得更加令人头秃:一个原本用来写诗画画的大模型,到底是怎么学会拧瓶盖、叠衣服的?

今天,我们要拒绝“黑盒”思维。我们将从算法原理、数学公式到工程代码实现的维度,彻底拆解现代强化学习在具身智能(Embodied AI)中的落地细节。


🗺️ 一张图看懂 RL 算法版图

在深入细节前,我们先给这些算法分个类。你可以把它们想象成不同风格的“教练”:

  1. 稳健派 (On-Policy) —— PPO, GRPO
  • 特点: 边做边学,小心翼翼。
  • 应用: LLM 和 VLA 的微调(Alignment)。
  • 核心逻辑: 既然模型已经很强了(预训练过),微调时就不要改动太大,防止“灾难性遗忘”。
  1. 探索派 (Off-Policy) —— SAC, CrossQ
  • 特点: 大胆尝试,数据利用率极高。
  • 应用: 传统的机器人连续控制(关节角度控制)。
  • 核心逻辑: 机器人收集数据太慢了,所以要把每一条历史数据都榨干(Replay Buffer)。
  1. 数据派 (Offline) —— RLPD
  • 特点: 吃着碗里的(新数据),看着锅里的(旧演示)。
  • 应用: 解决冷启动问题。

🧠 核心解密:VLA 如何把“图”变成“动作”?

很多人最大的困惑是:大模型输出的是字(Token),怎么控制电机?

这就涉及到了 Action Tokenization(动作离散化)

在 VLA 模型(如 OpenVLA, RT-2)眼中,动作就是一种“外语”。

  1. 切分 (Binning): 将机械臂关节的活动范围(-180° 到 180°)切成 256 份。
  2. 扩表: 在词表中加入 <act_0><act_255> 这些特殊 Token。
  3. 推理:
  • Input: [Image] + "Put the apple in the box"
  • Output: "I see an apple." <act_128> <act_200> ...
  1. 执行: 机器人读取 Token,反查表得到角度,执行动作。

RL 的本质: 就是调整模型的参数,让它在看到苹果图片时,输出 <act_128>(抓住)的概率变大,输出 <act_0>(抓空)的概率变小。


🔍 深度拆解一:GRPO —— 抛弃 Critic 的极简主义

GRPO (Group Relative Policy Optimization) 是 DeepSeek-R1 背后的功臣,也是目前 VLA 微调的热门选择。

为什么 VLA 偏爱 GRPO?

传统的 RL 需要一个 Value Model (Critic) 来打分。但 VLA 模型动辄 7B、13B 参数,显存里装一个 Actor 就够呛了,再装一个同样大的 Critic 直接 OOM(显存溢出)。

GRPO 说:“我们不要 Critic 了,让学生们分组 PK。”

数学原理与流程

  1. 分组采样 (Group Sampling):
    对于同一个指令 ,让 VLA 生成 组不同的动作序列 。
  2. 环境打分:
    得到奖励 。
  3. 计算优势 (The Magic Math):
    它不与绝对标准比,而是与组内平均分比:
  • 直觉: 如果你的分比平均分高,优势 就是正的,模型就要强化这组动作;反之则抑制
  1. 损失函数:

结论: GRPO 用统计学代替了神经网络 Critic,省下了一半显存,训练速度飞快。


🛡️ 深度拆解二:PPO —— 带着安全绳攀岩

PPO (Proximal Policy Optimization) 是 RL 界的“白米饭”,最稳,最通用。

核心痛点

如果模型发现某个动作能拿高分,它可能会疯狂增加这个动作的概率(比如从 0.1 暴涨到 0.9)。但这很危险,因为如果那个高分是运气好得来的,模型就学偏了(Collapse)。

核心实现:Clip (截断)

PPO 的 Loss 函数里藏着一个精妙的 minclip 逻辑:

  • Ratio:
  • Clip: 强制把 Ratio 限制在 之间。

人话翻译: “我觉得这个动作好,可以多做,但这次更新最多只能让概率提升 20%。步子大了容易扯着蛋。”


🛠️ 工程实战:VLA 训练的“潜规则”

在代码实现层面(PyTorch),训练 VLA 还有几个不为人知的 Trick。

1. Shared Backbone (共享主干)

在大多数代码库(如 HuggingFace TRL)中,你不会看到独立的 Critic 网络。

  • 架构: 一个巨大的 Transformer (Llama) 作为主干。
  • Actor Head: Linear(Hidden, Vocab_Size)
  • Value Head: Linear(Hidden, 1) (如果用 PPO)
  • LoRA: 通常我们冻结主干,只训练挂在上面的 LoRA 权重,这样显存占用极低。

2. Token Masking (精准打击)

这是最容易写 Bug 的地方。
VLA 的输出包含“思考过程(英语)”和“具体动作(Action Token)”。

  • 我们只想强化动作!
  • 如果在算 Loss 时不加 Mask,RL 可能会为了最大化奖励,破坏模型的语言能力,导致它开始说胡话。
  • 代码实现:
# 只有 Action Token 的位置是 1,其他是 0
action_mask = create_mask(target_tokens) 

# 只有被 Mask 选中的 Token 才计算梯度
loss = (policy_loss * action_mask).sum() / action_mask.sum()

3. Reward 的难题

在现实世界训练 VLA,最难的不是算法,是怎么给奖励

  • 机器人摸到了苹果,谁来告诉它“摸到了”?
  • 目前最前沿的做法是 VLM as Judge:用 GPT-4o 或 Gemini 看着摄像头的视频流,当裁判给 VLA 打分。

结语

PPO 的稳健截断,到 GRPO 的去评委化创新,再到 VLA 独特的动作离散化设计,我们看到了强化学习如何一步步适应大模型时代。

如果你是 RL 新手,建议从 PPO 看起,它是地基;如果你致力于做具身智能大模型,GRPORLPD 则是你必须征服的高峰。


希望这篇文章能帮你打通 VLA 与 RL 的任督二脉! 🚀

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐