VnRobo
Về chúng tôiBảng giáBlogLiên hệ
🇺🇸ENĐăng nhậpDùng thử miễn phí
🇺🇸EN
VnRobo logo

Hạ tầng AI cho robot công nghiệp thế hệ mới.

Sản phẩm

  • Tính năng
  • Bảng giá
  • Kiến thức
  • Dịch vụ

Công ty

  • Về chúng tôi
  • Blog
  • Liên hệ

Pháp lý

  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2026 VnRobo. Bảo lưu mọi quyền.

Được tạo với♥tại Việt Nam
VnRobo
Về chúng tôiBảng giáBlogLiên hệ
🇺🇸ENĐăng nhậpDùng thử miễn phí
🇺🇸EN
  1. Trang chủ
  2. Blog
  3. TGRPO: Fine-tune VLA với Trajectory GRPO và LLM Dense Reward
wholebody-vlavlagrporeinforcement-learningliberoopenvlafine-tuningdense-rewardmanipulationrl-fine-tuning

TGRPO: Fine-tune VLA với Trajectory GRPO và LLM Dense Reward

TGRPO kết hợp LLM dense reward với dual-level advantage (step + trajectory) để fine-tune OpenVLA-7B trên LIBERO, đạt 91% success rate — vượt SFT 4.6% và PPO 4.4%.

Nguyễn Anh Tuấn1 tháng 7, 202611 phút đọc
TGRPO: Fine-tune VLA với Trajectory GRPO và LLM Dense Reward

Bạn đã từng train một VLA model, kết quả SFT trên demo tốt nhưng khi robot ra đời thực thì thất bại? Đây là vấn đề cơ bản: SFT chỉ bắt chước thành công, không học từ thất bại. TGRPO (arXiv 2506.08440) từ Jilin University đề xuất một hướng khác — dùng online RL với hai lớp advantage và reward được LLM tự sinh, đưa OpenVLA-7B từ 86.4% lên 91.0% success rate trên LIBERO-Object mà chỉ cần 1 GPU A100.

Bài này phân tích chi tiết kỹ thuật của TGRPO: tại sao GRPO chuẩn không đủ cho robotics, LLM sinh dense reward như thế nào, và dual-level advantage hoạt động ra sao.

Khuyến nghị công cụ

Stack train/deploy cho VLA

Train trên cloud/workstation, deploy bản tối ưu xuống Jetson hoặc robot computer.

Cloud GPU for VLA / policy training Dùng cho imitation learning, diffusion policy, RL và fine-tuning model robotics. Xem cloud GPU → NVIDIA Jetson Orin NX / Orin Nano Máy deploy edge cho perception, logging và inference đã tối ưu. Xem Jetson → Hugging Face / robotics dataset hosting Lưu dataset, checkpoint và model card để workflow LeRobot/VLA dễ chia sẻ hơn. Xem platform →

Vấn đề: SFT dạy robot bắt chước, không dạy robot thích nghi

Hãy tưởng tượng bạn học lái xe bằng cách xem 1000 video lái xe thành công. Bạn sẽ bắt chước được pattern, nhưng lần đầu gặp tình huống bất ngờ (xe khác cắt ngang, đường trơn) — bạn không biết phải làm gì vì chưa bao giờ trải nghiệm và vượt qua thất bại.

VLA model train bằng SFT cũng vậy. Khi gặp vật thể ở vị trí hơi lệch so với demo, ánh sáng khác, hoặc thứ tự nhiệm vụ thay đổi nhẹ — policy sụp đổ. Lý do kỹ thuật: SFT minimize behavior cloning loss trên demonstration thành công, không có tín hiệu nào về "tại sao thất bại" hay "làm sao để phục hồi".

