Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
0 2024-06-14 第94回NearMe技術勉強会 Takuya Ogami 深層学習モデルの最適化 −Deep Learning Tuning Playbookを読む−
Slide 2
Slide 2 text
1 Deep Learning Tuning Playbook • 深層学習モデルに関するプロジェクトで、モデルの性能を最⼤化するた めの技法がまとまっている https://github.com/google-research/tuning_playbook
Slide 3
Slide 3 text
2 前提 • 適⽤範囲 • 教師あり学習やそれに類似した問題設定(e.g. ⾃⼰教師あり学習) • データのクリーニングなどの重要な作業が完了しており、モデルの最適 化に⼯数を割くことが合理的な状況である • モデルがデプロイされる環境での性能を⽰す適切な評価指標が選択され ている
Slide 4
Slide 4 text
3 プロジェクトの開始
Slide 5
Slide 5 text
4 プロジェクトの開始 • モデル • オプティマイザー • バッチサイズ
Slide 6
Slide 6 text
5 モデルの選び⽅ • ⼀般的に使⽤されているネットワーク構造を使⽤する • カスタムのモデルを作るのは後からできる • 近いタスクで使われているモデルから始める
Slide 7
Slide 7 text
6 • “あらゆる種類の機械学習の問題とモデル アーキテクチャにわたって 「最良」のオプティマイザーは存在しない” • 同じタイプの問題に使用される最も一般的なオプティマイザーを選ぶのが理想 的 オプティマイザの選び⽅
Slide 8
Slide 8 text
7 バッチサイズの選択 • 訓練のスピードが最⼤になるように決める • モデルの性能を上げるためのチューニングに使わない (理由) • バッチサイズは訓練の速度を左右する重要な要因である • ハイパーパラメータがチューニングされていて、十分な訓練時間を使用すれ ば、どのマッチサイズでも同等な結果が得られる • バッチサイズが変わると、最適なハイパーパラメータが変わってしまう
Slide 9
Slide 9 text
8 バッチサイズの決め⽅ 1. GPUメモリが飽和するまでバッチサイズを2倍ずつ⼤きくする 2. 速度最⼤のバッチサイズを選択する • バッチサイズを2倍にしたときに、モデルのスループットは2倍になる テンソル 予測 NN
Slide 10
Slide 10 text
9 バッチサイズの決め⽅ 1. GPUメモリが飽和するまでバッチサイズを2倍ずつ⼤きくする 2. 速度最⼤のバッチサイズを選択する • バッチサイズを2倍にしたときに、モデルのスループットは2倍になる データ テンソル 予測 前処理 NN バッチサイズを上げてもここは速くならない
Slide 11
Slide 11 text
10 初期設定を決める • 妥当な結果が得られる • シンプル • ⼩規模 な設定を⾒つけ、チューニングを⾏いやすくする 訓練ステップ数を決める トレードオフのバランスをとる • 多くのステップで訓練すると、パフォーマンスに差が出やすい • ステップ数が少ないほど、試⾏回数は増やせる → 持っているデータを初めから全て使うのは最適とは限らない
Slide 12
Slide 12 text
11 段階的に実験する 全てのハイパーパラメータを同時に最適化することは難しい • 探索空間はハイパーパラメータの数に対して指数的に増加 • 探索空間の広さが不明 知⾒獲得を優先し、最後に最適化を⾏う 知⾒獲得フェーズ 1. 新機能を試す‧知⾒を得る 2. 新機能がよければ採⽤ 最適化フェーズ 1. 知⾒をもとに、ハイパーパラメータを最適化し、ベストなモデルを作り に⾏く
Slide 13
Slide 13 text
12 実験を計画する
Slide 14
Slide 14 text
13 対照実験 • ResNet18とResNet34で画像分類の性能を⽐較したい
Slide 15
Slide 15 text
14 対照実験 • ResNet18とResNet34で画像分類の性能を⽐較したい 実験Aと実験Bをやって性能を比較する 実験A 実験B モデル ResNet18 ResNet34 オプティマイザ Adam Adam 学習率 1e-4 1e-4
Slide 16
Slide 16 text
15 対照実験 • ResNet18とResNet34で画像分類の性能を⽐較したい 実験Aと実験Bをやって性能を比較する この方法は不適切! 実験A 実験B モデル ResNet18 ResNet34 オプティマイザ Adam Adam 学習率 1e-4 1e-4
Slide 17
Slide 17 text
16 なぜ不適切か • NNの構成要素が⼀つ変わると、最適な性能を⽰すハイパーパラメータが 変化する たまたま学習率やオプティマイザーと相性がよかったモデルを、良いモデル だと判断してしまう可能性がある
Slide 18
Slide 18 text
17 ハイパーパラメータの分類 • 科学的ハイパーパラメータ • 今回の実験で⽐較したいパラメータ (ResNet18, ResNet34) • 局外ハイパーパラメータ • 変更すると性能に影響を及ぼすと考えられるパラメータ • 厳密には、科学的ハイパーパラメータ以外の全てのパラメータ • 固定ハイパーパラメータ • 変更しても影響を及ぼさないと期待するパラメータ
Slide 19
Slide 19 text
18 対照実験 科学的ハイパーパラメータごとに局外ハイパーパラメータをチューニング し、局外パラメータとの相性の差で結果が歪められることを防ぐ 実験A 実験B モデル ResNet18 ResNet34 オプティマイザ Adam, SGDからランダム Adam, SGDからランダム 学習率 [1e-6, 1e-1]からランダム [1e-6, 1e-1]からランダム
Slide 20
Slide 20 text
19 固定ハイパーパラメータを選ぶ • 局外ハイパーパラメータが多すぎると計算コストが増えるため、ある程 度は諦める必要 • なるべく固定してもモデルの性能に影響を与えないパラメータを固定ハ イパーパラメータとする • 得られた結論を慎重に解釈する • 実験を⾏った固定ハイパーパラメータのもとでは、AよりもBの⽅が 優れている
Slide 21
Slide 21 text
20 固定ハイパーパラメータを選ぶ ハイパーパラメータに関する知識や経験則をもとに、ある程度選ぶことがで きる • オプティマイザーのハイパーパラメータ(e.g 学習率、モメンタム)は他の 変更との相互作⽤が⼤きいため、固定ハイパーパラメータとして扱って はいけない • 正則化手法を組み込むかどうかは固定ハイパーパラメータになる • 正則化手法のハイパーパラメータは局外ハイパーパラメータになる
Slide 22
Slide 22 text
21 対照実験 科学的ハイパーパラメータごとに局外ハイパーパラメータをチューニング し、局外パラメータとの相性の差で結果が歪められることを防ぐ 実験A 実験B モデル ResNet18 ResNet34 オプティマイザ Adam Adam 学習率 [1e-6, 1e-1]からランダム [1e-6, 1e-1]からランダム オプティマイザの種類は固定ハイパーパラメータ
Slide 23
Slide 23 text
22 ハイパーパラメータ探索のアルゴリズム 準ランダム探索を使⽤ • ナイーブなランダム探索よりもより均⼀にサンプリング可能。 • 科学的ハイパーパラメータの公平な⽐較をするため、ベイズ最適化な どのブラックボックス最適化はこの段階では⽤いない
Slide 24
Slide 24 text
23 実験結果から洞察を引き出す
Slide 25
Slide 25 text
24 実験を確認する • 探索空間は適切か? • 訓練曲線に異常はないか? • 過学習が起きていないか? • ステップ間分散が⼤きくないか? • 性能の改善はどの程度続いているか?
Slide 26
Slide 26 text
25 探索空間は適切か? • 最適な値が探索空間の境界にある場合は、探索空間を広げることでより 良い値が⾒つかるかも 追加で探索
Slide 27
Slide 27 text
26 訓練曲線に異常は無いか? 過学習が⾒られる場合 • 正則化⼿法(weight decay, label smoothing, dropoutなど)を局外ハ イパーパラメータとして導⼊することを検討 ステップ間分散が⼤きい(エポックごとの性能の差が⼤きい) 場合 • バッチサイズを⼤きくする • 検証セットを⼤きくする • 学習率スケジュールを導⼊する
Slide 28
Slide 28 text
27 訓練終了時にもモデルが改善しているか? 改善している場合、下記が有効 • 訓練ステップを増やす • 学習率スケジュールを変更する 改善していない場合 訓練ステップ数を減らすことが可能かも
Slide 29
Slide 29 text
28 科学的ハイパーパラメータを選択する
Slide 30
Slide 30 text
29 科学的ハイパーパラメータの選択 • 実⾏のたびに、結果がある程度変動してしまう • 偶然良かった試⾏を採⽤してしまう恐れ → 最良の試⾏を複数シードで実⾏して分散を⾒る • 新しい機能を追加すると、調整すべきハイパーパラメータが増える、計 算コストが増加するなどの複雑性が増加する → 性能向上が複雑性に⾒合うかどうかを確認する
Slide 31
Slide 31 text
30 貪欲に性能を上げる
Slide 32
Slide 32 text
31 • 実験の結果得られた知⾒をもとに • 細かいハイパーパラメータを最適化する • ブラックボックス最適化ツールの利⽤も有効 • 訓練ステップ数やデータを増やす 性能を上げる
Slide 33
Slide 33 text
32 実践編
Slide 34
Slide 34 text
33 課題 これまで紹介した⼿法の中には、慣れていないと⼿間がかかる作業が多い • 実験ごとにハイパラをランダム探索する • 実験ごとに結果の可視化を⾏い、分析する • ブラックボックス最適化 wandb sweepを使うことで、これらの作業を簡単化できる
Slide 35
Slide 35 text
34 実装内容 • ResNet18でCIFAR10の画像分類を⾏う • wandb sweepを使ったハイパーパラメータ探索、可視化 リポジトリ: https://github.com/ogami334/wandb-tuning-practice
Slide 36
Slide 36 text
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 でagentを作成
Slide 37
Slide 37 text
36 各マシンでの実⾏ 先ほど作成したidを使って、各マシンで適切な回数の探索を行う (下の 例では異なるハイパーパラメータで10回訓練を実行する) wandb agent --count 10 以下のような場合に便利 • 複数のマシンで同じ探索を実行したい場合 • 1台のマシンに複数のGPUがあり、並列に実行したい場合
Slide 38
Slide 38 text
37 agentのイメージ • 各マシン(1台でも良い)でプログラムを実行すると、指定した探索方法でパラ メータを割り当ててくれる agent machine1 machine2 machine3 lr: 0.001 lr: 0.1 lr: 0.01
Slide 39
Slide 39 text
38 結果の可視化 分離プロットが簡単に⾒れる
Slide 40
Slide 40 text
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
Slide 41
Slide 41 text
40 おわりに • 紹介しきれなかった知⾒がたくさんあるので、ぜひ⼀度読んでみてくだ さい • 全部やろうとするとコストが⾼いので、プロジェクトに使える計算コス トに基づいて適宜省略する必要がありそうです
Slide 42
Slide 42 text
41 参考⽂献 • Deep Learning Tuning Playbook: https://github.com/google-research/tuning_playbook
Slide 43
Slide 43 text
42 Thank you