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