Upgrade to Pro — share decks privately, control downloads, hide ads and more …

深層学習モデルの最適化 -Deep Learning Tuning Playbookを読む-

深層学習モデルの最適化 -Deep Learning Tuning Playbookを読む-

Transcript

  1. 7 バッチサイズの選択 • 訓練のスピードが最⼤になるように決める • モデルの性能を上げるためのチューニングに使わない (理由) • バッチサイズは訓練の速度を左右する重要な要因である •

    ハイパーパラメータがチューニングされていて、十分な訓練時間を使用すれ ば、どのマッチサイズでも同等な結果が得られる • バッチサイズが変わると、最適なハイパーパラメータが変わってしまう
  2. 10 初期設定を決める • 妥当な結果が得られる • シンプル • ⼩規模 な設定を⾒つけ、チューニングを⾏いやすくする 訓練ステップ数を決める

    トレードオフのバランスをとる • 多くのステップで訓練すると、パフォーマンスに差が出やすい • ステップ数が少ないほど、試⾏回数は増やせる → 持っているデータを初めから全て使うのは最適とは限らない
  3. 17 ハイパーパラメータの分類 • 科学的ハイパーパラメータ • 今回の実験で⽐較したいパラメータ (ResNet18, ResNet34) • 局外ハイパーパラメータ

    • 変更すると性能に影響を及ぼすと考えられるパラメータ • 厳密には、科学的ハイパーパラメータ以外の全てのパラメータ • 固定ハイパーパラメータ • 変更しても影響を及ぼさないと期待するパラメータ
  4. 26 訓練曲線に異常は無いか? 過学習が⾒られる場合 • 正則化⼿法(weight decay, label smoothing, dropoutなど)を局外ハ イパーパラメータとして導⼊することを検討

    ステップ間分散が⼤きい(エポックごとの性能の差が⼤きい) 場合 • バッチサイズを⼤きくする • 検証セットを⼤きくする • 学習率スケジュールを導⼊する
  5. 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を作成
  6. 36 各マシンでの実⾏ 先ほど作成したidを使って、各マシンで適切な回数の探索を行う (下の 例では異なるハイパーパラメータで10回訓練を実行する) wandb agent --count 10 <agent_id>

    以下のような場合に便利 • 複数のマシンで同じ探索を実行したい場合 • 1台のマシンに複数のGPUがあり、並列に実行したい場合
  7. 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