aiai-perceptionvlahumanoiddiffusion-modelpsi0

Ψ₀ Hands-On (2): Kiến trúc 3 tầng

Deep-dive vào kiến trúc Ψ₀: System-2 (VLM), System-1 (MM-DiT), System-0 (RL Controller) — não, tay, chân của robot.

Nguyễn Anh Tuấn1 tháng 4, 202616 phút đọc
Ψ₀ Hands-On (2): Kiến trúc 3 tầng

Ψ₀ Hands-On (2): Kiến trúc 3 tầng — Não, Tay, Chân của Robot

Trong bài trước, chúng ta đã hiểu ý tưởng tổng quan của Ψ₀ và tại sao nó quan trọng. Bây giờ là lúc mở nắp máy ra xem bên trong có gì. Bài này sẽ đi sâu vào kiến trúc 3 tầng — từng component hoạt động ra sao, dữ liệu chảy như thế nào, và tại sao mỗi quyết định thiết kế được đưa ra.

Hãy chuẩn bị tinh thần: bài này nặng về kỹ thuật. Nhưng tôi sẽ cố gắng giữ mọi thứ trực quan nhất có thể.

Bức tranh toàn cảnh: Luồng dữ liệu

Trước khi đi vào từng hệ thống, hãy nhìn toàn bộ pipeline từ đầu đến cuối. Khi robot nhận một lệnh ("cầm cốc nước"), đây là những gì xảy ra:

Camera (320x240 RGB)
    │
    ▼
System-2: Qwen3-VL-2B (VLM)
    │ → Visual features + Text features
    ▼
System-1: MM-DiT (~500M params)
    │ → Action chunks (28 DoF upper body + 8 locomotion commands)
    ├── 28 DoF → Trực tiếp đến motor cánh tay + bàn tay
    ▼
System-0: AMO RL Controller
    │ ← 8 DoF commands (vận tốc, hướng, chiều cao...)
    ▼
15 DoF chân → Motor chân robot

Toàn bộ pipeline này chạy với latency ~160ms — đủ nhanh cho real-time control. Bây giờ, hãy zoom vào từng hệ thống.

System-2: Bộ não nhìn và hiểu — Qwen3-VL-2B

Tại sao Qwen3-VL-2B?

System-2 là Vision-Language Model (VLM), có nhiệm vụ nhận hình ảnh từ camera và lệnh text, rồi trích xuất features có ý nghĩa để System-1 sử dụng. Nhóm nghiên cứu chọn Qwen3-VL-2B — phiên bản 2 tỷ tham số của Qwen3-VL từ Alibaba — vì ba lý do:

  1. Kích thước vừa phải: 2B params đủ mạnh để hiểu hình ảnh phức tạp, nhưng đủ nhỏ để chạy real-time trên GPU edge. Những model lớn hơn như LLaVA-13B hay Qwen-VL-7B sẽ quá chậm cho robot control ở 160ms latency.

  2. Hiệu suất vision tốt: Qwen3-VL là một trong những VLM nhỏ tốt nhất về visual understanding, đặc biệt trong việc nhận diện vật thể và hiểu không gian 3D từ ảnh 2D.

  3. Pre-trained sẵn: Model đã được huấn luyện trên hàng tỷ cặp ảnh-text, nên nó đã có sẵn khả năng nhận diện đồ vật thông thường (cốc, chai, hộp, tay nắm cửa...) mà robot cần thao tác.

Kiến trúc AI và neural network — nền tảng của deep learning hiện đại

Cách hoạt động

System-2 nhận đầu vào:

  • Hình ảnh RGB kích thước 320x240 pixels từ camera gắn trên đầu robot (egocentric view)
  • Text instruction — lệnh bằng ngôn ngữ tự nhiên, ví dụ "pick up the red cup"

Và đầu ra là visual-language features — một tensor chứa thông tin ngữ nghĩa về cả hình ảnh và text, được truyền vào System-1.

# Pseudo-code đơn giản hóa
image = camera.capture()  # 320x240x3 RGB
text = "pick up the red cup"

# VLM xử lý
visual_tokens = qwen3_vision_encoder(image)   # [N, D]
text_tokens = qwen3_text_encoder(text)        # [M, D]
features = qwen3_cross_attention(visual_tokens, text_tokens)  # [N+M, D]

Một điểm quan trọng: System-2 được freeze hoàn toàn trong quá trình huấn luyện Ψ₀. Tức là nhóm nghiên cứu không fine-tune VLM — họ dùng nguyên model pre-trained. Điều này có hai ý nghĩa:

  • Ưu điểm: Tiết kiệm tài nguyên huấn luyện đáng kể. Không cần gradient qua 2B params.
  • Nhược điểm tiềm ẩn: VLM có thể không tối ưu cho domain cụ thể (robot egocentric view). Nhưng thực nghiệm cho thấy Qwen3-VL đủ tốt.

