RL Token 学习笔记

前置知识:

\(\pi_{0.5}:\) 一款泛化能力较好(能较好地适应全新的场景)的模型:

论文:https://www.pi.website/download/pi05.pdf

Pre-training :

这一步训练的 VLM , 主要是训练的它语义理解的能力并且对 diverse robotic tasks 有一些了解 & 生成动作 token 的能力。
这里给了 VLM 许多多模态数据(很多不在目标任务范围内),也就使得它覆盖了真实世界的更多可能,提升了它的泛化能力。

Post-training:

这部分训练的是给 VLA high-level prompt 让他有能将其拆分为若干 specific tasks 的能力,以及训练 action expert 通过 flow matching 去噪生成连续动作
(预测未来 \(H\) (这里 \(H=50\)) 步内的动作 \(a_t,a_{t+1},...,a_{t+H-1}\) , 每个 \(a_i\) 用一个向量来表示 )的能力。

RLT: 一款用于处理精细化程度高的任务的方法

主要优势:

  1. 通过 Actor-Critic 得出最佳精确的 action chunk
  2. 在 VLM 对周遭的画面场景进行了识别后,会生成一段 prefix hidden states : \([z_1,z_2,...,z_M]\) , 是 \(M\) 个 tokens, 每个大概 2048 维(?)表示了抽象化的关于 "我看到了什么、任务是什么、当前状态如何" 的信息。而正常 VLA 中,它需要你生成许多有可能的 ref-chunks ,对固有信息的保留程度要求较高,以避免丢失细节。但 RLT 中要求没那么高,所以可以精简一下,变成单一 token \(z_{rl}\) , 大大加快效率。

大致流程:

  1. 生成了 \([z_1,z_2,...,z_M]\)
  2. VLA 负责通过 \([z_1,..,z_M]\) 由 action expert 提出推荐的 ref-chunks
  3. transformer 通过 Encoder 将 \([z_1,...,z_M]\) 压缩为 \(z_{rl}\)
  4. Actor-Critic 在 ref-chunk 的基础上做进一步地调整,得到最终地动作。

具体步骤:

Stage1: 训 VLA & transformer:

VLA:

定义一个 VLA_loss 表示损失值。训练时,模型预测地动作块为 \(â_{1:H}\) 而 人类示范地标准动作是 \(a_{1:H}\) ,则 \(VLA\)_\(loss=(â_{1:H}-a_{1:H})^2\)

transformer:

prefix states 中 引入一个可学习的特殊 token \(e_{rl}\) , 变成 \([z_1,...,z_M,e_{rl}]\) . 然后交由 transformer 去寻找内部关联,得出 Encoder 函数,其中 \(z_{rl}=Encoder([Z_{1:M},e_{rl}])_{M+1}\) . 那怎么知晓压缩得正确与否?再引入 \(Decoder\) 函数,让 \(z_{rl}\) 解码为(可能不太对的)原序列 \([z^`_1,...,z^`_M]\) , 进行比对,算出损失值 \(rlt\)_\(loss=\sum (z_i-z^`_i)^2\)

那么最终的总损失为:total_loss = rlt_loss + rlt_alpha * vla_loss,这个 total_loss 越小越好。

Stage2: 训 Actor-Critic 策略:

Actor:

提供给它 \(z_{rl}\)\(proprio\) (自身状态,比如关节角度等),\(ref-chunk\) ,它输出优化之后的 action chunk

Critic:

负责测算这个动作的价值。
首先,每一个动作块单独的 reward 可以这样算:\(discounted_chunk_reward = r₁ + γ·r₂ + γ²·r₃ + ... + γ^(H-1)·r_H\) ,其中 \(r_i\) 表示第 \(i\) 步的 reward, \(H\) 为块长,\(γ\) 为一个接近 1 但小于 1 的数,因为未来的步骤会具有不确定性 所以,当前这一步的动作做完对未来产生的影像中,每一个未来可能做的动作要乘以 \(γ\)。(但是我感觉也可以理解为,\(γ\) 为每个步骤执行的概率,而 \(r_1\) 是当前进行的步骤,所以确定能发生。比如 \(r_3\) 这个价值能产生的前提是 \(2\) 动作进行了,且 \(3\) 动作进行了,整个 \(chunk_reward\) 式子算出来是这一系列动作发生后得到的期望价值。?)

那么,要算好多个动作块的总共 reward ,就可以直接递推:Q_target(obs,action) = discounted_chunk_reward + γ^H\times Q_target(next_obs, next_action), 其中 obs 为当前状态,而 action 为actor再当前状态下选的动作。

所以,actor-critic 的总共 loss=-qweight * Q(obs, \pi(obs)) + bcweight * BC(\pi(obs), target_action) ,此处 weight 为权重(一般为了使actor的动作与vla偏差小一点,bc 的权重会更大),\(\pi(obs)\) 为 actor 选的动作。 这个loss 是越小越好(比如到了负数),否则如果critic错误估计了价值,loss变为负数,则会产生偏差,导致偏向某个错误类型的动作。

一些模式(×2):

Franka:

\(b\) 键→执行 actor 的动作,并且以 (约 50%) 的概率清除 ref-chunk, 为了使 actor 能保持独立生成能力,不过度依靠 ref-chunk

Maniskill:

前期大动作用 VLA 提供的,到最最后才换用 actor 的。

posted @ 2026-07-25 11:46  Catherine12  阅读(5)  评论(0)    收藏  举报