Fast AutoAugmentを読んだのでメモ
はじめに
Fast AutoAugmentを読んだのでメモ. とにかく計算時間のかかるAutoAugmentを高速(CIFAR-10:5000->3.5, SVHN:1000->1.5, ImageNet:15000->450 GPU hours)にした論文.
Fast AutoAugment
Search Space
まずを入力空間上のaugmentation operations の集合とする.各operation は確率と強度を持つ.をsub-policyの集合とし,sub-policy は個のoperationの集合として定義される.各operationは入力画像に対してから順番に確率に従って次のように適用される.
よってsub-policy の出力は
として定義される.の場合にはAutoAugmentと同じで,探索空間はとを区間の連続値として扱うことを除いて等しい.
Search Strategy
まずを上の確率分布とし,をデータセットとする.パラメータを持つ分類モデルが与えられた際,データセット上でのの期待される精度と損失はで定義される.
任意のペアとが与えられた際,目標はモデルの汎化性能を向上させる事となる.ここでの考え方はとの分布を一致させるようなaugmentationのpolicyを見つける事で汎化性を向上させる. ただ,当然二つの分布の密度関数をすべてのpolicyの候補において比較することは不可能なので,ここではあるデータセットがもう一方のデータセットのパターンにどれほど従うかを,両方のデータセットに対するモデルの予測を使って測る. 具体的にはをとの二つに分け,の学習との探索に利用する.policyの探索のため,下記の目的関数を定義する.
ただし,モデルのパラメータは上で学習した結果とする.この目的関数は近似的にと間の分布の距離を,モデルのパフォーマンスの最大化という観点で最小化している.
上記の目的関数はK-fold stratified shufflingとBayesian optimization methodを利用する.
- まずK-fold stratified shufflingによりをのK個に分割する.各は二つのデータセットとから成る.以下,表記の簡略化のためを省略する.
- 次に,を使い,data augmentation等は使わずモデルを学習する.
- 学習後,の間個のpolicyの候補をbaysesian optimizationにより探索空間から探索する.より具体的にはでのを最小化するように買う率と強度を持つpolicy を探索する.
肝としては,policyの探索の間モデルのパラメータを学習する必要は一切なく,これにより実行速度を大幅に改善している.また,それと同時にAutoAugmentのchild modelの概念をなくし,実際に学習したいネットワークに対して直接policyを探索する事を可能にしている.
探索終了後はの中から上位個のpolicyを選び,それらをとする.その後をにmargeし,を得る.最終的にはを全体に適用してモデルを学習する.
policyは学習済みモデルに対してモデルの損失を下げる(精度を上げる)ように探索されているため,次の関係を満たすことが期待される.
この辺りイマイチ理解ができていないのが,policyは学習されたモデルに対して損失が最小となるように学習するため,テストデータの分布を学習データに近づけるようなdata augmentationを選ぶようになっているというのが直感的なところで,その場合に得られたpolicyを使って学習することがなぜ改善をもたらすかよくわからない.勘違いしているのか理由があるのか.
Policy Exploration via Bayesian Optimization
policyの探索で全policy候補の精度評価をすることは不可能なので次のExpected Improvement (EI) criterionを利用する.
は過去に探索されたpolicyのquantileによって決められる閾値.この辺りは詳しくないので詳細は省くが,最適化にはHyperOptを使って並列化してやったとのこと.
まとめ
上でも述べたように,最適化しているpolicyの意味がイマイチピンとこない(学習と評価時の分布を近づけるようなaugmentationという気持ちはわかるがその方向が評価データ->学習データとなっているので).また,AutoAugmentと違いtransferabilityに関する評価がなかったのでその辺の挙動も気になる.ただ実装が公開されていて計算時間も現実的なので色々と試すことはできそう.