Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rustで作る強化学習エージェント
Search
NearMeの技術発表資料です
PRO
February 17, 2025
0
44
Rustで作る強化学習エージェント
NearMeの技術発表資料です
PRO
February 17, 2025
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
ルートの質を評価する指標について
nearme_tech
PRO
0
14
ビームサーチ
nearme_tech
PRO
0
37
WASM入門
nearme_tech
PRO
0
37
ESLintをもっと有効活用しよう
nearme_tech
PRO
0
26
リファクタリングのための第一歩
nearme_tech
PRO
0
71
ガウス過程回帰とベイズ最適化
nearme_tech
PRO
1
200
確率的プログラミング入門
nearme_tech
PRO
2
120
Observability and OpenTelemetry
nearme_tech
PRO
2
47
観察研究における因果推論
nearme_tech
PRO
1
160
Featured
See All Featured
Facilitating Awesome Meetings
lara
53
6.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
52k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
390
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
Typedesign – Prime Four
hannesfritz
41
2.5k
Writing Fast Ruby
sferik
628
61k
Adopting Sorbet at Scale
ufuk
75
9.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Building Adaptive Systems
keathley
40
2.4k
Transcript
0 Rustで作る強化学習エージェント 2024-02-14 第113回NearMe技術勉強会 Takuma KAKINOUE
1 概要 • Rust製のOSS強化学習フレームワークを開発中 ◦ https://github.com/kakky-hacker/reinforcex • 深層学習にはpytorchのrust版であるtchを使⽤ • 今回の勉強会では、reinforcexのサンプルを動かす
2 なぜRustなのか? • メモリ効率性が良い ◦ Pythonだとメモリリークで学習が中断されてしまうことがよくある ◦ Rustだと所有権システムによって使われなくなったメモリが即解放される • 並列処理に強い
◦ 複数エージェントで並列学習するアルゴリズムにおいてPythonより有利に • Rust製の深層学習フレームワークの開発が活発になってきている ◦ https://github.com/huggingface/candle ◦ https://github.com/tracel-ai/burn
3 強化学習アルゴリズム • REINFORCE(実装済) ◦ episodicなアルゴリズム ▪ step単位ではなくepisode単位で学習する ◦ ⽅策ベース
◦ 実装が簡単 • DQN(実装中) ◦ 価値ベース ◦ 実装はやや⼤変 ▪ Replay Buffer ▪ ε-Greedy • その他 ◦ DDPG, TD3, SAC, PPO, A3Cなど追って実装予定
4 サンプルを動かす • rust環境が未構築の場合は以下を実⾏してください ◦ brew install rustup-init ◦ rustup-init
◦ シェルの再起動 • 実験⽤にOpenAI-Gymを使うのでPythonをinstallして以下を実⾏してください ◦ pip3 install gymnasium==0.26.3 • リポジトリ(https://github.com/kakky-hacker/reinforcex)をcloneして、 cargo runを実⾏すればサンプルが動きます
5 インターフェース設計 • サンプルコードを元に解説 ◦ https://github.com/kakky-hacker/reinforcex/blob/master/src/examples/train_c artpole_with_reinforce.rs • 意識したこと ◦
Pythonの強化学習フレームワークであるChainerrlやPFRLと近い設計にした
6 ⼯夫したポイント • NNの重みの初期化メソッドの実装 ◦ https://github.com/kakky-hacker/reinforcex/blob/master/src/misc/weight_ini tializer.rs ◦ ランダム初期化よりもXavierやHeを使うことで学習がちゃんと進むようになった ◦
XavierとHeの使い分けは、該当の層の直後に噛ませる活性化関数の種類による ▪ Xavierの場合、tanhなどと相性が良い ▪ Heの場合、reluなどと相性が良い
7 ⼯夫したポイント • リプレイバッファにおいて、Reference Counterによる変数のライフタイム管理 ◦ https://github.com/kakky-hacker/reinforcex/blob/master/src/replay_buffer/replay_bu ffer.rs ◦ nステップ分の状態遷移を保持するとき、各状態に直前nステップの状態への参照を持たせ
ることで、無駄にメモリを使うことなく保持できる ◦ Reference Counterを使わない場合、nステップ分の状態のコピーが逐⼀保存されるので、 無駄にメモリを使う上に計算コストも増えてしまう
8 今後の展望 • アルゴリズムの拡充 ◦ DQN, PPO, SACなど • tchをcandle(or
burn)に移⾏ • 並列学習周りの実装 • Decision Transformerの実装 スター付けてもらえると、やる気が出ます! https://github.com/kakky-hacker/reinforcex
9 Thank you