Reinforcement learning (RL) giải quyết điều này bằng cách cho robot thực sự thử và nhận feedback. Nhưng áp dụng RL vào VLA có 3 thách thức:

  1. Reward design khó: Tabletop manipulation có nhiều sub-task phức tạp. Dùng sparse reward (0/1 cuối episode) → credit assignment cực kỳ khó cho 200+ bước.
  2. Credit assignment dài: Bước 50 dẫn đến thành công ở bước 150 — làm sao biết bước nào quan trọng?
  3. GRPO không được thiết kế cho trajectory dài: GRPO (Group Relative Policy Optimization) gốc sinh ra cho LLM reasoning, mỗi "trajectory" là vài chục token. Robot trajectory là hàng trăm bước hành động liên tục.

TGRPO giải quyết cả 3 vấn đề cùng lúc.

TGRPO là gì? — Big picture trước khi đào sâu

TGRPO = Trajectory-wise Group Relative Policy Optimization.

Ba thành phần chính:

[LLM] → Dense Reward Function
           ↓
[Robot runs N=4 parallel trajectories] → collect (state, action, reward) tuples
           ↓
[TGRPO] → compute step-level + trajectory-level advantage → update policy

Nói đơn giản: LLM đọc mô tả task → tự viết hàm reward chi tiết → robot chạy nhiều lần song song → so sánh relative performance cả ở từng bước lẫn toàn bộ trajectory → update policy.

Điểm khác biệt với GRPO chuẩn: GRPO chỉ so sánh ở mức group (trajectory nào tốt hơn). TGRPO thêm step-level comparison — ở timestep t cụ thể, action nào trong N parallel trajectory cho reward cao hơn?

Nguồn: TGRPO paper, Jilin University (arXiv 2506.08440)

Thành phần 1: LLM Dense Reward — Không cần hand-craft reward nữa

Đây là contribution thực dụng nhất của paper. Thay vì kỹ sư phải ngồi viết hàm reward cho từng task (tốn hàng tuần), TGRPO dùng LLM để tự động sinh reward.

Cách LLM sinh reward

LLM nhận vào prompt gồm:

  • Mô tả task bằng ngôn ngữ tự nhiên (vd: "Pick up the milk and place it in the basket")
  • Environment code của LIBERO (để LLM hiểu state space, object positions, success conditions)
  • Yêu cầu cụ thể về format reward

Prompt cốt lõi (theo paper):

"Based on task description, LIBERO environment code, and RL robotics characteristics,
generate a multi-stage reward function where robot receives constant stage-specific
rewards at proximity thresholds, with progressively increasing values per stage
and significantly higher completion rewards."

LLM output là một hàm Python với cấu trúc multi-stage:

def compute_reward(state, info):
    # Stage 1: Approach object
    dist_to_obj = compute_distance(state.ee_pos, state.obj_pos)
    if dist_to_obj < 0.05:  # 5cm threshold
        reward += 1.0
    
    # Stage 2: Grasp
    if info.is_grasped:
        reward += 3.0
    
    # Stage 3: Transport to goal
    dist_to_goal = compute_distance(state.obj_pos, state.goal_pos)
    if dist_to_goal < 0.1:
        reward += 5.0
    
    # Stage 4: Place (completion)
    if info.task_success:
        reward += 10.0
    
    # End-effector pose shaping from demonstration
    reward += alpha * pose_similarity(state.ee_pose, demo_ee_pose)
    
    return reward

Reward function gồm 2 thành phần:

  • f₁(P_object, P_pose_k): Object position tracking — phần thưởng khi object tiến gần mốc tiếp theo
  • f₂(P_pose_k, s_t): End-effector pose shaping — khuyến khích pose tương tự demonstration

Công thức tổng: Rₜ = f₁(P_object(t), P_pose^k) + f₂(P_pose^k, s_t)

Điểm hay: LLM biết ngữ nghĩa của task ("milk vào basket") nên tự suy ra các sub-goal (approach → grasp → lift → place), không cần kỹ sư hard-code.

Thành phần 2: Trajectory-wise GRPO — Dual-level Advantage

Đây là phần toán học cốt lõi. GRPO chuẩn (dùng trong LLM) tính advantage bằng cách so sánh N parallel outputs với nhau. Với robotics, TGRPO mở rộng thành 2 lớp advantage:

Step-level advantage Sᵢ,ₜ

