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
41
RustでDeepQNetworkを実装する
Rustで強化学習アルゴリズムをフルスクラッチで実装します。
ニューラルネット部分はtch-rsを用いています。
NearMeの技術発表資料です
PRO
March 21, 2025
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
【Browser Automation × AI】 Stagehandを試してみよう
nearme_tech
PRO
0
39
AIを用いた PID制御で部屋 の温度制御をしてみた
nearme_tech
PRO
0
47
CopilotKit + AG-UIを学ぶ
nearme_tech
PRO
3
210
Tile38 Overview
nearme_tech
PRO
0
59
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
580
実践で使えるtorchのテンソル演算
nearme_tech
PRO
0
37
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
590
初めてのmarimo (ハンズオン)
nearme_tech
PRO
0
52
ローカルLLM
nearme_tech
PRO
0
93
Featured
See All Featured
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Amusing Abliteration
ianozsvald
0
140
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
GraphQLとの向き合い方2022年版
quramy
50
14k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
280
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.2k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Making Projects Easy
brettharned
120
6.6k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
110
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