Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
深層学習モデルの最適化 -Deep Learning Tuning Playbookを読む-
Search
NearMeの技術発表資料です
PRO
June 16, 2024
300
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
深層学習モデルの最適化 -Deep Learning Tuning Playbookを読む-
NearMeの技術発表資料です
PRO
June 16, 2024
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
Claude Code × git worktree で並列開発 (続き) -差分のサービスだけを併設する-
nearme_tech
PRO
1
61
Claude Code × git worktree で並列開発 — サブモジュール構成のリポジトリで成立させる —
nearme_tech
PRO
0
76
LLM + 強化学習
nearme_tech
PRO
0
34
PosthogのA/Bテスト機能の紹介
nearme_tech
PRO
1
98
AIフレンドリーなプロダクトに向けて
nearme_tech
PRO
2
67
初めてのLean言語
nearme_tech
PRO
0
110
Apache Airflow Workflow orchestration without turning cron into spaghetti
nearme_tech
PRO
2
42
実務で役立つ幾何学 ボロノイ図の基礎から グラフ・ネットワーク応用まで
nearme_tech
PRO
1
85
SQL/ID抽出タスクから考える 実践的なハルシネーション対策
nearme_tech
PRO
1
93
Featured
See All Featured
Claude Code のすすめ
schroneko
67
230k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
570
Accessibility Awareness
sabderemane
1
230
Music & Morning Musume
bryan
48
7.4k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Exploring anti-patterns in Rails
aemeredith
4
520
Done Done
chrislema
187
17k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Docker and Python
trallard
47
4.2k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
430
Writing Fast Ruby
sferik
630
63k
How Software Deployment tools have changed in the past 20 years
geshan
2
34k
Transcript
0 2024-06-14 第94回NearMe技術勉強会 Takuya Ogami 深層学習モデルの最適化 −Deep Learning Tuning Playbookを読む−
1 Deep Learning Tuning Playbook • 深層学習モデルに関するプロジェクトで、モデルの性能を最⼤化するた めの技法がまとまっている https://github.com/google-research/tuning_playbook
2 前提 • 適⽤範囲 • 教師あり学習やそれに類似した問題設定(e.g. ⾃⼰教師あり学習) • データのクリーニングなどの重要な作業が完了しており、モデルの最適 化に⼯数を割くことが合理的な状況である
• モデルがデプロイされる環境での性能を⽰す適切な評価指標が選択され ている
3 プロジェクトの開始
4 プロジェクトの開始 • モデル • オプティマイザー • バッチサイズ
5 モデルの選び⽅ • ⼀般的に使⽤されているネットワーク構造を使⽤する • カスタムのモデルを作るのは後からできる • 近いタスクで使われているモデルから始める
6 • “あらゆる種類の機械学習の問題とモデル アーキテクチャにわたって 「最良」のオプティマイザーは存在しない” • 同じタイプの問題に使用される最も一般的なオプティマイザーを選ぶのが理想 的 オプティマイザの選び⽅
7 バッチサイズの選択 • 訓練のスピードが最⼤になるように決める • モデルの性能を上げるためのチューニングに使わない (理由) • バッチサイズは訓練の速度を左右する重要な要因である •
ハイパーパラメータがチューニングされていて、十分な訓練時間を使用すれ ば、どのマッチサイズでも同等な結果が得られる • バッチサイズが変わると、最適なハイパーパラメータが変わってしまう
8 バッチサイズの決め⽅ 1. GPUメモリが飽和するまでバッチサイズを2倍ずつ⼤きくする 2. 速度最⼤のバッチサイズを選択する • バッチサイズを2倍にしたときに、モデルのスループットは2倍になる テンソル 予測
NN
9 バッチサイズの決め⽅ 1. GPUメモリが飽和するまでバッチサイズを2倍ずつ⼤きくする 2. 速度最⼤のバッチサイズを選択する • バッチサイズを2倍にしたときに、モデルのスループットは2倍になる データ テンソル
予測 前処理 NN バッチサイズを上げてもここは速くならない
10 初期設定を決める • 妥当な結果が得られる • シンプル • ⼩規模 な設定を⾒つけ、チューニングを⾏いやすくする 訓練ステップ数を決める
トレードオフのバランスをとる • 多くのステップで訓練すると、パフォーマンスに差が出やすい • ステップ数が少ないほど、試⾏回数は増やせる → 持っているデータを初めから全て使うのは最適とは限らない
11 段階的に実験する 全てのハイパーパラメータを同時に最適化することは難しい • 探索空間はハイパーパラメータの数に対して指数的に増加 • 探索空間の広さが不明 知⾒獲得を優先し、最後に最適化を⾏う 知⾒獲得フェーズ 1.
新機能を試す‧知⾒を得る 2. 新機能がよければ採⽤ 最適化フェーズ 1. 知⾒をもとに、ハイパーパラメータを最適化し、ベストなモデルを作り に⾏く
12 実験を計画する
13 対照実験 • ResNet18とResNet34で画像分類の性能を⽐較したい
14 対照実験 • ResNet18とResNet34で画像分類の性能を⽐較したい 実験Aと実験Bをやって性能を比較する 実験A 実験B モデル ResNet18 ResNet34
オプティマイザ Adam Adam 学習率 1e-4 1e-4
15 対照実験 • ResNet18とResNet34で画像分類の性能を⽐較したい 実験Aと実験Bをやって性能を比較する この方法は不適切! 実験A 実験B モデル ResNet18
ResNet34 オプティマイザ Adam Adam 学習率 1e-4 1e-4
16 なぜ不適切か • NNの構成要素が⼀つ変わると、最適な性能を⽰すハイパーパラメータが 変化する たまたま学習率やオプティマイザーと相性がよかったモデルを、良いモデル だと判断してしまう可能性がある
17 ハイパーパラメータの分類 • 科学的ハイパーパラメータ • 今回の実験で⽐較したいパラメータ (ResNet18, ResNet34) • 局外ハイパーパラメータ
• 変更すると性能に影響を及ぼすと考えられるパラメータ • 厳密には、科学的ハイパーパラメータ以外の全てのパラメータ • 固定ハイパーパラメータ • 変更しても影響を及ぼさないと期待するパラメータ
18 対照実験 科学的ハイパーパラメータごとに局外ハイパーパラメータをチューニング し、局外パラメータとの相性の差で結果が歪められることを防ぐ 実験A 実験B モデル ResNet18 ResNet34 オプティマイザ
Adam, SGDからランダム Adam, SGDからランダム 学習率 [1e-6, 1e-1]からランダム [1e-6, 1e-1]からランダム
19 固定ハイパーパラメータを選ぶ • 局外ハイパーパラメータが多すぎると計算コストが増えるため、ある程 度は諦める必要 • なるべく固定してもモデルの性能に影響を与えないパラメータを固定ハ イパーパラメータとする • 得られた結論を慎重に解釈する
• 実験を⾏った固定ハイパーパラメータのもとでは、AよりもBの⽅が 優れている
20 固定ハイパーパラメータを選ぶ ハイパーパラメータに関する知識や経験則をもとに、ある程度選ぶことがで きる • オプティマイザーのハイパーパラメータ(e.g 学習率、モメンタム)は他の 変更との相互作⽤が⼤きいため、固定ハイパーパラメータとして扱って はいけない •
正則化手法を組み込むかどうかは固定ハイパーパラメータになる • 正則化手法のハイパーパラメータは局外ハイパーパラメータになる
21 対照実験 科学的ハイパーパラメータごとに局外ハイパーパラメータをチューニング し、局外パラメータとの相性の差で結果が歪められることを防ぐ 実験A 実験B モデル ResNet18 ResNet34 オプティマイザ
Adam Adam 学習率 [1e-6, 1e-1]からランダム [1e-6, 1e-1]からランダム オプティマイザの種類は固定ハイパーパラメータ
22 ハイパーパラメータ探索のアルゴリズム 準ランダム探索を使⽤ • ナイーブなランダム探索よりもより均⼀にサンプリング可能。 • 科学的ハイパーパラメータの公平な⽐較をするため、ベイズ最適化な どのブラックボックス最適化はこの段階では⽤いない
23 実験結果から洞察を引き出す
24 実験を確認する • 探索空間は適切か? • 訓練曲線に異常はないか? • 過学習が起きていないか? • ステップ間分散が⼤きくないか?
• 性能の改善はどの程度続いているか?
25 探索空間は適切か? • 最適な値が探索空間の境界にある場合は、探索空間を広げることでより 良い値が⾒つかるかも 追加で探索
26 訓練曲線に異常は無いか? 過学習が⾒られる場合 • 正則化⼿法(weight decay, label smoothing, dropoutなど)を局外ハ イパーパラメータとして導⼊することを検討
ステップ間分散が⼤きい(エポックごとの性能の差が⼤きい) 場合 • バッチサイズを⼤きくする • 検証セットを⼤きくする • 学習率スケジュールを導⼊する
27 訓練終了時にもモデルが改善しているか? 改善している場合、下記が有効 • 訓練ステップを増やす • 学習率スケジュールを変更する 改善していない場合 訓練ステップ数を減らすことが可能かも
28 科学的ハイパーパラメータを選択する
29 科学的ハイパーパラメータの選択 • 実⾏のたびに、結果がある程度変動してしまう • 偶然良かった試⾏を採⽤してしまう恐れ → 最良の試⾏を複数シードで実⾏して分散を⾒る • 新しい機能を追加すると、調整すべきハイパーパラメータが増える、計
算コストが増加するなどの複雑性が増加する → 性能向上が複雑性に⾒合うかどうかを確認する
30 貪欲に性能を上げる
31 • 実験の結果得られた知⾒をもとに • 細かいハイパーパラメータを最適化する • ブラックボックス最適化ツールの利⽤も有効 • 訓練ステップ数やデータを増やす 性能を上げる
32 実践編
33 課題 これまで紹介した⼿法の中には、慣れていないと⼿間がかかる作業が多い • 実験ごとにハイパラをランダム探索する • 実験ごとに結果の可視化を⾏い、分析する • ブラックボックス最適化 wandb
sweepを使うことで、これらの作業を簡単化できる
34 実装内容 • ResNet18でCIFAR10の画像分類を⾏う • wandb sweepを使ったハイパーパラメータ探索、可視化 リポジトリ: https://github.com/ogami334/wandb-tuning-practice
35 agentの作成 program: main.py method: random metric: goal: maximize name:
val_acc.max parameters: optimizer: values: [sgd] optimizer.lr: distribution: log_uniform_values min: 0.0001 max: 0.1 optimizer.momentum: values: [0.9, 0.99, 0.999] optimizer.weight_decay: distribution: log_uniform_values min: 0.0001 max: 0.01 • パラメータ、分布 (parameters) • 最適化したい指標 (metric) • 探索方法 (method) をconfigで指定する wandb sweep <config file> でagentを作成
36 各マシンでの実⾏ 先ほど作成したidを使って、各マシンで適切な回数の探索を行う (下の 例では異なるハイパーパラメータで10回訓練を実行する) wandb agent --count 10 <agent_id>
以下のような場合に便利 • 複数のマシンで同じ探索を実行したい場合 • 1台のマシンに複数のGPUがあり、並列に実行したい場合
37 agentのイメージ • 各マシン(1台でも良い)でプログラムを実行すると、指定した探索方法でパラ メータを割り当ててくれる agent machine1 machine2 machine3 lr:
0.001 lr: 0.1 lr: 0.01
38 結果の可視化 分離プロットが簡単に⾒れる
39 ベイズ最適化の実験 • 1箇所の変更で実験が可能 • accが0.2%向上 program: main.py method: bayes
metric: goal: maximize name: val_acc.max parameters: optimizer: values: [sgd] optimizer.lr: distribution: log_uniform_values min: 0.0001 max: 0.1 optimizer.momentum: values: [0.9, 0.99, 0.999] optimizer.weight_decay: distribution: log_uniform_values min: 0.0001 max: 0.01
40 おわりに • 紹介しきれなかった知⾒がたくさんあるので、ぜひ⼀度読んでみてくだ さい • 全部やろうとするとコストが⾼いので、プロジェクトに使える計算コス トに基づいて適宜省略する必要がありそうです
41 参考⽂献 • Deep Learning Tuning Playbook: https://github.com/google-research/tuning_playbook
42 Thank you