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でDeepQNetworkを実装する
Search
NearMeの技術発表資料です
PRO
March 21, 2025
1
28
RustでDeepQNetworkを実装する
Rustで強化学習アルゴリズムをフルスクラッチで実装します。
ニューラルネット部分はtch-rsを用いています。
NearMeの技術発表資料です
PRO
March 21, 2025
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
強化学習アルゴリズムPPOの改善案を考えてみた
nearme_tech
PRO
0
2
Apple Containerについて調べて触ってみた
nearme_tech
PRO
0
47
Rust 並列強化学習
nearme_tech
PRO
0
21
並列で⽣成AIにコーディングをやらせる
nearme_tech
PRO
1
130
希望休勤務を考慮したシフト作成
nearme_tech
PRO
0
34
Hub Labeling による高速経路探索
nearme_tech
PRO
0
90
Build an AI agent with Mastra
nearme_tech
PRO
0
77
Rustで強化学習アルゴリズムを実装する vol3
nearme_tech
PRO
0
43
Webアプリケーションにおけるクラスの設計再入門
nearme_tech
PRO
1
110
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Fireside Chat
paigeccino
39
3.6k
Balancing Empowerment & Direction
lara
2
580
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.6k
Building Adaptive Systems
keathley
43
2.7k
Typedesign – Prime Four
hannesfritz
42
2.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
560
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Mobile First: as difficult as doing things right
swwweet
223
9.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Transcript
0 2025-03-21 第116回NearMe技術勉強会 Takuma KAKINOUE RustでDeepQNetworkを実装する (おまけ)tch-rsからcandleに移⾏した結果
1 はじめに • 今回のスライドは、Zennにアップロードした記事(以下、url)のダイジェストになり ます ◦ https://zenn.dev/kakky_hacker/articles/652bd7f9a1e6c1
2 API解説 • DQNのインターフェース ◦ actメソッド ▪ 推論時に毎ステップ呼ぶ ◦ act_and_trainメソッド
▪ 訓練時に毎ステップ呼ぶ
3 actメソッドの実装 • 推論時に呼ばれる想定なので、tch::no_gradで勾配計算を無効化 • あとは、Qネットワークが出⼒したQ値の最⼤値のindexを返しているだけ
4 act_and_trainメソッドの実装 • コードは⻑いので貼れないが、やっていることは以下。 ◦ 観測した状態に対して、最⼤Q値の⾏動を算出する ◦ 最⼤Q値の⾏動を選択するかランダム⾏動を選択するかを決める(ε-greedy法など) ◦ リプレイバッファに状態‧⾏動‧報酬を記録する
◦ update間隔に達していたら、 _updateメソッド(次スライドで解説)で重みを更新する ◦ 選択した⾏動を返す
5 _updateメソッドの実装 • ⼤まかな流れ ◦ リプレイバッファから経験をサンプリング ◦ Q値の更新式の各変数の値を求める ◦ 損失を計算して、重みを更新する
• Q値の更新式は以下
6 _updateメソッドの実装 • 損失の計算式 ◦ 現状は平均⼆乗誤差を使っているが、Huber損失も実装予定 ▪ Huber損失 • https://ja.wikipedia.org/wiki/Huber%E6%90%8D%E5%A4%B1
7 tch-rsとcandle • tch-rs(https://github.com/LaurentMazare/tch-rs) ◦ メリット ▪ コアの部分がPytorchなので実績と信頼性は⼗分 ◦ デメリット
▪ Pytorchの全機能をRustから呼べるわけではない ▪ しかし、全機能を含んだコア部分をinstallするので重くなりがち • candle(https://github.com/huggingface/candle) ◦ メリット ▪ Pure Rustなので、Rustから使う場合は型推論周りは良い ▪ パッケージが軽い、WebAssenbly対応 ◦ デメリット ▪ Pytorchと⽐べてまだ実績が少ない
8 tch-rsからcandle移⾏した結果 • packageの容量を1.7GB → 0.8GBに削減できた! • しかし、訓練時のメモリ使⽤量や実⾏時間はtch-rsの⽅が若⼲性能が良かった ◦ 結局、しばらくはtch-rsで開発を進めることに
9 今後の展望 • [WIP] Proximal Policy Optimizationの実装 ◦ PPO論⽂:https://arxiv.org/abs/1707.06347 •
Soft Actor Criticの実装 ◦ SAC論⽂:https://arxiv.org/abs/1801.01290 • リプレイバッファから経験をサンプリングするときに優先度を設ける ◦ Prioritized Replay Buffer論⽂:https://arxiv.org/abs/1511.05952 • 好奇⼼報酬による探索の効率化の導⼊ ◦ RND論⽂:https://arxiv.org/abs/1810.12894 ◦ SND論⽂:https://arxiv.org/abs/2302.11563
10 Thank you