[論文メモ] ResNet strikes back: An improved training procedure in timm

arxiv.org
少々雑なまとめ。微妙におかしいところがあるかもなので勘弁。

ILSVRC2012の画像分類タスクの精度がモデルの評価としてよく使われている。
モデルの精度は以下の式と考えられる。

 \verb|accuracy(model)| = f(\mathcal{A}, \mathcal{T}, \mathcal{N})

 \mathcal{A}がモデルのアーキテクチャ \mathcal{T}が学習手続き、 \mathcal{N}が測定時のノイズ(過学習やmaxのモデル選択なども含める)。
ここでいう学習手続きとはepoch数やバッチサイズ、augmentationなど。
異なるアーキテクチャを比較するときに同じ学習手続きが最適とは限らず、学習手続きの選択によってどちらかのアーキテクチャを暗黙的に有利にしていることがある。
ResNet-50は比較対象として良く採用されるが、精度としては当時の論文の精度が引用される。
この引用した精度と比較しても、精度改善したのがアーキテクチャの恩恵なのかそれとも現代までの学習手続きの恩恵か切り離せない。
なので古いアーキテクチャを引用し新しいアーキテクチャの有意を主張するには比較対象の古いアーキテクチャに適した現代の学習手続きを探す努力をすべきである。
実際論文によって報告されるResNet-50の精度は75.2~79.5%の範囲で、この論文ではこの差をはっきりさせる。

Training Procedures

3つの学習手続きを比較。各手続きは異なるコストとパフォーマンス
セッティングとaccuracyをまとめたのが表1。
もう少し詳しくすると
A1) 最も良いパフォーマンスを発揮するために設定したもので、長期学習(600epochs)した。4つのV100 32GB GPUs
A2) 300epochsでDeiT等の近年のモデルと同じレベルの学習量。ただバッチサイズは2048と大きい。
A3) 短いepochと2048バッチサイズでオリジナルのResNet50を上回るのを目的。

Loss: multi-label classification objective

クロスエントロピーは暗黙的に各クラスが混合する確率を扱うことになる。
(これの意味が少々わからない。猫と犬が写っている画像で確率が{猫: 0.5, 犬: 0.5}と扱うのは適切ではないということ?)

これらのクラスが全て存在するとし、分類からマルチラベル分類として扱う。
そこでバイナリクロスエントロピー(BCE)を採用する。こうすることでMixupやCutMixを導入してもlossに一貫性が出る。
Mixupなどを使用したときは各ラベルが1になる。
実験したところ、Mixしたときにターゲットラベルを確率分布としsumが1になるるようにするよりもターゲットラベルは全て1(or 1-εのスムージング)にしたほうが効果的だった。

Data-Augmentation

利用したのは

  • Random Resized Crop(RRC)
  • horizontal flip
  • pytorch image modelsのtimmのRandAugment、Mixup、そしてCutMix

これらはDeiTで使われたもの。

Regularization

Weight Decayに加え、label smoothing、Repeated-Augmentation(RA)、stochastic-Depth(SD)を使用。
label smoothingはA1だけ。
RAとSDは収束時の結果を改善するが初期段階での学習が遅くなる。なので学習が短いとこの2つは効果的ではない。
なのでRAとSDはA1とA2に適用。
より大きなResNet(152や200)ではより多くのRAやmixupなどで恩恵があることに注意。

Optimization

よく使われていたのはSGDだが、Transformerや最近のMLPではAdamWやLAMBが使われている。
DosovitskiyはResNet50ではAdamWもSGDも似たパフォーマンスだったと報告しているが、これは中間のサイズのバッチサイズ(512)での実験結果と一致する。
2048と大きいバッチサイズで repeated augmentationとBCEと合わせるときはLAMBが一貫して良いパフォーマンスを出した。
またSGDとBCEは収束が困難だった。

元のResNet-50との比較を表2に示す。
f:id:Ninhydrin:20211005101131p:plain

実験

既存の学習方法と提案した学習方法の比較し評価をする。
1)ランダムな要因に対するパフォーマンスの感度の定量
2) 別のテストデータでの検証で過適合を評価

Comparison of training procedures for ResNet-50

表1のA1のセッティングは既存のResNet-50(224x224)を上回った。

Performance comparison with other architectures

A1~3の学習手続きで他のアーキテクチャを学習した結果が表3。
多くのアーキテクチャで改善が見られる。
古い手法やモデルサイズがResNet-50に近いデモるでは、その論文で報告されているパフォーマンスよりも高いパフォーマンスを示している。
ViT-BなどについてはA1よりA2のセッティングの方が良い結果となったが、これはハイパーパラメータが長期の学習に適さなかったと考えられる(正則化が必要)。
また補足の実験は表4。

f:id:Ninhydrin:20211006091636p:plain
f:id:Ninhydrin:20211006092502p:plain

Significance of measurements: seed experiments

モデルの初期値やデータの学習順序などのランダムな要因が学習結果に作用する。
これらのランダムな要素がパフォーマンスに与える影響を測定する。
seed値についてはちょうど同じ時期に報告された。seed値によって平均を大きく上回る/下回る外れ値が存在する。
arxiv.org

A2の設定で1~100のseed値で実験した結果を図1に示す。
なお、この実験では最終的なパフォーマンスに注目していて途中のmaxは取らない(maxを取るのはseed選択に近く、また学習期間の影響がある?)。
図1からImageNet-valの結果は標準偏差0.1前後で他の論文での報告と一致している。
seed 0での学習結果は平均の79.72%を0.13%上回る結果となった。
f:id:Ninhydrin:20211006092840p:plain

