← Quay lại Blog
aiai-perceptionrlprogramming

RL cho Robotics: PPO, SAC và cách chọn algorithm

Tổng quan RL algorithms cho robotics — PPO, SAC, TD3 và hướng dẫn chọn algorithm phù hợp cho từng bài toán robot.

Nguyễn Anh Tuấn5 tháng 3, 202610 phút đọc
RL cho Robotics: PPO, SAC và cách chọn algorithm

Reinforcement Learning cho Robotics — Không chỉ là chơi game

Khi nói đến Reinforcement Learning (RL), nhiều người nghĩ ngay đến AlphaGo hay AI chơi Atari. Nhưng RL cho robotics là một thế giới hoàn toàn khác — robot phải tương tác với thế giới vật lý thực, nơi mà mỗi hành động đều có hậu quả (và có thể phá hỏng robot).

Trong bài đầu tiên của series "AI cho Robot", mình sẽ giới thiệu 3 RL algorithms quan trọng nhất cho robotics hiện nay: PPO, SAC, và TD3 — phân tích ưu nhược điểm và hướng dẫn chọn algorithm phù hợp cho từng loại bài toán.

Robot arm học reinforcement learning trong môi trường simulation

MDP: Ngôn ngữ chung của RL

Trước khi dive vào algorithms, cần hiểu Markov Decision Process (MDP) — framework cơ bản của mọi bài toán RL:

Ví dụ: Robot arm gắp vật

State:  [joint_angles (6D), gripper_pos (3D), object_pos (3D)] = 12D
Action: [joint_velocities (6D), gripper_open/close (1D)] = 7D
Reward: +1 khi gắp thành công, -0.01 mỗi step (khuyến khích nhanh)

Điểm khác biệt lớn giữa RL cho robotics và RL cho games:

Games (Atari, Go) Robotics
Action space Discrete (lên/xuống/trái/phải) Continuous (torque, velocity)
State space Pixels (đơn giản) High-dimensional (joints + sensors)
Safety Reset miễn phí Phá hỏng robot = tốn tiền
Sample Millions of steps nhanh Mỗi step mất thời gian thực
Reward Dense (score tăng liên tục) Sparse (chỉ +1 khi thành công)

Những đặc điểm này quyết định việc chọn algorithm — và tại sao không phải algorithm nào cũng phù hợp cho robot.

PPO: On-Policy, Ổn định, Phổ biến nhất

Proximal Policy Optimization (PPO) (Schulman et al., 2017) là algorithm RL phổ biến nhất trong robotics hiện nay. Từ OpenAI Five đến locomotion policies của nhiều lab nghiên cứu, PPO là lựa chọn mặc định.

Cách hoạt động

PPO thuộc nhóm policy gradient — trực tiếp optimize policy bằng gradient ascent. Điểm đặc biệt: PPO giới hạn mức thay đổi policy mỗi lần update bằng clipped objective:

L_CLIP = E[min(r(θ) × A, clip(r(θ), 1-ε, 1+ε) × A)]

r(θ) = π_new(a|s) / π_old(a|s)   // tỷ lệ xác suất
A = advantage estimate              // hành động tốt hơn trung bình bao nhiêu
ε = 0.2 (thường dùng)              // giới hạn thay đổi

Điều này đảm bảo policy không thay đổi quá nhiều mỗi lần update — rất quan trọng cho robot vì sự thay đổi đột ngột có thể gây mất ổn định.

Ưu điểm

Nhược điểm

Khi nào dùng PPO?

PPO là lựa chọn hàng đầu cho:

SAC: Off-Policy, Sample Efficient, Liên tục

Soft Actor-Critic (SAC) (Haarnoja et al., 2018) là câu trả lời cho vấn đề sample efficiency của PPO. SAC là off-policy algorithm — có thể tái sử dụng data cũ, giảm số lượng samples cần thiết.

Cách hoạt động

SAC tối ưu hóa maximum entropy objective — không chỉ maximize reward mà còn maximize entropy (sự đa dạng) của policy:

