4 ポイント 投稿者 GN⁺ 2024-05-06 | 1件のコメント | WhatsAppで共有
  • 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件のコメント

 
GN⁺ 2024-05-06
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

    • Pythonへの依存が強いのか、それとも他の言語でも資料を追えるのか気になる
    • 今日最初の3つのノートブックを試してみたがかなり良く、Atari Gymnasiumも初めて使ってみて満足しているし楽しかった
    • 最新手法と結果を別途まとめたSoTAページがあるとよさそう
  • あとで章をさらに拡張するなら、すでにうまく動く単純な内容よりも、壊れたときにどうするかを扱うとよいと思う
    たとえば行動がずっと最大値に張り付いてしまうとか、オフポリシー学習でどれだけノイズを入れても探索が始まらないといった問題だ
    基本はだいたい動くものの、突然だれもあまり語らない問題が出てきたときに使える実践的な資料がもっとあればと思う

    • よくある助言が「正しい組み合わせが見つかるまでハイパーパラメータを調整しろ」なのはその通りで、役に立つこともあるが、問題はたいてい問題空間や定式化、アルゴリズム自体、乱数シードによる大きな性能分散など、いろいろな所に潜んでいる
      実際の深層強化学習の応用では、うまくいく場合よりもうまくいかない場合のほうが多く、このチュートリアルも問題解決、チューニング、製品化の面は不足している
      拡張する時間ができたら、この部分を優先したいと思っている: https://www.alexirpan.com/2018/02/14/rl-hard.html
  • 大学で強化学習を3学期も学んだが、最新の強化学習手法がTetrisで単純なヒューリスティクスにすら勝てないと知ってかなり失望した

    • 会社のビジネス問題の一部を多腕バンディット問題としてモデル化し、最大コストを10%削減できたし、複数の機能で何が機能し何が機能しないかを理解させてくれる自動化された真実のシグナルも示してくれた
      強化学習の概念も他の道具と同じように、適切な使いどころを見つけることが重要だ
      授業では、強力なアイデアが現実でどこに使えるのかをもっと見せる部分がしばしば欠けている
      最適方策を語るのはよいが、どこに適用できるのかを理解させられなければ、面白い数学の寄せ集めにとどまりがちだ
    • 強化学習が大きく失望させうるという点には同意するし、実際に動くようにすること自体が難しいという点にも同意する
      それでも基本と基礎だけでも学ぶ価値はあると思う
      教師あり学習、教師なし学習、最近大きな注目を集める半教師あり学習と違って、強化学習は環境と相互作用してフィードバックを受けるエージェントという形で学習問題を非常にエレガントにモデル化する
      今日でもRLHFのようなLLMのファインチューニング、Covariantのようなロボティクス企業、Nvidia EurekaのようにLLMと強化学習を組み合わせた研究など、実用的な成功例がある: https://www.alexirpan.com/2018/02/14/rl-hard.html, https://blogs.nvidia.com/blog/eureka-robotics-research/
    • 強化学習は今、奇妙な中間地帯にあるように思える。どうすればうまく動かせるのかを確実に知っている人は誰もいないが、トップクラスの機械学習研究者の大半は、AIの次の発展に不可欠な構成要素だと見ているようだ
  • 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のミスで、まだYouTube動画は作れていない
      それでもコミュニティには関心があるようなので作ってみようと思うし、それまでの間にREADMEは修正する