Peak performance and control of overfitting

検証の精度を過大評価することを防ぐために学習終了時のモデルを選択。
ハイパーパラメーター探索も比較的粗いグリッドを使用して、追加のseedの効果が導入されないようにする。

多数のパラメータを最適化すると過学習につながる。 図1からわかるようにA2の設定でも良い時は80.0%に近いことが確認できる。
図2に精度の分布をヒストグラムを示す。
ただ、これが本当に良いモデルなのか、それとも偶然検証用データに適していたのか。これを判断するため他のデータセットで検証をした。
ImageNet-val top1 accとImageNet-V2 top1 accのペアのseed値をプロットしたのが図1の左側の散布図。
相関はほぼなく、同じseed値では両方のベストパフォーマンスは得られない。

More on sensitivity analysis: variance along epochs

図3のepoch毎のパフォーマンスの分散を示す。
f:id:Ninhydrin:20211006095858p:plain

Transfer Learning

7つのデータセットについてA1~3の設定で学習した結果をPytorchのそれぞれの学習済みモデルと比較。結果は図5参照。
全体的にA1がベストパフォーマンス。A2はPytorch学習済みモデルに近いパフォーマンスを出す。A3は大幅に劣っているがこれは解像度の問題と考えられる。

Comparing architectures and training procedures: a show-case of contradictory conclusions

同じ学習手続きで2つのアーキテクチャを比較するのも、逆に同じアーキテクチャで違う学習手続きを比較するのも難しい。
ResNet-50とDeiT-Sを比較するために最適化をチューニングした(300epochかつ同じバッチサイズの制限のもと)。
各学習手続きをResNet-50はA2、DeiT-Sは新たにチューニングし、それをT2とする。
DeiTに関して、提案時のImageNet-valに比べて精度が改善した(79.8% -> 80.4%)。
f:id:Ninhydrin:20211007090818p:plain
各学習手続きによってテストセットに基づいて優れていると表現できる。
ImageNet-valというテストセットのもと、A2を使うとResNet-50の方が優れていると言えるし、T2を使うとDeiT-Sのが優れている。
ImageNet-v2をテストに使うと、DeiT-Sが優れていると結論付けられる(ただ、A3に焦点を当てると統計的に有意ではないとなる 67.9% vs 68.1%)。
つまり、1つのアーキテクチャで1つのテスト(ここではImageNet-val)を使って2つの学習手続きを比較した場合引き分けと結論付けられる。

Ablations

Main ingredients and hyper-parameters.

学習手続きは中間的なA2にしぼる。結果は表6。
f:id:Ninhydrin:20211007091852p:plain

学習率とWeight Decay(WD)

学習率を 5 \times 10^{-3}がベストとなったが大きすぎると発散のリスクが大きい。
WDは事前調査の結果0.02~0.03を試したが、少々敏感なパラメータで他の正則化と合わせて調整すべき。0.02と0.03で大きく異る結果になることがあった。

損失関数:BCEとCE

BCEからCEにするとパフォーマンスが下がる。
これはMixUpやCutMixを1-vs-allのクラス分類問題とみなすため。CEは合計が1になる制約がある。
ただ必ずしもBCEが良いわけではなく、今回の設定ではBCEが良かった。

Repeated augmentation

場合によって良し悪しが大きく異なるので結論は難しい。

Stochastic Depth & Smoothing

表7を参照。この2つはある程度epochが多くないと効果が無い。
f:id:Ninhydrin:20211007093552p:plain

Augmentation

統計的有意なのを示すのは難しく、少なくとも表8の変更を行ったが論文で述べた平均パフォーマンス(79.72% - std0.1)より悪化。
f:id:Ninhydrin:20211007093731p:plain

Crop-ratio

表9。一般的に0.875が採用される。この値を大きくすると特にViTでの精度向上が報告されている。
f:id:Ninhydrin:20211007094032p:plain

Evaluation at other resolutions

図4。A1とA2はより大きい画像を利用した方が高パフォーマンス。
f:id:Ninhydrin:20211007094340p:plain

結論

ResNet-50の新しい学習方法を提案(A1とA2)。
ただ、これは普遍的な学習方法とは主張せず、むしろ逆の主張をする。提案した学習方法は一部のアーキテクチャではその論文より良い結果をもたらすが、そうでないアーキテクチャもある。
アーキテクチャと学習方法は組み合わせて最適化する必要がある。

所感

確かに古いアーキテクチャの精度を当時の論文から引用しても、提案するアーキテクチャに対しては最新の最適化手法やaugmentationを利用しているので単純比較は難しそう。
精度が改善したとしてもアーキテクチャの恩恵とは言いきれそうにない。
学習の設定についてもアーキテクチャごとに最適なものがあり、例えばあるアーキテクチャは強めのWeight Decayが有効でも他は逆かもしれず、同じ学習設定で学習すれば比較できるわけではない。
だからといってこの論文のように古いアーキテクチャの精度改善を頑張るのも現実的ではなさそう。
この論文がResNet-50については新しいベースラインを築いてくれた。
新しい論文が出たからと言って、単純に精度だけで考えるのではなく比較対象の精度を確認(当時の引用?きちんと比較できる条件で学習した?など)すべきということを再認識點せられた。