Ở mỗi timestep t, ta có N trajectories đang chạy. Step-level advantage so sánh reward tại timestep t cụ thể đó giữa N trajectories:

S_{i,t} = (R_{i,t} - mean({R_{j,t} for j in 1..N})) / std({R_{j,t} for j in 1..N})

"Tại bước này, tôi có reward cao hơn trung bình các trajectory khác không?"

Điều này capture local action quality — action cụ thể tại timestep t có tốt hơn các lựa chọn song song không?

Trajectory-level advantage Tᵢ

Nhìn toàn bộ trajectory i, so sánh tổng reward với N trajectories khác:

T_i = (R_i - mean({R_j for j in 1..N})) / std({R_j for j in 1..N})

"Nhìn tổng thể cả trajectory, tôi thực hiện tốt hơn hay tệ hơn nhóm?"

Điều này capture global task success — trajectory này nhìn chung đi đúng hướng không?

Fused Advantage

Kết hợp cả 2 lớp:

Adv_{i,t} = α₁ · S_{i,t} + α₂ · T_i

Paper thấy empirically: α₁ = 0.3, α₂ = 0.7 hoạt động tốt nhất cho hầu hết tasks. Trọng số trajectory-level cao hơn — có nghĩa là "bức tranh toàn cảnh" quan trọng hơn "điểm nhỏ lẻ".

Tại sao dual-level tốt hơn single-level?

Ablation study trong paper làm rõ:

Method LIBERO-Object avg
Step-level only 73.6%
Trajectory-level only 86.8%
TGRPO (cả hai) 91.0%

Step-level alone thất bại nặng vì: một action "ngẫu nhiên tốt" tại step t không có nghĩa là cả strategy tốt. Trajectory-level alone thiếu local guidance. Kết hợp cho cả 2 tín hiệu.

Kết quả TGRPO trên LIBERO-Object so với SFT, PPO, và ablation variants
Kết quả TGRPO trên LIBERO-Object so với SFT, PPO, và ablation variants
Nguồn: TGRPO paper — LIBERO-Object 10-task results (arXiv 2506.08440)

Kiến trúc đầy đủ

OpenVLA-7B (frozen)
  └── LoRA adapter (trainable)
        ├── SigLIP encoder (visual features)
        ├── DINOv2 encoder (visual features)
        └── Llama2-7B language backbone

Training loop:
  For episode = 1..30:
    Sample N=4 parallel trajectories from current policy π_θ
    Collect (s_t, a_t, R_t) for each trajectory, max 200 steps
    
    LLM Dense Reward:
      R_t = f1(object_pos, keypose) + f2(ee_pose, demo_ee_pose)
    
    Compute advantages:
      S_{i,t} = normalize_step(R_{i,t})    # across N trajectories at t
      T_i = normalize_traj(sum(R_i))        # across N trajectories total
      Adv_{i,t} = 0.3 * S_{i,t} + 0.7 * T_i
    
    Update LoRA with AdamW, lr=1e-5:
      L = -E[Adv_{i,t} * log π_θ(a_{i,t} | s_{i,t})]

Cài đặt thực hành

Yêu cầu

  • GPU: NVIDIA A100 (hoặc tương đương 40GB+ VRAM)
  • LIBERO simulator đã cài
  • OpenVLA-7B checkpoint
  • LLM API access (để sinh reward function)

Setup LIBERO

# Cài LIBERO
pip install libero

# Download OpenVLA-7B
from huggingface_hub import snapshot_download
snapshot_download("openvla/openvla-7b", local_dir="./models/openvla-7b")

Sinh Reward Function bằng LLM

Trước khi train, dùng LLM để sinh reward cho từng task:

import anthropic  # hoặc OpenAI

def generate_reward_function(task_description: str, env_code: str) -> str:
    client = anthropic.Anthropic()
    
    prompt = f"""Based on this task description and LIBERO environment code,
generate a multi-stage reward function for RL training.

Task: {task_description}
Environment code: {env_code}

Requirements:
- Multi-stage rewards with progressively increasing values
- Proximity thresholds for each stage
- High completion bonus at final stage
- End-effector pose shaping from demonstrations
- Return a Python function: def compute_reward(state, info) -> float
"""
    
    response = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=2048,
        messages=[{"role": "user", "content": prompt}]
    )
    return response.content[0].text

