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.
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:
- State (s): Trạng thái hiện tại của robot (vị trí joints, velocity, camera image...)
- Action (a): Hành động robot thực hiện (torque, velocity command, gripper open/close)
- Reward (r): Tín hiệu phản hồi — robot làm tốt hay không
- Transition (P): Môi trường thay đổi thế nào sau hành động
- Policy (π): Chiến lược của robot — cho state s, chọn action a nào?
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
- Ổn định: Hiếm khi diverge, dù hyperparameters không hoàn hảo
- Đơn giản implement: So với TRPO (phải tính Hessian), PPO chỉ cần gradient bình thường
- Song song hóa tốt: Collect data từ nhiều environments cùng lúc
- Hoạt động với cả discrete và continuous actions
Nhược điểm
- Sample inefficient: Cần hàng triệu steps vì on-policy (dùng data 1 lần rồi bỏ)
- Không phù hợp cho real robot: Quá nhiều samples = quá nhiều giờ chạy robot thực
- Hyperparameter sensitive với một số tasks
Khi nào dùng PPO?
PPO là lựa chọn hàng đầu cho:
- Locomotion (đi bộ, chạy, nhảy) — reward dense, có thể train trong simulation
- Sim-to-real — train triệu steps trong sim, transfer sang robot thực
- Multi-agent — nhiều robot học cùng lúc
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
- Sample efficient: Off-policy, replay buffer — dùng lại data cũ nhiều lần
- Stable training: Entropy regularization + dual Q-networks
- Continuous actions: Thiết kế đặc biệt cho continuous action space (robot joints)
- Automatic temperature tuning: Tự động điều chỉnh alpha
Nhược điểm
- Phức tạp hơn PPO: 5 networks (2 Q, 2 Q-target, 1 policy)
- Không hỗ trợ discrete actions (bản gốc)
- Replay buffer tốn memory: Lưu tất cả transitions
Khi nào dùng SAC?
SAC lý tưởng cho:
- Manipulation (gắp, đặt, lắp ráp) — sample efficiency quan trọng
- Train trên real robot — mỗi sample quý giá, không thể lãng phí
- Continuous control — robot arms, grippers
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
- Twin Q-networks: Dùng 2 Q-networks, lấy min để giảm overestimation
- Delayed policy update: Chỉ update policy mỗi 2 lần update Q (giảm error propagation)
- 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 | Có |
| 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ó | Có (tốt nhất) | Có |
| Discrete actions | Có | 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 |
Hướng dẫn chọn algorithm
Flowchart đơn giản để chọn algorithm:
- Bài toán có discrete actions không? → Dùng PPO
- Có thể train trong simulation không? → Dùng PPO (triệu steps miễn phí)
- Phải train trên real robot? → Dùng SAC (sample efficient nhất)
- Manipulation với continuous control? → Dùng SAC
- Cần simple baseline? → Dùng TD3
Trong thực tế, PPO cho locomotion và SAC 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
- Luôn bắt đầu trong simulation: Isaac Gym, MuJoCo, PyBullet — train nhanh gấp 1000x real
- 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...)
- Normalize observations: Robot sensors có range khác nhau — normalize về [-1, 1]
- 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
- Imitation Learning: BC, DAgger và DAPG cho robot — Phần 2 của series AI cho Robot
- RL cho Bipedal Walking: Từ simulation đến robot thực — Áp dụng PPO cho robot 2 chân
- Sim-to-Real Transfer: Train simulation, chạy thực tế — Chuyển model từ sim sang robot thật
- Foundation Models cho Robot: RT-2, Octo, OpenVLA thực tế — Xu hướng mới nhất trong robot AI