- drlzh.ai は、ディープ強化学習を読むだけでなくアルゴリズムを自分で実装する実習型コースであり、MDP と表形式 RL から RLHF、Decision Transformers、Dreamer、メタラーニングまでを扱う
- ルートのノートブックはコードの一部がガイド付きの TODO に置き換えられた実習トラックで、
solution/ ノートブックには行き詰まったときに確認できる完全実行版が入っている
- カリキュラムは
00-18 のノートブックで構成され、基礎トラックは順番どおりに進めるよう設計されており、高度なノートブックは 自己完結型 だが番号が基本の学習パスを提供する
- Docker ワークスペースは code-server、ノートブック、Python
>=3.13,<3.14、Jupyter カーネル、依存関係、DRL-ZH AI Companion VS Code 拡張をまとめて提供する
- 学習者は Python、PyTorch の基礎、確率・統計・線形代数・微分などの ML 数学に慣れている必要があり、ノートブックは実際の学習コードを読んで修正できることを前提としている
プロジェクト概要
- drlzh.ai は、実践重視の ディープ強化学習コース で、アルゴリズムを自分で作るよう構成されている
- 学習範囲は MDP と表形式 RL から始まり、次のトピックへと広がる
- Atari エージェント系アルゴリズム
- 連続制御ロボット
- AlphaZero スタイルの計画
- 言語モデル向け RLHF
- Decision Transformers
- VLA スタイルのポリシー
- ワールドモデル
- Dreamer
- メタラーニング
- ルートのノートブックは 練習トラック であり、コードが意図的にガイド付き
TODO セクションへ置き換えられている
solution/ ノートブックは完全で実行可能なバージョンを提供し、学習者がコースの外に出ることなく詰まった箇所を解決できる
カリキュラム構成
- コースは
00 から 18 までのノートブックで構成される
00-07 Foundations
- MDPs、tabular RL、DQN、REINFORCE、actor-critic methods、DDPG、TD3、SAC、PPO を実装する
08-10 Breaking assumptions
- RND curiosity、multi-agent RL、BC と IQL を使った offline RL を扱う
11 Planning
- Monte Carlo Tree Search、self-play、AlphaZero スタイルの policy/value 学習を扱う
12-13 Modern AI stack
- PPO ベースの RLHF、DPO、GRPO、Decision Transformers、NanoVLA(
DTVLA) を扱う
14 Production
- TensorBoard、チェックポイント、デバッグ、multiple seeds、Ray、Optuna を扱う
15-16 World models
- SAC ベースの MBPO と RSSM latent imagination を使う
DR3AM/Dreamer を扱う
17-18 Meta + wrap-up
- MAML、FOMAML、fast adaptation、コースの締めくくりで構成される
- 基礎ノートブックは 順番に進める ことを前提としている
- 高度なノートブックは自己完結型だが、番号が探索からコースのキャップストーンまでの基本ルートを提供する
DRL-ZH AI Companion
- Docker ワークスペースには、このコース向けの VS Code 拡張 DRL-ZH AI Companion が含まれている
- 拡張は、ユーザーが作業中のノートブックと
TODO を認識する
- 答えを直接与える代わりに ソクラテス式のヒント を提供する
- テキストモードと音声モードをサポートする
- LLM キーはユーザー自身で持ち込む必要がある
- Gemini がデフォルト
- OpenAI、Anthropic、Groq もサポートされる
実行環境と始め方
- 推奨設定は Docker
- Docker は次の要素を 1 つの再現可能なワークスペースとして提供する
- code-server
- ノートブック
- Python
>=3.13,<3.14
- Jupyter カーネル
- 依存関係
- AI Companion
- 基本の開始手順
- Docker と Git をインストールし、リポジトリをクローンして該当ディレクトリへ移動する
- Linux/macOS では
printf "UID=$(id -u)\nGID=$(id -g)\n" > .env を実行して、ファイル所有権をユーザーに合わせる
- 基本環境を起動する
docker compose up --build -d
- Chromium ベースのブラウザで
http://localhost:8080 を開き、Python (drl-zh) カーネルを選択する
00_Intro.ipynb を開き、TODO を埋め始める
- NVIDIA GPU へのアクセスが必要なら次のコマンドを使う
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build -d
- より小さい CPU 専用イメージは次のコマンドを使う
docker compose -f docker-compose.yml -f docker-compose.cpu.yml up --build -d
- ネイティブ環境を好む場合は、MANUAL.md で Python、Poetry、VS Code、Companion の手順を確認できる
必要な知識とライセンス
- 学習者は次に慣れている必要がある
- Python
- PyTorch の基礎
- ML に必要な確率、統計、線形代数、微分
- ノートブックは RL 自体を教えるが、実際の 学習コード を読んで修正できることを前提としている
- ライセンスは MIT で、詳細は LICENSE にある
1件のコメント
Hacker Newsのコメント
最新の深層強化学習を学ぶ中で良い資料はたくさんあったものの、理論と実践のバランスが自分の経験にちょうど合うものが見つからなかったため、自分で作ってオープンソースとして公開した
Pythonノートブックのシリーズで、QLearning、DQN、SAC、PPOといったアルゴリズムをゼロから再実装し、2018年/2019年ごろの最先端手法まで、理論とコーディング演習を段階的に追える構成にした
タイトルはAndrej Karpathyの"Neural Network: Zero To Hero"から取っており、YouTube動画も作るつもりだったが、まだ時間がなかった
参考資料: https://github.com/alessiodm/drl-zh/blob/main/00_Intro.ipynb, https://karpathy.ai/zero-to-hero.html
あとで章をさらに拡張するなら、すでにうまく動く単純な内容よりも、壊れたときにどうするかを扱うとよいと思う
たとえば行動がずっと最大値に張り付いてしまうとか、オフポリシー学習でどれだけノイズを入れても探索が始まらないといった問題だ
基本はだいたい動くものの、突然だれもあまり語らない問題が出てきたときに使える実践的な資料がもっとあればと思う
実際の深層強化学習の応用では、うまくいく場合よりもうまくいかない場合のほうが多く、このチュートリアルも問題解決、チューニング、製品化の面は不足している
拡張する時間ができたら、この部分を優先したいと思っている: https://www.alexirpan.com/2018/02/14/rl-hard.html
大学で強化学習を3学期も学んだが、最新の強化学習手法がTetrisで単純なヒューリスティクスにすら勝てないと知ってかなり失望した
強化学習の概念も他の道具と同じように、適切な使いどころを見つけることが重要だ
授業では、強力なアイデアが現実でどこに使えるのかをもっと見せる部分がしばしば欠けている
最適方策を語るのはよいが、どこに適用できるのかを理解させられなければ、面白い数学の寄せ集めにとどまりがちだ
それでも基本と基礎だけでも学ぶ価値はあると思う
教師あり学習、教師なし学習、最近大きな注目を集める半教師あり学習と違って、強化学習は環境と相互作用してフィードバックを受けるエージェントという形で学習問題を非常にエレガントにモデル化する
今日でもRLHFのようなLLMのファインチューニング、Covariantのようなロボティクス企業、Nvidia EurekaのようにLLMと強化学習を組み合わせた研究など、実用的な成功例がある: https://www.alexirpan.com/2018/02/14/rl-hard.html, https://blogs.nvidia.com/blog/eureka-robotics-research/
OpenAI Gymに似た、音楽生成のための深層強化学習フレームワークを作った
元記事のアルゴリズムを試してみたいなら使ってもよいし、issueやPRも歓迎する
https://github.com/chaosprint/RaveForce
以前に自分でも深層強化学習を見てみたことがあるが、エージェントが意味のある進歩をまったく出せず、統計や機械学習の背景もほとんどなかったので、何が悪いのかデバッグするのが難しかった
この資料を追ってみて、どうなるか確かめてみるつもりだ
アルゴリズムが実際に動くところだけ見たいなら、
solutionフォルダから動きそうなアルゴリズムを選んですぐ実行できるそれでうまくいけば、そのあとでゼロから再実装する楽しさを味わえばよい
初心者にはその点を明確に伝えるべきだと思う
機械学習の話題、とくに強化学習関連でいちばん惜しい部分だ
数年前に似たようなものを作った。PPOまでは扱っておらず、スタイルも異なる
https://learndrl.com/
こちらのほうが優れているとか劣っているとか言いたいわけではないが、学ぶ側としては同じ情報に複数の形で触れられるのは常によいことだ
MDPの例を見たあとで、非決定的な遷移関数の紹介の仕方について提案したい
現在の例では、エージェントが上や下に行こうとして、誤って左や右に行ってしまう形で非決定性が生じているが、本文ではエージェントが間違えるという点が十分に説明されておらず、
transition()関数のコメントが最初は分かりにくかったまた教育的には、非決定性はエージェントではなく環境から来るものとして紹介したほうがよいかもしれない。たとえば粗い表面上を移動するので、トラックや手足を動かしても常に意図した結果になるとは限らない、といった具合だ
今の表現だと、行動からランダムな行動へ、さらにランダムな状態へ進む関数のように見えるが、定義は行動からランダムな状態へ進む関数だ
当初は動画で音声を使って本文の隙間を埋めるつもりだったが、動画を作る時間がなかったので、まずはそうした隙間から直している
3つ目のノートブックをかなり読み進めてから、
TODOと書かれたコード部分が実際には読者が実装すべきコーディング演習で、その後に続くテストが自分の答えを確認するためのものだと気づいた賢いアプローチではあるが、最初から明確には見えなかった
最初は大きな流れを邪魔しないために細かな詳細をTODOとして残しているのだと思ったが、実際にはその部分こそが核心だった
TODOが混乱を招きうるとは思っておらず、README.mdに、完了すべきコーディング区間であることを明記するようガイドを更新した理論は学んだが、実際に強化学習を使うのに必要な実践知識が不足したまま曖昧な状態にとどまっていて、まさに探していたタイプの講座に見える
良さそうだが、READMEにYouTube動画リンクを追加するとよいと思う
それでもコミュニティには関心があるようなので作ってみようと思うし、それまでの間にREADMEは修正する