Nếu bạn muốn hiểu sâu hơn về cách VLA models nói chung sử dụng VLM, hãy đọc bài về VLA models trong series AI cho Robot.

System-1: Bàn tay hành động — MM-DiT Action Expert

Đây là trái tim của Ψ₀. System-1 là một action expert với khoảng 500 triệu tham số, có nhiệm vụ sinh ra chuỗi hành động (action chunks) từ features của System-2. Nó dựa trên ba công nghệ then chốt: MM-DiT, Flow Matching, và Action Chunking.

MM-DiT: Tại sao không dùng DiT thông thường?

DiT (Diffusion Transformer) là kiến trúc transformer được thiết kế cho mô hình khuếch tán (diffusion models). Nhưng Ψ₀ dùng một biến thể gọi là MM-DiT (Multi-Modal DiT), lấy cảm hứng từ kiến trúc trong Stable Diffusion 3. Sự khác biệt nằm ở hai điểm:

1. Separate Modulation

Trong DiT thông thường (Naive DiT), tất cả các modality (ảnh, text, action) đều đi qua cùng một bộ tham số modulation. Điều này có nghĩa là model dùng chung cách "điều chỉnh" cho mọi loại đầu vào.

MM-DiT thay đổi điều này: mỗi modality có bộ modulation riêng. Cụ thể:

  • Visual features từ VLM → modulation parameters riêng
  • Action tokens → modulation parameters riêng
  • Timestep embedding → modulation parameters riêng

Tại sao quan trọng? Vì bản chất của visual features và action tokens rất khác nhau. Visual features là thông tin không gian tĩnh (vị trí vật thể, hình dạng). Action tokens là chuỗi thời gian động (vị trí khớp robot qua các timestep). Ép chúng qua cùng một "bộ lọc" sẽ mất thông tin.

2. Joint Attention

Mặc dù modulation riêng biệt, MM-DiT vẫn cho phép attention chung (joint attention) giữa các modality. Tức là action tokens có thể "nhìn" vào visual features khi tính attention, và ngược lại.

# Simplified MM-DiT block
class MMDiTBlock:
    def forward(self, visual_tokens, action_tokens, timestep):
        # Separate modulation
        v_scale, v_shift = self.visual_modulation(timestep)
        a_scale, a_shift = self.action_modulation(timestep)
        
        visual_tokens = v_scale * self.norm(visual_tokens) + v_shift
        action_tokens = a_scale * self.norm(action_tokens) + a_shift
        
        # Joint attention - cả hai modality attend lẫn nhau
        all_tokens = concat(visual_tokens, action_tokens)
        all_tokens = self.joint_attention(all_tokens)
        
        # Tách ra
        visual_tokens, action_tokens = split(all_tokens)
        return visual_tokens, action_tokens

Sự kết hợp separate modulation + joint attention tạo ra balance tốt nhất: mỗi modality được xử lý phù hợp với bản chất của nó, nhưng vẫn có thể trao đổi thông tin với modality khác.

Flow Matching: Từ nhiễu đến hành động

Đây là phần toán học quan trọng nhất trong Ψ₀. Nhưng đừng lo — tôi sẽ giải thích trực quan trước, rồi mới đưa công thức.

Ý tưởng trực quan

Hãy tưởng tượng bạn đứng giữa một cánh đồng đầy sương mù (nhiễu). Bạn muốn đi đến một ngôi nhà cụ thể (hành động đúng). Flow Matching cho bạn một la bàn — tại mỗi điểm trên cánh đồng, la bàn chỉ hướng bạn nên đi. Nếu bạn đi theo la bàn đủ lâu, bạn sẽ đến được ngôi nhà.

Trong toán học, "la bàn" này là một velocity field (trường vận tốc) v(x, τ) — tại mỗi điểm x trong không gian action và mỗi thời điểm τ (tau), nó cho bạn biết nên di chuyển theo hướng nào.

Công thức cốt lõi

Flow Matching định nghĩa một đường đi thẳng (straight-line path) từ nhiễu đến action:

x(τ) = (1 - τ) · ε + τ · a

Trong đó:

  • ε là nhiễu Gaussian (điểm xuất phát ngẫu nhiên)
  • a là action thật (đích đến)
  • τ ∈ [0, 1] là thời gian — τ=0 là nhiễu thuần, τ=1 là action hoàn chỉnh

Velocity field tương ứng là:

