DyPES-VLA: Học Dynamics Prior Chung và Kiểm Soát Riêng Từng Embodiment cho Cross-Embodiment Manipulation
Hãy thử tưởng tượng bạn phải dạy ba học sinh cùng một lúc: một đứa có tay ngắn, một đứa tay dài, và một đứa có hai tay. Cùng bài học, cùng bộ não — nhưng cách mỗi đứa cầm bút thì hoàn toàn khác nhau.
Đó chính xác là bài toán cross-embodiment manipulation trong robotics: làm sao để một policy duy nhất có thể điều khiển Franka Panda 7-DoF, Unitree G1 humanoid 29-DoF, và dual-arm robot 14-DoF — cùng lúc, từ cùng một model weight?
DyPES-VLA (arXiv 2608.06374, August 2026 — HKUST Guangzhou & COCO Matrix) trả lời câu hỏi này với hai đột phá:
- Dynamics Prior: Để VLM học "vật lý" của thao tác từ video không có label robot action — cách vật thể di chuyển, cách tay cầm tiếp xúc bề mặt, cách cảnh thay đổi sau khi manipulation.
- Mixture-of-Experts (MoE) Action Head: Mỗi embodiment có "chuyên gia" FFN riêng — không cần align action space bằng tay, không cần preprocessing.
Kết quả: 98.0% trên LIBERO, 89.02% trên RoboTwin 2.0, 59.25% trên RoboCasa-GR1, và 75.6% trên real-world với 3 robot thực tế, vượt xa GR00T-N1.6 (59.6%) và ACT (32.4%).
Tại Sao Cross-Embodiment Manipulation Khó?
Hầu hết các VLA hiện tại — từ Qwen-VLA đến X-VLA — đều được train trên một loại robot hoặc phải chuẩn hóa action space bằng tay (ví dụ: map tất cả về end-effector Cartesian). Điều đó có hai vấn đề lớn:
Vấn đề 1 — Waste of shared knowledge: Mọi robot đều tuân thủ cùng quy luật vật lý. Khi bạn kéo một hộp ra khỏi kệ, bất kể dùng tay người, cánh tay Franka, hay tay humanoid, hộp đều di chuyển theo cùng cách. Nhưng các model hiện tại lại train action policy từ đầu cho từng embodiment, bỏ phí "knowledge vật lý" chung này.
Vấn đề 2 — Manual preprocessing burden: Chuyển joint-space action của humanoid 29-DoF về end-effector Cartesian của Franka 7-DoF không đơn giản. Thường cần pipeline IK/FK phức tạp, gây lỗi và mất information.
DyPES-VLA giải quyết cả hai bằng cách tách rõ hai phase:
- Phase học "physics chung" (Dynamics Prior) → dùng video data, không cần robot labels
- Phase học "cách dùng physics đó cho từng robot" (MoE Action Head) → embodiment-specific, không cần preprocessing
Kiến Trúc DyPES-VLA

