openpi-0.6

最近看了openpi-0.6*相关论文,为了能更好的将学习到的知识做一次记录, 在本篇博客我将会把我对论文的理解记录下来:
① paper:π*0.6: a VLA that Learns from Experience
② code: 暂为发布

一、 模型框架

模型框架

二、整体思路

1. 先训练value模型

先用离线轨迹(o_t,\ell, a_t, r_t) 训练一个value网络{V_{\pi}}_{ref}, 打分方式:
① 中间步, 打分-1
② 最终成功步0
③ 最终失败, 基于超低的分数值-C_faile
这里的value网络如上图所示Value Function, 它则是由一个小型的VLM的网络搭建的(pre-trained VLM: SigLIP(400M) + Gemma(270M)), 该模型直接输出预测对应的分数, 这里的label标签为{V_{\pi}}_{ref}(o_t, l),value 网络(critic)的损失,在这篇论文里不是“回归一个标量”,而是把 value 当成一个分布(B 个离散 bin)来做分类,所以用的是 交叉熵(cross-entropy)损失, 即B分类

V_{\text{ref}}(o_t, \ell) \approx \mathbb{E}\left[ \sum_{k=t}^T r_k \right]

假设一个episode最多4步: t=0,1,2,3, 第4步成功结束, 根据上述的打分方式,打分轨迹的reward序列:
[r_0, r_1, r_2,r_3, r_4]=[-1, -1, -1, 0]
之后需要对reward进行归一化得到下面公式, 如下所示:
\tilde{r} = [-0.25, -0.25, -0.25, 0]
Step1: 先计算每个时刻的Monte Carlo的汇报G_t
G_t = \sum_{k=t}^T r_k

  • G_0 = -1 -1 -1 -1 + 0 = -4
  • G_1 = -1 -1 -1 + 0 = -3
  • G_2 = r_2 + r_3 + r_4 = -1 -1 + 0 = -2
  • G_3 = r_4 = 0
    所以: [G_0, G_1, G_2, G_3] = [0, -0.25, -0.5,-0.75]
    Step2: 把value离散成bins, 并训练分布式value
    为了示范, 用了5个bins(论文实际使用的是201个)
bin b 代表值 (v(b))
0 -1.00
1 -0.75
2 -0.50
3 -0.25
4 0.00

这一条轨迹里, 每个时刻的标签(离散编号):

  • t=0: G_0=-0.75 \Rightarrow R_0^B=1
  • t=1: G_1=-0.5 \Rightarrow R_1^B=2
  • t=2: G_2=-0.25 \Rightarrow R_2^B=3
  • t=3: G_3=0 \Rightarrow R_3^B=4
    训练value网络的时候, 每个时刻做一次交叉熵损失函数
    loss_t = -log p_{\phi}(V=R_{t}^B | o_t, \ell)
    Step3: 推理时从“分布”取回一个标量value
    假设value网络在t=1输出分布(softmax):
    p_{\phi}(V|o, l) = [0.05,0.10,0.60,0.20,0.05]
    取期望得到标量:
    V(o,l) = \sum_{b} p(b)v(b) =0.05(−1)+0.10(−0.75)+0.60(−0.5)+0.20(−0.25)+0.05(0)=−0.475
    直觉:最可能 bin 是 2(概率 0.60),但因为还有 0.20 的概率在 -0.25,上拉了一点,所以期望是 -0.475
    Step 4:算advantage A_{\pi ref(o_t, a_t. l)}, 最常见的:
    A(o_t, a_t, \ell) \approx G_t - V(o_t, \ell)
    在t=1时:
  • 真实Monte Carlo回报: G_1 = -0.5
  • 价值网络预测: V(o_1, \ell) = -0.475
    所以:
    A_1 \approx -0.5 - (-0.475) = -0.025
    含义:这一步的实际结果比 value 网络“预期的平均水平”稍微差一点点(所以是负的)。

再举一个会变正的情况:
假设在t=2 value网络输出更悲观(比如V(o_2, \ell)=-0.35), 但真实汇报G_2 = -0.25, 则:
A2 \approx -0.25-(-0.35) = +0.10
含义: 这一步动作比平均更赚, 明显推进任务, 但是论文作者其实作者这里pre-trainingpost-training不一样



image.png


Step5: 由advantage得到二值标签I
论文做的阈值化:
I_t = 1(A_t > \epsilon_{\ell})
假设我们取\epsilon_{\ell} = 0:

  • A_1 = -0.025 \Rightarrow I_1 = 0
  • A_2 = +0.10 \Rightarrow I_2 = 1
    这就是"improving step"。

Step6:用 I训练条件策略\pi_{ref}(\alpha|I, o, \ell)训练的时候I随机丢掉, 但是推理的时候I=1或\beta>1,β>1 的原理,其实就是把“有条件(I=True) 和 无条件(不输入 I) 这两种策略输出”做一次更强的偏置,让模型在推理时更“执着”地选那些更像好动作(I=1)的动作)


有了带标签样本(o_t, \alpha_t,\ell,I_t)之后, 训练一个VLA模型, 该模型既能输出:
\pi_{ref}(\alpha|o,\ell) (不带信号I)
也可以输出:
\pi_{ref}(\alpha|I,o,\ell) (带信号I=0或者I=1)
实际上就是在输入里增加i一个token/标志位, 比如:

  • <INST> ... </INST><GOOD> \Rightarrow学\pi_{ref}(\alpha|I=1, o,\ell)
  • <INST> ... </INST><BAD> \Rightarrow学\pi_{ref}(\alpha|I=0, o,\ell)
  • <INST> ... </INST> \Rightarrow学\pi_{ref}(\alpha|o,\ell)

对于每个动作:
\hat{\pi}(a \mid o, \ell) \propto \pi_{\text{ref}}(a \mid o, \ell) \left( \frac{\pi_{\text{ref}}(a \mid I, o, \ell)}{\pi_{\text{ref}}(a \mid o, \ell)} \right)^\beta
上述的含义如果动作\alpha_1在动作I=1中比平均更常出现
\frac{\pi_{\text{ref}}(a \mid I=1, o, \ell)}{\pi_{\text{ref}}(a \mid o, \ell)}>1, \hat{\pi}里更大概率选\alpha_1, 反正则被削弱,\beta控制这种"偏心"的力度。 相当于把\hat{\pi}当成teacher, 用KL/交叉熵训练策略网络\pi_{\theta}去拟合它(就像soft label的监督学习)

pipeline


一句话总结:
先用大规模演示预训练出 “value + 能看 I 的 policy”(Line1-2)。
再对每个任务循环:用当前 policy 去跑 -> 收到经验/纠错 -> 更新 value -> 用 advantage→I 来更新 policy(Line3-10)

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容