- drlzh.ai là khóa học deep reinforcement learning theo hướng thực hành, nơi người học trực tiếp triển khai thuật toán thay vì chỉ đọc, bao quát từ MDP và tabular RL đến RLHF, Decision Transformers, Dreamer và meta-learning
- Các notebook ở thư mục gốc là lộ trình thực hành, trong đó một phần mã được thay bằng các mục TODO có hướng dẫn; còn notebook trong
solution/ chứa phiên bản đầy đủ có thể chạy được để kiểm tra khi bị mắc kẹt
- Chương trình học gồm các notebook
00-18; lộ trình nền tảng được thiết kế để học theo thứ tự, còn các notebook nâng cao là tự hoàn chỉnh nhưng cách đánh số vẫn cung cấp đường học mặc định
- Workspace Docker cung cấp trọn gói code-server, notebook, Python
>=3.13,<3.14, Jupyter kernel, dependency và tiện ích mở rộng VS Code DRL-ZH AI Companion
- Người học cần quen thuộc với Python, kiến thức cơ bản về PyTorch, cùng toán cho ML như xác suất, thống kê, đại số tuyến tính và vi phân; các notebook giả định bạn có thể đọc và chỉnh sửa mã huấn luyện thực tế
Tổng quan dự án
- drlzh.ai là khóa học deep reinforcement learning tập trung vào thực hành, được thiết kế để người học tự xây dựng thuật toán
- Phạm vi học bắt đầu từ MDP và tabular RL, sau đó mở rộng sang các chủ đề sau
- Thuật toán dựa trên tác tử Atari
- Robot điều khiển liên tục
- Lập kế hoạch kiểu AlphaZero
- RLHF cho mô hình ngôn ngữ
- Decision Transformers
- Chính sách kiểu VLA
- World model
- Dreamer
- Meta-learning
- Các notebook ở thư mục gốc là lộ trình luyện tập, trong đó mã được cố ý thay bằng các phần
TODO có hướng dẫn
- Notebook trong
solution/ cung cấp phiên bản đầy đủ và có thể chạy được, giúp người học gỡ chỗ vướng mà không cần rời khỏi khóa học
Cấu trúc chương trình học
- Khóa học gồm các notebook từ
00 đến 18
00-07 Foundations
- Triển khai MDPs, tabular RL, DQN, REINFORCE, actor-critic methods, DDPG, TD3, SAC, PPO
08-10 Breaking assumptions
- Bao quát RND curiosity, multi-agent RL và offline RL với BC và IQL
11 Planning
- Bao quát Monte Carlo Tree Search, self-play và huấn luyện policy/value kiểu AlphaZero
12-13 Modern AI stack
- Bao quát RLHF dựa trên PPO, DPO, GRPO, Decision Transformers, NanoVLA(
DTVLA)
14 Production
- Bao quát TensorBoard, checkpoint, debugging, multiple seeds, Ray, Optuna
15-16 World models
- Bao quát MBPO dựa trên SAC và
DR3AM/Dreamer dùng RSSM latent imagination
17-18 Meta + wrap-up
- Gồm MAML, FOMAML, fast adaptation và phần tổng kết khóa học
- Các notebook nền tảng được xây dựng với giả định học theo thứ tự
- Các notebook nâng cao là tự hoàn chỉnh, nhưng cách đánh số cung cấp lộ trình mặc định từ khám phá đến capstone của khóa học
DRL-ZH AI Companion
- Workspace Docker bao gồm DRL-ZH AI Companion, một tiện ích mở rộng VS Code dành cho khóa học này
- Tiện ích mở rộng nhận diện notebook người dùng đang làm việc và các mục
TODO
- Thay vì đưa đáp án ngay, nó cung cấp gợi ý theo kiểu Socrates
- Hỗ trợ cả chế độ văn bản và chế độ giọng nói
- Người dùng phải tự mang khóa LLM của mình
- Gemini là mặc định
- Cũng hỗ trợ OpenAI, Anthropic, Groq
Môi trường chạy và cách bắt đầu
- Cấu hình được khuyến nghị là Docker
- Docker cung cấp các thành phần sau trong một workspace tái lập được
- code-server
- notebook
- Python
>=3.13,<3.14
- Jupyter kernel
- dependency
- AI Companion
- Quy trình khởi động cơ bản
- Cài Docker và Git, clone kho lưu trữ rồi di chuyển vào thư mục tương ứng
- Trên Linux/macOS, chạy
printf "UID=$(id -u)\nGID=$(id -g)\n" > .env để khớp quyền sở hữu tệp với người dùng
- Khởi động môi trường mặc định
docker compose up --build -d
- Mở
http://localhost:8080 trong trình duyệt dựa trên Chromium và chọn kernel Python (drl-zh)
- Mở
00_Intro.ipynb và bắt đầu điền các TODO
- Nếu cần truy cập GPU NVIDIA, dùng lệnh sau
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build -d
- Với image nhỏ hơn chỉ dành cho CPU, dùng lệnh sau
docker compose -f docker-compose.yml -f docker-compose.cpu.yml up --build -d
- Nếu thích thiết lập native, có thể xem hướng dẫn Python, Poetry, VS Code và Companion trong MANUAL.md
Kiến thức yêu cầu và giấy phép
- Người học cần quen thuộc với
- Python
- Kiến thức cơ bản về PyTorch
- Xác suất, thống kê, đại số tuyến tính, vi phân cần cho ML
- Các notebook dạy chính RL, nhưng giả định bạn có thể đọc và chỉnh sửa mã huấn luyện thực tế
- Giấy phép là MIT; xem chi tiết tại LICENSE
1 bình luận
Ý kiến trên Hacker News
Khi học học tăng cường sâu hiện đại, tôi thấy có nhiều tài liệu tốt, nhưng không tìm được tài liệu nào cân bằng giữa lý thuyết và thực hành đúng với trải nghiệm của mình, nên tôi tự làm và công bố mã nguồn mở
Trong loạt notebook Python, tôi đã triển khai lại từ đầu các thuật toán như QLearning, DQN, SAC, PPO, và thiết kế để người học đi từng bước qua lý thuyết lẫn bài tập lập trình cho đến các kỹ thuật hiện đại khoảng năm 2018/2019
Tiêu đề lấy cảm hứng từ "Neural Network: Zero To Hero" của Andrej Karpathy, và tôi cũng định làm video YouTube nhưng vẫn chưa có thời gian
Tài liệu tham khảo: https://github.com/alessiodm/drl-zh/blob/main/00_Intro.ipynb, https://karpathy.ai/zero-to-hero.html
Nếu sau này mở rộng thêm các chương, tôi nghĩ nên bàn về phải làm gì khi mọi thứ hỏng, thay vì chỉ những thứ đơn giản vốn đã chạy tốt
Ví dụ như hành vi cứ bị stuck ở giá trị tối đa, hoặc dù thêm bao nhiêu nhiễu vào học off-policy thì quá trình khám phá vẫn không bắt đầu
Phần cơ bản thì nhìn chung chạy được, nhưng tôi muốn có thêm tài liệu thực chiến dùng khi bỗng gặp những vấn đề mà gần như không ai nói kỹ
Trong các ứng dụng học tăng cường sâu thực tế, số trường hợp không chạy tốt nhiều hơn số trường hợp chạy tốt, và tutorial này cũng còn thiếu phần xử lý sự cố, tinh chỉnh và sản phẩm hóa
Nếu có thời gian mở rộng, tôi sẽ ưu tiên phần này: https://www.alexirpan.com/2018/02/14/rl-hard.html
Tôi đã học học tăng cường tới ba học kỳ ở đại học, nhưng rất thất vọng khi biết các kỹ thuật học tăng cường mới nhất còn không thắng nổi heuristic đơn giản trong Tetris
Các khái niệm học tăng cường cũng như công cụ khác: quan trọng là tìm đúng nơi để dùng
Trong các lớp học, phần cho thấy những ý tưởng mạnh mẽ có thể dùng ở đâu trong thực tế thường bị thiếu
Nói về chính sách tối ưu thì hay, nhưng nếu không giúp người học hiểu áp dụng ở đâu, nó dễ chỉ còn là một tập hợp toán học thú vị
Dù vậy, tôi nghĩ ít nhất cũng đáng học các nguyên lý và nền tảng
Khác với học có giám sát, học không giám sát và học bán giám sát đang được chú ý nhiều gần đây, học tăng cường mô hình hóa bài toán học theo cách rất thanh nhã: một tác nhân tương tác với môi trường và nhận phản hồi
Ngày nay vẫn có các thành công thực dụng như tinh chỉnh LLM bằng RLHF, các công ty robotics như Covariant, hay nghiên cứu kết hợp LLM với học tăng cường như Nvidia Eureka: https://www.alexirpan.com/2018/02/14/rl-hard.html, https://blogs.nvidia.com/blog/eureka-robotics-research/
Tôi đã tạo một framework học tăng cường sâu cho tạo nhạc, tương tự OpenAI Gym
Nếu muốn thử các thuật toán trong bài gốc thì bạn có thể dùng, issue và PR cũng được hoan nghênh
https://github.com/chaosprint/RaveForce
Trước đây tôi từng tự tìm hiểu học tăng cường sâu, nhưng agent không tạo được tiến triển đáng kể, còn tôi thì gần như không có nền tảng thống kê hay học máy nên rất khó debug xem sai ở đâu
Tôi định thử theo tài liệu này để xem kết quả thế nào
Nếu chỉ muốn xem thuật toán có thực sự chạy hay không, bạn có thể chọn một thuật toán có vẻ hoạt động trong thư mục
solutionvà chạy ngayNếu chạy tốt, sau đó bạn có thể tận hưởng việc triển khai lại từ đầu
Tôi nghĩ cần nói rõ điều đó với người mới bắt đầu
Đây là phần tôi thấy đáng tiếc nhất trong các chủ đề học máy, đặc biệt là những chủ đề liên quan đến học tăng cường
Vài năm trước tôi cũng làm một thứ tương tự. Không đi đến PPO và phong cách cũng khác
https://learndrl.com/
Không có ý nói tốt hơn hay kém hơn, nhưng với người học thì luôn tốt khi tiếp cận cùng một thông tin dưới nhiều hình thức
Sau khi xem ví dụ MDP, tôi muốn góp ý về cách giới thiệu hàm chuyển trạng thái không quyết định
Trong ví dụ hiện tại, tính không quyết định xuất hiện theo kiểu agent cố đi lên hoặc xuống nhưng vô tình đi sang trái hoặc phải; tuy nhiên phần văn bản chưa giải thích đủ rằng agent mắc lỗi, nên ban đầu chú thích của hàm
transition()khá gây nhầm lẫnNgoài ra, về mặt sư phạm, có thể tốt hơn nếu giới thiệu tính không quyết định là đến từ môi trường chứ không phải từ agent. Ví dụ, khi di chuyển trên bề mặt gồ ghề, dù có điều khiển bánh xích hay chi thể thì kết quả không phải lúc nào cũng đúng như ý định
Cách diễn đạt hiện tại trông như một hàm từ hành động sang hành động ngẫu nhiên rồi lại sang trạng thái ngẫu nhiên, trong khi định nghĩa là hàm từ hành động sang trạng thái ngẫu nhiên
Ban đầu tôi định dùng lời thoại trong video để lấp các khoảng trống của phần văn bản, nhưng vì chưa có thời gian làm video nên trước mắt tôi đang sửa những khoảng trống đó
Phải đọc khá nhiều notebook thứ ba rồi tôi mới nhận ra các đoạn code được đánh dấu
TODOthực ra là bài tập lập trình mà người đọc cần tự triển khai, còn các bài test phía sau dùng để kiểm tra đáp án của mìnhĐây là cách tiếp cận thông minh, nhưng ngay từ đầu thì không thật sự rõ ràng
Ban đầu tôi tưởng các chi tiết nhỏ được để lại dưới dạng TODO để không làm gián đoạn bức tranh tổng thể, nhưng thực ra đó lại là các phần cốt lõi
TODOcó thể gây nhầm lẫn, nên đã cập nhật hướng dẫn trong README.md để ghi rõ đó là các đoạn lập trình cần hoàn thànhTôi đã học lý thuyết nhưng vẫn lơ lửng trong trạng thái thiếu kiến thức thực hành cần thiết để thực sự dùng học tăng cường; tài liệu này trông đúng kiểu khóa học tôi đang tìm
Trông hay đấy, nhưng sẽ tốt hơn nếu thêm liên kết video YouTube vào README
Dù vậy cộng đồng có vẻ quan tâm nên tôi sẽ thử làm, còn trong lúc đó tôi sẽ sửa README