shimopino / papers-challenge

Paper Reading List I have already read
30 stars 2 forks source link

Momentum Contrast for Unsupervised Visual Representation Learning #143

Open shimopino opened 4 years ago

shimopino commented 4 years ago

論文へのリンク

[arXiv:1911.05722] Momentum Contrast for Unsupervised Visual Representation Learning

著者・所属機関

Kaiming He, Haoqi Fan, Yuxin Wu, Saining Xie, Ross Girshick

投稿日時(YYYY-MM-DD)

2019-11-13

1. どんなもの?

本研究では教師なし学習を行う際に、入力される画像をQueryと対応する辞書のKeyに変換することで、既存の教師あり学習を上回る精度を達成した。

2. 先行研究と比べてどこがすごいの?

自然言語処理の分野ではBERTのように教師なしの事前学習モデルが成功を収めているが、画像分野では教師あり学習に匹敵する精度を達成することができていない。

近年の研究では教師なし学習の手法としてConstrastive Learningが提案されている。この手法は動的に特徴量の辞書を作成していることだとみなせることができる。つまりKeyはデータから抽出した画像であり、Encoderを学習させることでQuery画像の特徴ベクトルとKey画像の特徴ベクトルの距離の近づける、あるいは遠ざけるように学習を進めていく。

この観点から考えると、辞書を構築する際に期待することとしては、高次元な連続空間からサンプリングできるほどVocabularyの大きな辞書を作成することと、Queryと一貫して比較できるように学習中に辞書のベクトルが変動してしまわないようにすることである。

image

3. 技術や手法の"キモ"はどこにある?

3.1 Contrastive Learning as Dictionary Look-up

複数の画像をそれぞれ特徴ベクトルに変換した辞書が存在しており、ある画像を特徴ベクトルに変換したものQueryとして与えられている状況を考える。

このときConstrastive Lossとは、Queryに対して最も似ているKeyには正値を与え、その他のKeyには負値を与えるような損失関数である。これを数式として表現すると、InfoNCEと呼ばれる形になる。

image

この関数は直感的には、分類タスクのようにK+1個存在しているクラスからQueryのクラスを予測する関数だと捉えることができる。

3.2 Momentum Contrast

上記の観点から、Constrastive Learningとは画像のような高次元の入力変数から離散的な辞書ベクトルを構築する方法だと考えられる。

学習を行う際にはランダムに入力画像をサンプリングするため、エンコードされる辞書は学習中に変化してしまう。

著者らは、良い特徴量は、学習中であっても一貫性のあるものであり、多くの負のサンプルを有するような大規模な辞書から獲得できるのではないかと仮定した上で、Momentum Constrastという手法を提案している。

Dictionary as a queue

本手法の主となる考えは、各データサンプルをQueueという形で辞書を構築することである。学習中に、新規のミニバッチから得られる特徴ベクトルを辞書にEnQueueし、古いミニバッチから得られた特徴ベクトルをDeQueueすることで、学習中の変化に対応した辞書を構築することが可能となる。

また辞書のサイズを、ミニバッチよりも大きい値にすることでより多くのサンプルを学習中に保持することが可能となる。

Momentum update

Queueの形にすることで逆伝播によって辞書内のKeyを更新することができなくなってしまう。ナイーブな方法としては、勾配を無視してQueryから得られた特徴ベクトルをそのまま辞書内のKeyに流用することだが、この方法では精度はうまく出なかった。

そこで以下の式に従って辞書内のKeyを指数移動平均を使用して更新している。この際にパラメータmを大きな値にすることで精度を改善することでき、これはKeyをQueryと比較してゆっくりと更新していくことが重要であることを示している。

image

以下が本手法のイメージ図である。

image

Relations to previous mechanisms

指数移動平均による更新以外の方法をまとめておく。

End-to-Endでの学習では、ミニバッチのサンプルのみを使用して辞書を構築するため、辞書のサイズがミニバッチのサイズに限定されてしまう。またミニバッチのサイズを大きくしたとしても、最適化が難しくなってしまう。

image

Memoery bankを活用する学習では、予めデータセット内の全サンプルの特徴ベクトルを辞書として用意しておく。各ミニバッチでの計算では、ランダムにmemory bankから特徴ベクトルを抽出する。こうすることで大規模な辞書を構築することが可能となる。

しかし辞書内のKeyは、該当するサンプルが来た場合にのみ更新されるため非効率になってしまう。

先行研究ではMemory Bankに指数移動平均を使用した更新規則を適用しているものもある。

image

3.3 Pretext Task

本研究で採用している事前タスクは以下になる。

まず同じ画像から抽出されたQueryとKeyを正のペアとし、異なる画像から得られたQueryとKeyを負のペアとする。次に同じ画像に対してそれぞれデータ増強を施すことで、同じ画像に微小なノイズを加える。

後はこの画像のペアを使用してConstrastive Learningを行っていく。

Technical details

EncoderにはResNetの最終層である128次元の特徴ベクトルを抽出する線型結合層を使用する。最後にL2正規化を施した特徴ベクトルを、それぞれQueryとKeyに採用している。

Shuffling BN

BNを採用しているResNetをそのまま使用すると性能が悪化する。これはBNではミニバッチ間の統計量を計算しているため、いわばモデルがズルをして事前タスクを解いていることになるからである。

そこで複数のGPUを使用しているときに有効となるShuffling BNを採用している。これはBNをそれぞれのGPUで計算しながら、ミニバッチを分解して計算する際にシャッフルしておくことで、毎回異なるサンプルが各GPUに渡るようにする手法である。

4. どうやって有効だと検証した?

ImageNetで教師なしの事前学習を行ったモデルの重みを固定して、線型結合層を接続して分類タスクを解かせた場合の精度を比較した。結果を見てみると、本手法がより少ないパラメータ数で高い精度を発揮していることがわかる。

image

次に辞書を学習する際の3つの手法を比較した。結果を見ると、指数移動平均を使用してKeyを更新する手法が最も高い性能を発揮していることがわかる。

image

次に物体検知タスクでも有効なのか検証するために、PASCAL VOCデータセットでfine-tuningしたモデルと比較を行った。結果を見るとどの評価指標においても本手法が有効に働いていることがわかる。

image

他にもKeypoint検出やポーズ推定、セグメンテーションなどに応用した場合の比較を行った。結果を見るとどのタスクにもいても、本手法は有効に働いており、汎用的に使用できることがわかる。

image

5. 議論はあるか?

shimopino commented 4 years ago

https://github.com/facebookresearch/moco