Training với TGRPO

from tgrpo import TGRPOTrainer, TGRPOConfig

config = TGRPOConfig(
    model_path="./models/openvla-7b",
    lora_rank=16,
    learning_rate=1e-5,
    optimizer="adamw",
    
    # TGRPO specific
    n_parallel=4,          # N parallel trajectories per step
    alpha_step=0.3,        # weight for step-level advantage
    alpha_traj=0.7,        # weight for trajectory-level advantage
    
    # Training
    max_episodes=30,
    max_steps_per_episode=200,
    n_test_episodes=50,
)

trainer = TGRPOTrainer(
    config=config,
    env_name="libero_object",
    reward_fn=generated_reward_fn,  # từ LLM
)

trainer.train()

Inference sau khi train

from openvla import OpenVLA
import torch

# Load fine-tuned model
model = OpenVLA.from_pretrained("./models/openvla-7b")
model.load_lora("./checkpoints/tgrpo-libero-object")
model.eval()

# Run inference
obs = env.reset()
for step in range(max_steps):
    action = model.predict_action(
        image=obs["rgb"],
        instruction="Pick up the milk and place it in the basket"
    )
    obs, reward, done, info = env.step(action)
    if done:
        break

Kết quả chi tiết

LIBERO-Object (10 tasks)

Method Avg Success Rate
OpenVLA (zero-shot) ~60%
SFT 86.4%
PPO 86.6%
GRAPE ~89%
TGRPO 91.0%

4 suites LIBERO (từ Table 1 trong paper)

Method Spatial Object Goal Long Average
SFT 84.7% 88.4% 79.2% 51.1% 76.5%
GRAPE 88.5% 92.1% 83.1% 57.2% 80.2%
TGRPO 90.4% 92.2% 81.0% 59.2% 80.7%

Điểm đáng chú ý: LIBERO-Long (long-horizon tasks) TGRPO cải thiện nhiều nhất — +8.1% so với SFT. Đây chính xác là loại task mà dual-level advantage phát huy — trajectory-level advantage giúp robot "nhìn xa" hơn.

Ablation về group size N

N (parallel trajectories) LIBERO-Goal success
N=2 76.2%
N=4 81.0%
N=8 80.5%

N=4 là sweet spot. N=2 không đủ diversity để so sánh. N=8 tốn GPU gấp đôi mà không cải thiện nhiều.

Hạn chế cần biết

1. Hyperparameter α₁, α₂ cần tune thủ công: Paper thấy α₁/α₂ tối ưu thay đổi theo từng task. Không có công thức chung tự động. Với tasks 1,7,8: α₁=10, α₂=1; với tasks 4,5,6: α₁≈0.3, α₂≈0.7. Thực tế deploy sẽ cần grid search.

2. Reward function từ LLM có thể sai: LLM generate reward dựa trên text description, nhưng environment state space có thể phức tạp hơn LLM hiểu. Cần verify reward bằng tay trước khi train.

3. Chỉ test trên LIBERO: Paper chưa validate trên real robot hay benchmark khác (RoboMimic, MetaWorld). Transfer performance chưa rõ.

4. Cần SFT checkpoint tốt làm baseline: TGRPO fine-tune từ SFT checkpoint, không train from scratch. Nếu SFT yếu thì RL cũng không cứu được.

Khi nào nên dùng TGRPO?

Phù hợp khi:

  • Đã có SFT-trained VLA nhưng performance chưa đủ
  • Có simulator để rollout (LIBERO, MuJoCo, Isaac Gym)
  • Task có nhiều sub-stages rõ ràng (grasp → lift → place)
  • Muốn tự động hóa reward design thay vì hand-craft

Chưa phù hợp khi:

  • Không có simulator (real robot RL expensive)
  • Task quá sparse, LLM không hiểu để sinh dense reward
  • Ngân sách GPU ít (cần A100 ít nhất)