Model gồm 3 thành phần chính:
1. Vision-Language Model (VLM) với Shared Query Tokens
Backbone là Qwen3-VL-2B, nhận vào:
- Visual observations (hình ảnh camera)
- Language instruction ("pick up the red cube")
- Embodiment metadata (loại robot, action format)
- N=96 learnable query tokens — đây là "giao diện" trung gian quan trọng nhất
96 query tokens này được training để capture shared dynamics: chuyển động của vật thể, tiếp xúc tay-vật, thay đổi cảnh sau manipulation. Chúng là "ngôn ngữ chung" mà cả Franka, humanoid, và dual-arm đều hiểu.
2. Future Generation Head (Dynamics Prior)
Đây là trái tim của DyPES-VLA. Thay vì chỉ học từ robot demonstration data, model được train để dự đoán khung hình tương lai — task không cần robot action labels.
Generator dùng SANA-600M (image diffusion model) với mục tiêu rectified-flow:
$$\mathcal{L}\text{future} = \mathbb{E}{\tau, \epsilon}\left[|g_\psi(z_\tau, \tau, p_\omega(Z)) - (z - \epsilon)|_2^2\right]$$
Trong đó:
- $z_\tau$ là noisy latent của future frame
- $p_\omega(Z)$ là query states từ VLM (96 tokens)
- $g_\psi$ là SANA-600M conditioned trên query states
Mục tiêu: buộc 96 query tokens phải encode đủ thông tin để dự đoán tương lai — qua đó chúng tự nhiên học được dynamics của thao tác.
3. Embodiment-Specific MoE Action Head
Đây là component dịch "language dynamics chung" sang "robot commands cụ thể". Thiết kế là 16-layer Diffusion Transformer với K=3 experts:
- Per-Embodiment Encoder-Decoder: Lightweight adapter map native action space (joint angles, end-effector pose, etc.) vào/ra một common latent space
- Shared Attention Layers: Cross-attention đến 96 query tokens; self-attention trên action sequence — cả hai dùng Adaptive LayerNorm (AdaLN). Phần này chia sẻ giữa mọi embodiment
- Static Routing: Router chọn 1 trong K=3 FFN experts dựa trên embodiment metadata — không cần gating phức tạp
- Embodiment-Specific FFN Experts: Mỗi expert chuyên về một embodiment, xử lý kinematic constraints riêng
Training objective ở Stage 2:
$$\mathcal{L} = \mathcal{L}\text{action} + \lambda_w \mathcal{L}\text{future}, \quad \lambda_w = 0.05$$
Tỉ lệ 0.05 giữ balance: action loss chính, future loss giữ dynamics prior không bị forgetting.
Hai Giai Đoạn Training
Stage 1: Pretraining Dynamics Prior (100K steps)
Mục tiêu: Học dynamics chung từ video — KHÔNG cần robot action labels.
Hardware: 16 H100 GPUs, batch size 512.
Data mixture:
| Dataset | Tỉ lệ | Mô tả |
|---|---|---|
| EgoDex | 50% | Video người làm thao tác tay (egocentric) |
| RoboTwin 2.0 | 20% | Dual-arm simulation demos |
| RoboCasa-GR1 | 20% | Humanoid simulation demos |
| LIBERO | 10% | Single-arm simulation demos |
Tại sao EgoDex chiếm 50%? Vì video người làm thao tác chứa phong phú dynamics thực tế nhất — cách tay người cầm vật, tiếp xúc, và thao tác có thể transfer sang robot.
Chỉ train Future Generation Head và Query Tokens. VLM backbone freeze hoặc fine-tune nhẹ. Action Head chưa train.
Stage 2: Co-training với MoE Action Head (200K steps)
Mục tiêu: Train action policy với embodiment-specific experts, giữ dynamics prior bằng joint loss.
Data mixture (chỉ robot demonstration data):
| Dataset | Tỉ lệ | Robot |
|---|---|---|
| RoboTwin 2.0 | 40% | 14-DoF dual-arm |
| RoboCasa-GR1 | 40% | 29-DoF humanoid |
| LIBERO | 20% | 7-DoF Franka Panda |
Action horizons khác nhau theo embodiment:
- Single-arm (Franka): 8 steps
- Humanoids: 16 steps
- Dual-arm: 50 steps
Inference: 4 Euler steps cho flow integration — nhanh hơn DDPM truyền thống.
Real-World Finetuning (5K steps)
Sau khi train simulation xong, finetuning cho 3 robot thực:
- FR3 (Franka Research 3)
- COBOT Magic
- Unitree G1 (humanoid)
Chỉ cần 1,800 demonstrations — tương đối ít so với train from scratch.
Kết Quả Benchmark
Simulation Benchmarks (single checkpoint — cùng weight cho cả 3)
LIBERO (7-DoF Franka Panda):
| Subset | DyPES-VLA | π₀ | GR00T-N1.6 |
|---|---|---|---|
| Spatial | 98.8% | 97.6% | — |
| Object | 99.4% | 98.5% | — |
| Goal | 97.0% | 95.9% | — |
| Long Horizon | 96.8% | 88.9% | — |
| Average | 98.0% | 95.2% | 92.3% |
RoboCasa-GR1 (29-DoF humanoid):
| Model | Success Rate |
|---|---|
| DyPES-VLA | 59.25% |
| ABot-M0 | 58.3% |
| Qwen-VLA | 56.7% |
| LDA-1B | 55.4% |
RoboTwin 2.0 (14-DoF dual-arm):
| Model | Clean | Randomized | Average |
|---|---|---|---|
| DyPES-VLA | 88.78% | 89.26% | 89.02% |
| Qwen-VLA | 86.4% | 86.8% | 86.6% |
Real-World Performance

