TL;DR: DQN là sự kết hợp giữa Q‑learning và mạng nơ‑ron sâu để học hàm giá trị hành động trong không gian trạng thái lớn (như ảnh). Hai chìa khóa ổn định là Experience Replay và Target Network; khám phá thường dùng -greedy. DQN phù hợp cho hành động rời rạc; biến thể phổ biến gồm Double, Dueling, PER, Noisy, N‑step, Rainbow.
Mục lục
- 1. Machine Learning và vị trí của Reinforcement Learning
- 2. Bài toán RL và mô hình MDP
- 3. Q‑learning nền tảng
- 4. Deep Q‑Network (DQN)
- 5. Hai kỹ thuật ổn định cốt lõi
- 6. Khám phá với (\varepsilon)-greedy
- 7. Quy trình huấn luyện DQN
- 8. Pseudocode tối giản
- 9. Biến thể quan trọng
- 10. Thực hành & siêu tham số gợi ý
- 11. Khi nào dùng/không dùng DQN
- 12. Bẫy thường gặp
- 13. Ứng dụng thực tế
- 14. Tài liệu tham khảo ngắn
1. Machine Learning và vị trí của Reinforcement Learning
Machine Learning (ML) là nhánh của AI cho phép mô hình học từ dữ liệu/kinh nghiệm để đưa ra dự đoán hoặc quyết định. Ba nhánh lớn thường gặp:
- Supervised learning: có nhãn, tối ưu dự đoán từ .
- Unsupervised learning: không nhãn, khám phá cấu trúc dữ liệu (clustering, giảm chiều, …).
- Reinforcement learning (RL): học từ tương tác với môi trường để tối đa hóa tổng phần thưởng chiết khấu.
DQN thuộc RL, giải quyết các tác vụ hành động rời rạc trên không gian trạng thái lớn (vd. ảnh Atari).
2. Bài toán RL và mô hình MDP
Một tác tử (agent) tương tác với môi trường theo các bước thời gian :
- quan sát trạng thái ,
- chọn hành động ,
- nhận phần thưởng và trạng thái mới .
Mục tiêu là tối đa hóa
Bài toán thường mô hình là MDP (Markov Decision Process) với . Hai hàm giá trị quan trọng:
- Giá trị trạng thái:
- Giá trị hành động:
3. Q‑learning nền tảng
Q‑learning học trực tiếp thông qua phương trình tối ưu Bellman:
Bản cổ điển dùng bảng (Q‑table) → không khả thi khi trạng thái lớn/ảnh.
4. Deep Q‑Network (DQN)
Ý tưởng: thay Q‑table bằng mạng nơ‑ron để xấp xỉ .
Mục tiêu học: khớp dự đoán với đích Bellman:
trong đó là tham số mạng online, là tham số mạng target (cập nhật chậm).
Hàm mất mát (thường dùng Huber để ổn định):
5. Hai kỹ thuật ổn định cốt lõi
- Experience Replay: lưu mẫu vào bộ đệm , lấy mini‑batch ngẫu nhiên để phá vỡ tương quan thời gian và tái sử dụng dữ liệu hiệu quả.
- Target Network: sao chép định kỳ (cập nhật cứng) hoặc cập nhật mềm nhằm cố định mục tiêu trong ngắn hạn → huấn luyện ổn định.
6. Khám phá với (\varepsilon)-greedy
- Với xác suất , chọn hành động ngẫu nhiên (khám phá).
- Ngược lại, chọn (khai thác).
- Giảm dần (vd. 1.0 → 0.05) theo số bước huấn luyện.
7. Quy trình huấn luyện DQN
- Khởi tạo mạng Q online và Q target (cùng kiến trúc), .
- Khởi tạo replay buffer .
- Lặp qua các bước/episode:
- Quan sát ; chọn theo -greedy.
- Thực thi → nhận ; đẩy mẫu vào .
- Lấy một mini‑batch từ ; tính và tối ưu bằng SGD/Adam.
- Mỗi bước, cập nhật target (cứng) hoặc dùng cập nhật mềm đều đặn.
- Giảm theo lịch khám phá.
8. Pseudocode tối giản
# Khởi tạo
Q_online, Q_target = init_networks()
Q_target.load_state_dict(Q_online.state_dict())
replay = ReplayBuffer(capacity)
epsilon = 1.0
for t in range(total_steps):
# Chọn hành động
if random() < epsilon:
a = random_action()
else:
a = argmax(Q_online(s)) # Q_online(s) -> Q cho mọi action
s_next, r, done = env.step(a)
replay.push(s, a, r, s_next, done)
s = s_next if not done else env.reset()
# Học khi đủ dữ liệu
if len(replay) >= warmup and t % learn_every == 0:
batch = replay.sample(batch_size)
with torch.no_grad():
q_next = Q_target(batch.s_next).max(dim=1).values
y = batch.r + gamma * (1 - batch.done) * q_next
q_sa = Q_online(batch.s).gather(1, batch.a.unsqueeze(1)).squeeze(1)
loss = huber(q_sa - y)
optimizer.zero_grad()
loss.backward()
clip_grad_norm_(Q_online.parameters(), 10.0)
optimizer.step()
# Cập nhật target định kỳ
if t % target_update == 0:
Q_target.load_state_dict(Q_online.state_dict())
# Giảm epsilon
epsilon = max(eps_min, eps_max - (eps_max - eps_min) * t / eps_decay_steps)
9. Biến thể quan trọng
- Double DQN: giảm overestimation bias bằng cách chọn hành động tối ưu bằng mạng online nhưng đánh giá bằng mạng target:
- Dueling DQN: tách mạng thành Value và Advantage , rồi kết hợp
- Prioritized Experience Replay (PER): ưu tiên mẫu có |TD‑error| lớn; dùng trọng số bù lệch (IS weights).
- Noisy Networks: thay -greedy bằng lớp tuyến tính có nhiễu để khám phá có điều khiển.
- N‑step returns: dùng -bước để lan truyền tín hiệu thưởng nhanh hơn.
- Distributional DQN (C51), Quantile (QR‑DQN), Rainbow: kết hợp nhiều cải tiến để đạt hiệu năng cao.
10. Thực hành & siêu tham số gợi ý
CartPole (trạng thái vector, 2 hành động):
- Mạng: MLP 2 tầng ẩn (128‑128, ReLU), đầu ra 2 giá trị .
- ; batch=64; lr=1e-3; buffer=50k–200k;
- Bắt đầu học sau 1–5k bước; cập nhật target mỗi 500–2k bước;
- : 1.0 ↓ 0.05 trong ~100k bước; Huber loss, gradient clipping.
Atari (ảnh):
- Tiền xử lý: chuyển xám, resize 84×84, stack 4 khung.
- CNN 3 conv + 2 FC theo cấu hình DQN gốc; có thể reward clipping.
11. Khi nào dùng/không dùng DQN
- Dùng: hành động rời rạc, quan sát lớn (ảnh/video), phần thưởng không quá khan hiếm.
- Không dùng: hành động liên tục (dùng DDPG/TD3/SAC), yêu cầu chính sách xác suất phức tạp.
12. Bẫy thường gặp
- Bất ổn huấn luyện → dùng target network, replay, Huber loss, gradient clipping.
- Thiếu khám phá → kéo dài lịch giảm hoặc dùng NoisyNet.
- Phần thưởng hiếm/ồn → n‑step, reward clipping/normalization, dueling.
- Overfitting buffer nhỏ → tăng kích thước , xáo trộn mạnh.
13. Ứng dụng thực tế
- Chơi game (Atari), điều khiển (robot rời rạc), scheduling, tối ưu hoá chiến lược thử nghiệm, A/B testing động, hệ thống khuyến nghị có tương tác tuần tự (khi hành động rời rạc).
14. Tài liệu tham khảo ngắn
- Mnih et al., 2015 – Human-level control through deep reinforcement learning (DQN).
- Hasselt et al., 2016 – Deep Reinforcement Learning with Double Q-learning (Double DQN).
- Wang et al., 2016 – Dueling Network Architectures for Deep RL (Dueling).
- Schaul et al., 2016 – Prioritized Experience Replay (PER).
- Hessel et al., 2018 – Rainbow: Combining Improvements in Deep RL.
- Sutton & Barto – Reinforcement Learning: An Introduction (sách giáo khoa).
Tài liệu tham khảo:
Chúc bạn thành công với Deep Q-Network! 🚀🤖