So sánh với các phương pháp khác

Phương pháp Reward Advantage GPU Performance
SFT Không có N/A Thấp 86.4%
PPO Hand-crafted Value function Cao 86.6%
GRAPE Sparse + shaped Trajectory-level Trung bình ~89%
TGRPO LLM dense Step + Trajectory Trung bình 91.0%

TGRPO đạt cân bằng tốt: không cần hand-craft reward (dùng LLM), không cần value network (critic-free như GRPO), hiệu quả GPU tốt hơn PPO.

Demo thành công các task LIBERO-Object với policy TGRPO sau fine-tuning
Demo thành công các task LIBERO-Object với policy TGRPO sau fine-tuning
Nguồn: TGRPO paper — success cases trên 10 tasks của LIBERO-Object

Bài học lớn từ TGRPO

TGRPO thực ra dạy một bài học rộng hơn: trong RL cho robotics, reward design và credit assignment là 2 vấn đề khó nhất, và giải quyết cả 2 đồng thời mới có breakthrough.

  • LLM dense reward giải quyết reward design: thay vì hand-craft, dùng LLM semantic understanding
  • Dual-level advantage giải quyết credit assignment: nhìn cả local (step) và global (trajectory)

Xu hướng này sẽ mở rộng: thay vì engineer reward, ta sẽ "prompt" reward; thay vì chọn thuật toán RL, ta sẽ kết hợp nhiều lớp advantage cho task cụ thể.

Nếu bạn đang fine-tune VLA và muốn vượt performance SFT mà không cần viết reward thủ công — TGRPO là điểm xuất phát tốt.


Bài viết liên quan

  • OpenVLA Deep Dive: Kiến trúc và cách fine-tune VLA 7B tham số
  • Fine-tune VLA trên LIBERO với RL: Hướng dẫn thực hành embodied-r1
  • ProcVLM: Dense Reward từ Process Supervision cho VLA RL
NT

Nguyễn Anh Tuấn

Robotics & AI Engineer. Building VnRobo — sharing knowledge about robot learning, VLA models, and automation.

Khám phá VnRobo

Fleet MonitoringROS 2 IntegrationAMR Solutions

Bài viết liên quan

Deep Dive
VLA-RFT: RL Fine-Tune VLA trong World Simulator
vlavla-rftreinforcement-learning
wholebody-vla

VLA-RFT: RL Fine-Tune VLA trong World Simulator

VLA-RFT dùng world model làm simulator để fine-tune VLA bằng GRPO, reward kiểm chứng và code GitHub trên LIBERO.

3/6/202614 phút đọc
NT
Tutorial
VLA-0: Train VLA Đỉnh Cao Không Cần Sửa Kiến Trúc
vlanvidianvlabs
wholebody-vla

VLA-0: Train VLA Đỉnh Cao Không Cần Sửa Kiến Trúc

NVIDIA NVlabs chứng minh: action as text đạt 94.7% trên LIBERO, vượt pi_0 và GR00T-N1 mà không cần sửa kiến trúc — chỉ với Qwen2.5-VL-3B.

4/5/202613 phút đọc
NT
Nghiên cứu
ROVE: Human Intervention làm RL Signal cho VLA Humanoid
rovevlareinforcement-learning
wholebody-vla

ROVE: Human Intervention làm RL Signal cho VLA Humanoid

ROVE dùng Optimistic Value Estimation (OVE) để fine-tune VLA humanoid manipulation từ human intervention imperfect — pipeline thực tế từ XPENG Robotics.

22/6/202612 phút đọc
NT
VnRobo logo

Hạ tầng AI cho robot công nghiệp thế hệ mới.

Sản phẩm

  • Tính năng
  • Bảng giá
  • Kiến thức
  • Dịch vụ

Công ty

  • Về chúng tôi
  • Blog
  • Liên hệ

Pháp lý

  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2026 VnRobo. Bảo lưu mọi quyền.

Được tạo với♥tại Việt Nam