J(π) = E[Σ γ^t (r(s_t, a_t) + α × H(π(·|s_t)))]

H(π) = -E[log π(a|s)]   // entropy của policy
α = temperature           // cân bằng reward vs exploration

Entropy bonus khiến robot không chỉ học 1 cách làm mà học nhiều cách — nếu cách chính thất bại, có cách dự phòng. Rất quan trọng cho manipulation nơi môi trường thay đổi.

Ưu điểm

Nhược điểm

Khi nào dùng SAC?

SAC lý tưởng cho:

TD3: Off-Policy, Chống Overestimation

Twin Delayed DDPG (TD3) (Fujimoto et al., 2018) là phiên bản cải tiến của DDPG, giải quyết vấn đề Q-value overestimation — khi model đánh giá quá cao giá trị của hành động, dẫn đến policy tệ.

Ba kỹ thuật chính

  1. Twin Q-networks: Dùng 2 Q-networks, lấy min để giảm overestimation
  2. Delayed policy update: Chỉ update policy mỗi 2 lần update Q (giảm error propagation)
  3. Target policy smoothing: Thêm noise vào target actions (regularization)
# TD3 core: lấy min của 2 Q-networks
Q_target = reward + gamma * min(Q1_target(s_next, a_next), Q2_target(s_next, a_next))
# a_next = policy_target(s_next) + clipped_noise

So sánh nhanh TD3 vs SAC

TD3 SAC
Policy Deterministic Stochastic
Exploration Thêm noise thủ công Entropy bonus tự động
Multi-modal Không
Tuning Dễ hơn Alpha tự động nhưng phức tạp hơn

Bảng so sánh tổng hợp

Tiêu chí PPO SAC TD3
On/Off-policy On-policy Off-policy Off-policy
Sample efficiency Thấp Cao Cao
Training stability Rất cao Cao Trung bình
Continuous actions Có (tốt nhất)
Discrete actions Không (bản gốc) Không
Hyperparameter sensitivity Thấp Trung bình Trung bình
Multi-modal policy Có (stochastic) Có (stochastic) Không (deterministic)
Memory usage Thấp Cao (replay buffer) Cao (replay buffer)
Implementation complexity Đơn giản Phức tạp Trung bình
Best for Locomotion, sim Manipulation Simple control

So sánh hiệu suất các RL algorithms cho robotics tasks

Hướng dẫn chọn algorithm

Flowchart đơn giản để chọn algorithm:

  1. Bài toán có discrete actions không? → Dùng PPO
  2. Có thể train trong simulation không? → Dùng PPO (triệu steps miễn phí)
  3. Phải train trên real robot? → Dùng SAC (sample efficient nhất)
  4. Manipulation với continuous control? → Dùng SAC
  5. Cần simple baseline? → Dùng TD3

Trong thực tế, PPO cho locomotionSAC cho manipulation là combo phổ biến nhất trong các lab robotics.

Thực hành: Train PPO với Stable Baselines3

Hãy bắt đầu với ví dụ đơn giản — train robot đi bộ 2 chân bằng PPO. Stable Baselines3 là thư viện RL phổ biến nhất, wrap các algorithm thành API dễ dùng.

"""
Train PPO cho BipedalWalker — robot 2 chân học đi bộ
Yêu cầu: pip install stable-baselines3[extra] gymnasium
"""
import gymnasium as gym
from stable_baselines3 import PPO
from stable_baselines3.common.env_util import make_vec_env
from stable_baselines3.common.callbacks import EvalCallback

# 1. Tạo môi trường — 8 environments song song để tăng sample speed
env = make_vec_env("BipedalWalker-v3", n_envs=8)
eval_env = make_vec_env("BipedalWalker-v3", n_envs=1)

# 2. Khởi tạo PPO với hyperparameters tốt cho locomotion
model = PPO(
    policy="MlpPolicy",
    env=env,
    learning_rate=3e-4,
    n_steps=2048,           # Steps mỗi env trước mỗi update
    batch_size=64,
    n_epochs=10,            # Số lần lặp qua data mỗi update
    gamma=0.99,             # Discount factor
    gae_lambda=0.95,        # GAE lambda cho advantage estimation
    clip_range=0.2,         # PPO clip range (epsilon)
    ent_coef=0.01,          # Entropy bonus — khuyến khích exploration
    verbose=1,
    tensorboard_log="./logs/ppo_bipedal/",
)