v*(x, τ) = a - ε

Đơn giản đến bất ngờ — velocity field chỉ là hướng từ nhiễu đến action. Model được huấn luyện để dự đoán velocity field này:

Loss = || v_θ(x(τ), τ, c) - (a - ε) ||²

Trong đó c là conditioning (visual features từ System-2), và v_θ là MM-DiT model với tham số θ.

Robot và tự động hóa — ứng dụng của AI trong thế giới vật lý

Flow Matching vs. DDPM Diffusion

Nếu bạn đã đọc về Diffusion Policy, bạn sẽ thấy Flow Matching khác DDPM ở mấy điểm:

Flow Matching DDPM Diffusion
Đường đi Thẳng (linear interpolation) Cong (Markov chain)
Số bước inference Ít (1-10 bước) Nhiều (50-1000 bước)
Tốc độ Nhanh hơn nhiều Chậm
Training stability Ổn định hơn Có thể bất ổn
Chất lượng Tương đương hoặc tốt hơn Tốt

Ψ₀ dùng 10 bước denoising khi inference. Mỗi bước, model lấy trạng thái hiện tại x(τ), dự đoán velocity v, và cập nhật: x(τ + Δτ) = x(τ) + Δτ · v. Sau 10 bước, nhiễu thuần trở thành action hoàn chỉnh.

Action Chunking: Dự đoán cả tương lai

Thay vì dự đoán một action tại một thời điểm, System-1 dự đoán một chunk gồm H actions liên tiếp cùng lúc. Trong Ψ₀, H thường là 16-32 timesteps (tương đương 0.8-1.6 giây ở tần số 20Hz).

Tại sao chunking quan trọng?

  1. Temporal coherence: Khi dự đoán từng action riêng lẻ, các action liên tiếp có thể "giật" — timestep này nói với tay phải sang phải, timestep sau lại nói sang trái. Dự đoán cả chunk đảm bảo chuỗi action mượt mà.

  2. Xử lý latency: Robot mất ~160ms để xử lý một lần inference. Nếu chỉ dự đoán 1 action, robot sẽ "đứng im" 160ms giữa mỗi action. Với chunking, robot có thể thực hiện các action đã dự đoán trong khi model đang tính action tiếp theo.

  3. Hiểu ngữ cảnh dài: Dự đoán 16 bước tương lai đòi hỏi model phải hiểu "kế hoạch" dài hạn hơn, không chỉ phản xạ tức thời.

FAST Tokenizer: Nén action thành token

Một chi tiết kỹ thuật quan trọng: trước khi đưa action vào MM-DiT, Ψ₀ sử dụng FAST tokenizer để mã hóa action liên tục thành token rời rạc. FAST (Fast Action Sequence Tokenizer) nén chuỗi action thành biểu diễn compact bằng cách:

  • Lượng tử hóa (quantize) các giá trị góc khớp
  • Nhóm các DoF có tương quan cao
  • Giảm chiều dữ liệu đáng kể

Điều này giúp MM-DiT xử lý action như "ngôn ngữ" — mỗi token action tương đương một "từ" mô tả hành động. Khi inference xong, output tokens được giải mã (decode) ngược lại thành giá trị góc khớp liên tục.

System-0: Đôi chân tự động — AMO RL Controller

System-0 là phần "giữ thăng bằng" của Ψ₀. Nó là một RL policy (chính sách được huấn luyện bằng Reinforcement Learning) có tên AMO (Agile Mobility Oracle), chịu trách nhiệm điều khiển chân robot.

Input/Output

  • Đầu vào (8 DoF commands): Từ System-1, bao gồm:

    • Vận tốc tịnh tiến x, y (đi trước/sau, sang trái/phải)
    • Vận tốc xoay (yaw rate)
    • Chiều cao thân robot
    • Góc nghiêng thân (pitch, roll)
    • Tần số bước chân
    • Chiều cao bước chân
    • Tỷ lệ stance/swing
  • Đầu ra (15 DoF): Lệnh trực tiếp đến 15 motor ở hai chân (mỗi chân: hông 3-DoF, gối 1-DoF, cổ chân 2-DoF, cộng thêm các DoF phụ).

Tại sao dùng RL, không dùng learned policy?

Locomotion trên robot hai chân là bài toán mà RL đã giải rất tốt. Huấn luyện RL policy cho walking/balancing trong simulation (Isaac Gym, MuJoCo) rồi sim-to-real transfer đã trở thành tiêu chuẩn ngành — Unitree chính là một trong những công ty làm điều này tốt nhất.