| Model | FR3 | COBOT Magic | Unitree G1 | Average |
|---|---|---|---|---|
| DyPES-VLA | — | — | — | 75.6% |
| GR00T-N1.6 | — | — | — | 59.6% |
| ACT | — | — | — | 32.4% |
DyPES-VLA vượt GR00T-N1.6 +16 điểm và vượt ACT +43 điểm — khoảng cách rất lớn.
Ablation Study: Từng Component Quan Trọng Đến Đâu?
| Configuration | RoboTwin 2.0 | RoboCasa-GR1 | LIBERO |
|---|---|---|---|
| Full DyPES-VLA | 89.02% | 59.25% | 98.0% |
| Không có Future Prediction | -2.4% | -2.5% | nhỏ |
| Dense Head (không MoE) | -1.2% | -2.1% | nhỏ |
| Không có Embodiment Metadata | -0.5% | -0.5% | nhỏ |
Bài học:
- Future Prediction quan trọng nhất cho humanoid và dual-arm (task phức tạp hơn, dynamics harder)
- MoE quan trọng hơn với humanoid (29-DoF, kinematic constraints khác xa single-arm)
- LIBERO ít bị ảnh hưởng vì là task single-arm đơn giản, dynamics ít phức tạp hơn
Cách Reproduce và Sử Dụng DyPES-VLA
Hiện tại code chưa public tại thời điểm bài viết (August 2026), nhưng từ paper bạn có thể implement lại theo approach sau:
Chuẩn bị môi trường
# Install dependencies chính
pip install torch torchvision
pip install transformers # cho Qwen3-VL-2B
pip install diffusers # cho SANA-600M
pip install lerobot # cho LIBERO, RoboTwin data loading
# LIBERO benchmark
pip install libero
Stage 1: Train Dynamics Prior
import torch
from transformers import Qwen3VLForConditionalGeneration
# Load Qwen3-VL-2B backbone
vlm = Qwen3VLForConditionalGeneration.from_pretrained("Qwen/Qwen3-VL-2B")
# Thêm 96 learnable query tokens
query_tokens = torch.nn.Parameter(
torch.randn(1, 96, vlm.config.hidden_size)
)
# Future generation head (SANA-600M conditioned on query tokens)
# Objective: rectified-flow regression
def compute_future_loss(query_states, future_frame_latent, noise):
"""
query_states: [B, 96, D] — output từ VLM
future_frame_latent: z — latent của future frame
noise: epsilon ~ N(0, I)
"""
t = torch.rand(query_states.shape[0]) # random timestep
z_t = (1 - t[:, None, None]) * noise + t[:, None, None] * future_frame_latent
velocity_pred = sana_generator(z_t, t, conditioning=query_states)
velocity_target = future_frame_latent - noise
return ((velocity_pred - velocity_target) ** 2).mean()
Data loading: Mix EgoDex (50%) + simulation videos (50%) không cần action labels — chỉ cần (current_frame, future_frame) pairs.
Stage 2: Train MoE Action Head
class MoEActionHead(torch.nn.Module):
"""
16-layer Diffusion Transformer với K=3 embodiment-specific experts.
"""
def __init__(self, n_layers=16, n_experts=3, d_model=512):
super().__init__()
self.n_experts = n_experts
# Shared layers (cross-attention + self-attention)
self.shared_attention = torch.nn.ModuleList([
SharedAttentionBlock(d_model) for _ in range(n_layers)
])
# Per-embodiment experts (FFN)
self.experts = torch.nn.ModuleList([
torch.nn.Sequential(
torch.nn.Linear(d_model, d_model * 4),
torch.nn.GELU(),
torch.nn.Linear(d_model * 4, d_model)
) for _ in range(n_experts)
])
# Static router (based on embodiment metadata)
self.router = torch.nn.Embedding(n_experts, 1)
def forward(self, action_noisy, query_states, embodiment_id):
# Shared attention qua tất cả layers
x = action_noisy
for layer in self.shared_attention:
x = layer(x, cross_kv=query_states)
# Route to embodiment-specific expert
x = self.experts[embodiment_id](x)
return x # predicted velocity
# Training co-objective
def training_step(batch):
action_loss = compute_action_loss(batch)
future_loss = compute_future_loss(batch)
return action_loss + 0.05 * future_loss # lambda_w = 0.05
Inference
# 4 Euler steps — nhanh hơn DDPM
def inference(observation, instruction, embodiment_id, n_steps=4):
# VLM encode
query_states = vlm(observation, instruction) # [B, 96, D]
# Sample từ noise
action = torch.randn(batch_size, action_horizon, action_dim)
# Euler integration
dt = 1.0 / n_steps
for i in range(n_steps):
t = torch.tensor(i * dt)
velocity = moe_head(action, query_states, embodiment_id)
action = action + velocity * dt
return action
Action Horizons theo Embodiment
ACTION_HORIZONS = {
"single_arm": 8, # Franka Panda, COBOT Magic
"humanoid": 16, # Unitree G1, GR1
"dual_arm": 50, # RoboTwin dual-arm
}
So Sánh với Các Phương Pháp Khác
Nếu bạn đang cân nhắc giữa các VLA cho cross-embodiment task:
| Approach | Ưu điểm | Nhược điểm |
|---|---|---|
| DyPES-VLA | Không cần align action space, dùng được video data, MoE scalable | Phức tạp 2-stage training, cần 16 H100 |
| RDT2 zero-shot | Zero-shot transfer | Chỉ dual-arm bimanual |
| HEX-VLA | Whole-body loco-manipulation | Tập trung humanoid |
| Qwen-VLA (generalist) | Đơn giản train | Kém hơn DyPES-VLA trên mọi benchmark |
| Per-embodiment specialist | Highest peak performance | Không scalable, cần train riêng từng robot |
DyPES-VLA lý tưởng khi: Bạn có ≥2 loại robot khác nhau và muốn một policy chung, hoặc có nhiều action-free video data để leverage.
DyPES-VLA không phải lựa chọn tốt khi: Chỉ có một loại robot duy nhất — lúc đó specialist policy (Diffusion Policy, ACT) đơn giản hơn và đủ tốt.
Điểm Sáng Tạo Của Paper
Có ba insight thực sự đáng để học từ DyPES-VLA:
Insight 1: Video data là gold mine chưa khai thác đủ. EgoDex và video manipulation người/robot tồn tại rất nhiều — chúng chứa phong phú dynamics information hơn robot demonstration data. DyPES-VLA exploit điều này bằng future prediction pretraining.
Insight 2: Tách "physics" khỏi "control". Dynamics Prior học vật lý chung, MoE Action Head học control riêng. Đây là inductive bias rất clean và align với cách người ta thực sự nghĩ về manipulation.
Insight 3: Static routing đủ dùng. Thay vì learned gating phức tạp (như trong LLM MoE), static routing dựa trên embodiment metadata đơn giản hơn và hiệu quả không kém — vì không cần "route" giữa nhiều tasks, chỉ cần phân biệt embodiment.
Hạn Chế Và Hướng Mở Rộng
Paper thừa nhận một số hạn chế:
- Số lượng embodiments còn hạn chế: 3 embodiments trong real-world (FR3, COBOT, G1). Scale lên 10-20 embodiments chưa được test.
- K=3 experts phù hợp với 3 embodiments nhưng cần thêm experts khi scale.
- RoboCasa-GR1 chỉ đạt 59.25% — humanoid manipulation vẫn là hard problem, đặc biệt với tasks cần balance tốt.
- Inference speed: Chưa có số liệu real-time inference Hz — 4 Euler steps có thể vẫn chậm với diffusion Transformer 16 layers.
Hướng mở rộng hấp dẫn:
- Thêm data từ sim (Isaac Lab, MuJoCo) để tăng diversity
- Fine-tune cho mobile manipulation robot (wheel + arm)
- Kết hợp với Diffusion Policy approaches cho action head
Kết Luận
DyPES-VLA là một bước tiến rõ ràng trong cross-embodiment manipulation. Điểm mấu chốt không phải là con số 98% LIBERO (đây là benchmark tương đối easy với model lớn) — mà là 75.6% real-world trên 3 robot khác nhau với một single checkpoint.
Hai ý tưởng cốt lõi — học dynamics chung từ video qua future prediction, và routing về expert riêng của từng embodiment — là những building blocks mà cộng đồng sẽ tiếp tục xây dựng lên trong 2026-2027.
Link paper: arXiv 2608.06374 | Project page: DyPES-VLA Release