# 3. Callback để evaluate và save best model
eval_callback = EvalCallback(
    eval_env,
    best_model_save_path="./models/ppo_bipedal/",
    log_path="./logs/ppo_bipedal/",
    eval_freq=10000,        # Evaluate mỗi 10K steps
    deterministic=True,
    render=False,
)

# 4. Train! BipedalWalker cần khoảng 1-2 triệu steps để hội tụ
model.learn(
    total_timesteps=2_000_000,
    callback=eval_callback,
    progress_bar=True,
)

# 5. Test model đã train
model = PPO.load("./models/ppo_bipedal/best_model")
env = gym.make("BipedalWalker-v3", render_mode="human")

obs, _ = env.reset()
total_reward = 0

for _ in range(1000):
    action, _ = model.predict(obs, deterministic=True)
    obs, reward, terminated, truncated, info = env.step(action)
    total_reward += reward

    if terminated or truncated:
        print(f"Episode reward: {total_reward:.1f}")
        obs, _ = env.reset()
        total_reward = 0

env.close()

Giải thích các hyperparameters quan trọng

Parameter Giá trị Ý nghĩa
n_steps 2048 Số steps thu thập trước mỗi update. Lớn = ổn định hơn, nhỏ = nhanh hơn
n_epochs 10 Số lần lặp qua data. PPO cho phép nhiều epochs nhờ clipping
clip_range 0.2 Giới hạn thay đổi policy. 0.1-0.3 thường tốt
ent_coef 0.01 Entropy bonus. Tăng lên nếu robot không explore đủ
gae_lambda 0.95 Bias-variance tradeoff cho advantage. 1.0 = low bias, 0.0 = low variance

Mẹo khi train RL cho robot

  1. Luôn bắt đầu trong simulation: Isaac Gym, MuJoCo, PyBullet — train nhanh gấp 1000x real
  2. Reward shaping rất quan trọng: Reward sparse (+1 khi xong) hiếm khi hoạt động. Thêm reward trung gian (khoảng cách đến mục tiêu, hướng đi đúng...)
  3. Normalize observations: Robot sensors có range khác nhau — normalize về [-1, 1]
  4. Log mọi thứ: TensorBoard là bạn thân tốt nhất khi debug RL

Bước tiếp theo

RL là nền tảng, nhưng đối với nhiều bài toán manipulation, imitation learning lại hiệu quả hơn nhiều — đặc biệt khi bạn có thể demonstration từ người. Trong bài tiếp theo, mình sẽ giới thiệu Imitation Learning: BC, DAgger và DAPG cho robot — những phương pháp học từ demonstration.

Đọc thêm về ứng dụng RL cho locomotion: RL cho Bipedal Walking: Từ simulation đến robot thực


Bài viết liên quan

Bài viết liên quan

TutorialNVIDIA Isaac Lab: GPU-accelerated RL training từ zero
simulationisaac-simrlPhần 3

NVIDIA Isaac Lab: GPU-accelerated RL training từ zero

Setup Isaac Lab, train locomotion policy với 4096 parallel environments và domain randomization trên GPU.

1/4/202611 phút đọc
Sim-to-Real Transfer: Train simulation, chạy thực tế
ai-perceptionresearchrobotics

Sim-to-Real Transfer: Train simulation, chạy thực tế

Kỹ thuật chuyển đổi mô hình từ simulation sang robot thật — domain randomization, system identification và best practices.

1/4/202612 phút đọc
Deep DiveDomain Randomization: Chìa khóa Sim-to-Real Transfer
simulationsim2realrlPhần 4

Domain Randomization: Chìa khóa Sim-to-Real Transfer

Lý thuyết và thực hành domain randomization — visual, dynamics, sensor randomization với case studies thành công.

26/3/202610 phút đọc