Vì RL policy cho locomotion đã rất mature, không có lý do gì phải huấn luyện lại nó end-to-end cùng với manipulation. Việc giữ System-0 riêng biệt có nhiều lợi ích:

  1. Robustness: RL policy đã được test hàng triệu bước trong simulation, rất ổn định.
  2. Safety: Nếu System-1 sinh action lạ cho phần trên, System-0 vẫn giữ robot không ngã.
  3. Modularity: Có thể thay System-0 bằng policy khác mà không ảnh hưởng System-1.

Nếu bạn chưa rõ RL được sử dụng như thế nào trong humanoid locomotion, hãy tham khảo bài về RL cho humanoid trong series Humanoid Robot Engineering.

Action Space: 43 DoF và câu chuyện thay đổi giữa các giai đoạn

Một điểm tinh tế nhưng quan trọng: action space của Ψ₀ thay đổi giữa các giai đoạn huấn luyện. Đây không phải sơ suất — đây là thiết kế có chủ đích.

Pre-training: 48-DoF Task Space

Trong giai đoạn pre-training trên video egocentric (EgoDex), model dự đoán hành động trong task space — tức là vị trí và hướng của bàn tay trong không gian 3D. Cụ thể:

  • Mỗi bàn tay: 6-DoF pose (3 vị trí xyz + 3 hướng rpy) = 12
  • Mỗi ngón tay (simplified): Các góc gập = ~12 mỗi bàn tay × 2 = 24
  • Tổng cộng: ~48 DoF trong task space

Tại sao dùng task space cho pre-training? Vì dữ liệu video người chỉ cho ta biết bàn tay ở đâu (qua hand tracking), không cho biết góc khớp robot cụ thể. Task space là biểu diễn chung giữa người và robot.

Post-training & Fine-tuning: 36-DoF Joint Space

Khi chuyển sang dữ liệu robot thực (giai đoạn 2 và 3), model chuyển sang joint space — trực tiếp điều khiển góc từng khớp:

  • 2 cánh tay × 7-DoF = 14 DoF
  • 2 bàn tay Dex3-1 × 7-DoF = 14 DoF
  • 8 locomotion commands cho System-0
  • Tổng: 36 DoF output từ System-1

Sự chuyển đổi từ task space sang joint space là bước quan trọng — nó cho phép model "dịch" kiến thức tổng quát từ video người sang điều khiển cụ thể trên robot Unitree G1.

Toàn bộ 43-DoF

Con số 43 DoF toàn robot = 28 DoF thân trên (trực tiếp từ System-1) + 15 DoF chân (từ System-0, nhận 8 commands từ System-1):

System-1 Output:
├── 7-DoF cánh tay trái    ─────────── Trực tiếp → Motor
├── 7-DoF cánh tay phải    ─────────── Trực tiếp → Motor  
├── 7-DoF bàn tay trái     ─────────── Trực tiếp → Motor
├── 7-DoF bàn tay phải     ─────────── Trực tiếp → Motor
└── 8-DoF locomotion cmd   ──┐
                              │
System-0 (AMO RL):            │
├── Input: 8-DoF commands  ◄──┘
└── Output: 15-DoF chân    ─────────── Trực tiếp → Motor
                              
Tổng: 28 + 15 = 43 DoF

Real-Time Chunking: Giải quyết latency

Một vấn đề thực tế: model inference mất ~160ms, nhưng robot control loop cần chạy ở 20Hz (50ms mỗi cycle). Làm sao xử lý?

Ψ₀ dùng kỹ thuật Real-Time Chunking:

  1. Tại thời điểm t, model dự đoán chunk H actions: [a_t, a_{t+1}, ..., a_{t+H-1}]
  2. Robot bắt đầu thực hiện a_t ngay lập tức
  3. Trong khi robot thực hiện a_t, a_{t+1}, a_{t+2}... model đang tính chunk tiếp theo
  4. Khi model tính xong (sau ~160ms = ~3 timesteps ở 20Hz), robot có chunk mới
  5. Chunk mới được blend (trộn) với phần còn lại của chunk cũ để tránh giật
Thời gian:  t=0   t=1   t=2   t=3   t=4   t=5   t=6
Chunk 1:   [a0,   a1,   a2,   a3,   a4,   a5,   ...]
                              ↑ model tính xong chunk 2
