Open AkihikoWatanabe opened 3 years ago
2015年以後、様々な最適化アルゴリズム、正則化手法、データ拡張などが提案される中で、最新アーキテクチャのモデルにはそれらが適用される一方ベースラインとなるResNetではそれらが適用されず、論文の値のみが参照される現状はフェアではないので、ResNetの性能を向上させるような訓練手法を追求した研究。
ResNetにおける有効な訓練手法として下記を模索:
損失関数として、MixUp(訓練画像を重ね合わせ、組み合わせた画像のラベルをミックスして新しい学習インスタンスを作るデータ拡張手法)と、CutMix(画像を切り貼りして、切り貼り部分の面積に応じてラベルのスコアを調整するデータ拡張手法)を適用し、CutMixによって大幅に性能が改善することを示した。このとき、ラベルの確率の和が1となる前提の元クロスエントロピーで学習するのではなく、元画像に含まれる物体が両方存在するという全体の元BinaryCrossEntropyを適用しマルチラベル問題として学習することで、性能が向上。
データ拡張手法として、MixUp, CutMixだけでなく、通常のリサイズ・切り抜きと、水平方向の反転を適用しデータ拡張する。加えてRandAugment(14種類のデータ拡張操作から、N個サンプルし、強さMで順番に適用するデータ拡張手法。N,Mはそれぞれ0〜10の整数なので、10の二乗オーダーでグリッドサーチすれば、最適なN,Mを得る。グリッドサーチするだけでお手軽だが非常に強力)を適用した。
正則化として、Weight Decay(学習過程で重みが大きくなりすぎないようにペナルティを課し、過学習を防止する手法。L2正則化など。)と、label smoothing(正解ラベルが1、その他は0とラベル付けするのではなく、ラベルに一定のノイズを入れ、正解ラベル以外にも重みが入っている状態にし、ラベル付けのノイズにロバストなモデルを学習する手法。ノイズの強さは定数で調整する)、Repeated Augmentation(同じバッチ内の画像にデータ拡張を適用しバッチサイズを大きくする)、Stochastic Depth(ランダムでレイヤーを削除し、その間を恒等関数で繋ぎ訓練することで、モデルの汎化能力と訓練時間を向上する)を適用。
Optimizerとして、オリジナルのResNetでは、SGDやAdamWで訓練されることが多いが、Repeated Augmentationとバイナリクロスエントロピーを組み合わせた場合はLAMBが有効であった。また、従来よりも長い訓練時間(600epoch、様々な正則化手法を使っているので過学習しづらいため)で学習し、最初にウォームアップを使い徐々に学習率を上げ(finetuningの再認識これまでのweightをなるべく壊したくないから小さい学習率から始める、あるいはMomentumやAdamといった移動平均を使う手法では移動平均を取るための声倍の蓄積が足りない場合学習の信頼度が低いので最初の方は学習率小さくするみたいな、イメージ)その後コサイン関数に従い学習率を減らしていくスケジューリング法で学習。
論文中では上記手法の3種類の組み合わせ(A1,A2,A3)を提案し実験している。 ResNet-50に対してA1,2,3を適用した結果、A1を適用した場合にImageNetのトップ1精度が80.4%であり、これはResNet-50を使った場合のSoTA。元のResNetの精度が76%程度だったので大幅に向上した。 同じ実験設定を使った場合の他のアーキテクチャ(ViTやEfficientNetなど)と比べても遜色のない性能を達成。
また、本論文で提案されているA2と、DeiTと呼ばれるアーキテクチャで提案されている訓練手法(T2)をそれぞれのモデルに適用した結果、ResNetではA2、DeiTではT2の性能が良かった。つまり、「アーキテクチャと訓練方法は同時に最適化する必要がある」ということ。これがこの論文のメッセージの肝とのこと。
(ステートオブAIガイドの内容を一部補足して記述しました。いつもありがとうございます。)
画像系でどういった訓練手法が利用されるか色々書かれていたので勉強になった。特に画像系のデータ拡張手法なんかは普段触らないので勉強になる。
https://arxiv.org/pdf/2110.00476.pdf