Chunk 2:                     [a3',  a4',  a5',  a6',  ...]
Thực hiện: [a0,   a1,   a2,  blend(a3,a3'), ...]

Kỹ thuật blending đơn giản nhất: exponential moving average. Action thực thi = α × action_chunk_mới + (1-α) × action_chunk_cũ, với α tăng dần.

Tại sao kiến trúc này hiệu quả: Triết lý "Chia để trị"

Sau khi đi qua từng component, hãy lùi lại và hỏi: tại sao kiến trúc 3 tầng này hoạt động tốt hơn một model monolithic?

1. Mỗi hệ thống dùng đúng loại dữ liệu

  • System-2 (VLM) cần dữ liệu ảnh+text — có sẵn hàng tỷ mẫu trên internet
  • System-1 (action expert) cần dữ liệu hành động — hiếm hơn, nhưng video egocentric giúp bù đắp
  • System-0 (RL) cần dữ liệu simulation — rẻ tiền, có thể sinh vô hạn

2. Mỗi hệ thống có kiến trúc phù hợp

  • VLM cần attention mechanisms cho spatial reasoning — Transformer là lựa chọn tự nhiên
  • Action expert cần sinh chuỗi hành động liên tục — Flow Matching/Diffusion phù hợp
  • Locomotion cần phản xạ nhanh, robust — RL policy nhỏ gọn là tối ưu

3. Fault isolation

Nếu System-1 sinh action lạ (out-of-distribution), System-0 vẫn giữ robot đứng vững. Nếu System-2 nhận diện sai vật thể, chỉ ảnh hưởng quyết định cấp cao, không làm robot ngã. Mỗi hệ thống là một safety boundary.

4. Dễ upgrade từng phần

Khi VLM mới tốt hơn ra đời (ví dụ Qwen4-VL), bạn có thể swap System-2 mà không cần retrain toàn bộ. Khi RL locomotion policy mới ổn định hơn, swap System-0. Đây là lợi thế kinh điển của modular architecture so với end-to-end monolithic models.

So sánh với các kiến trúc robot AI khác — chẳng hạn như những gì được thảo luận trong bài tổng quan Embodied AI 2026 — bạn sẽ thấy xu hướng rõ ràng: ngành đang chuyển từ monolithic sang modular.

Tóm tắt kiến trúc

Component Model Params Input Output Training
System-2 Qwen3-VL-2B 2B Image 320x240 + Text Visual-language features Frozen (pre-trained)
System-1 MM-DiT ~500M Features + Noisy actions Action chunks (28+8 DoF) 3-stage training
System-0 AMO RL Small 8 commands 15 DoF leg joints RL in simulation

Điểm nhấn kỹ thuật:

  • MM-DiT = Separate modulation (mỗi modality xử lý riêng) + Joint attention (giao tiếp chung)
  • Flow Matching = Đường thẳng từ nhiễu đến action, 10 bước inference, nhanh hơn DDPM
  • Action Chunking = Dự đoán 16-32 actions cùng lúc, mượt mà + xử lý latency
  • FAST Tokenizer = Nén action liên tục thành token rời rạc
  • Real-Time Chunking = Blend chunks cũ và mới để robot chạy liên tục ở 20Hz

Trong bài tiếp theo, chúng ta sẽ đi vào EgoDex và pipeline dữ liệu — cách Ψ₀ xây dựng bộ dữ liệu 829 giờ video egocentric, xử lý hand tracking, và tại sao "data recipe" quan trọng hơn "data volume". Bạn sẽ tự tay download và xử lý dữ liệu EgoDex.


Bài viết liên quan

NT

Nguyễn Anh Tuấn

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

Bài viết liên quan

NEWTutorial
Hướng dẫn GigaBrain-0: VLA + World Model + RL
vlaworld-modelreinforcement-learninggigabrainroboticsmanipulation

Hướng dẫn GigaBrain-0: VLA + World Model + RL

Hướng dẫn chi tiết huấn luyện VLA bằng World Model và Reinforcement Learning với framework RAMP từ GigaBrain — open-source, 3.5B params.

12/4/202611 phút đọc
NEWTutorial
StarVLA: Xây dựng VLA Model mô-đun
vlastarvlarobot-manipulationaideep-learningqwen-vlflow-matchingiclr-2026

StarVLA: Xây dựng VLA Model mô-đun

Hướng dẫn chi tiết xây dựng Vision-Language-Action model với StarVLA — framework mô-đun kiểu Lego từ ICLR 2026, hỗ trợ 4 kiến trúc action head.

12/4/202611 phút đọc
NEWTutorial
Hướng dẫn fine-tune NVIDIA GR00T N1
vlahumanoidnvidiaisaac-labfine-tuningdeep-learninggrootsim2real

Hướng dẫn fine-tune NVIDIA GR00T N1

Hướng dẫn chi tiết fine-tune VLA model GR00T N1 cho humanoid robot với Isaac Lab và dữ liệu AGIBOT World — từ cài đặt đến inference.

12/4/202612 phút đọc