MoCO ——教師なし視覚表現学習のための運動量コントラスト

タイトル: 教師なし視覚表現学習のための運動量コントラスト

著者: Kaiming He Haoqi Fan Yuxin Wu Saining Xie Ross Girshick

出版社: Facebook AI Research (FAIR)

キーワード: クリップ、マルチモーダル

論文: https://arxiv.org/pdf/1911.05722

コード: https://github.com/facebookresearch/moco

一言で言えば、比較サンプルの一貫性を維持するために、勢いのある比較ネットワークが提案されています。図に示すように、エンコーダは実際には同じエンコーダからのものである場合もあれば、異なるエンコーダからのものである場合もあります。図 1(a) は一般的な比較損失方法であり、xq と xk を取り出してドット積を計算し、xq と xq との間の類似性を計算します。 xk 。ただし、この方法はbatch_sizeのサイズに制限されており、batch_sizeの範囲内のサンプルとのみ比較できます。図1(b)はメモリバンク方式で、ImageNet-1Kなどのサンプルはすべてメモリバンクに配置され、メモリバンクには1M*特徴量データ(約600M)が格納されます。しかし、この方法には一貫性の欠如という欠点もあります。バッチサイズが 1 であると仮定すると、更新ごとに 1 つのサンプルのみが更新されます。この時点で、エンコーダーは逆方向フィードバックによって更新されており、残りの 999999 個のサンプルは現在のエンコーダーとの一貫性を失います (エンコーダーによって異なるタイミングで生成されるため)。 )、キュー全体が再度更新されると、最新のサンプルと最も古いサンプルの間のギャップが非常に大きくなります。そこで、勢いのある更新方法を提案する。Moco は妥協的な手法であり、一貫性を維持するだけでなく、大きなサンプル サイズの特性も維持します。キューを作成し、比較時にはキュー内のデータとのみ比較します。同時に、運動量法が使用され、運動量エンコーダはエンコーダと完全に等しいわけではありませんが、式 θk← mθk + (1− m)θq によって更新されるたびに、m は通常 0.999 です。一貫性を維持するために、各更新があまり大きくならないようにしてください。

概要

教師なし視覚表現学習のための Momentum Contrast (MoCo) を提案します。辞書検索としての対照学習 (29) の観点から、キューと移動平均エンコーダを備えた動的辞書を構築します。これにより、大規模で一貫性のある辞書の動的な構築が可能になり、対照的な教師なし学習が容易になります。MoCo は、ImageNet 分類の一般的な線形一致に基づいて競合する結果を提供します。さらに重要なことは、MoCo によって学習された表現は下流のタスクに適切に転送できることです。MoCo は、PASCAL VOC、COCO、およびその他のデータセットに対する 7 つの検出/セグメンテーション タスクにおいて、監視済みの事前トレーニング済みの対応物よりも優れたパフォーマンスを発揮でき、場合によっては大差でパフォーマンスを発揮できます。これは、多くの視覚タスクにおいて、教師なし表現学習と教師あり表現学習の間のギャップが大幅に縮まったことを示唆しています。

 序章

GPT [50, 51] と BERT [12] に示されているように、教師なし表現学習は自然言語処理で非常に成功しています。しかし、コンピュータービジョンでは教師あり事前トレーニングが依然として主流であり、教師なし手法は遅れをとることがよくあります。その理由は、それぞれの信号空間の違いに起因する可能性があります。言語タスクには、教師なし学習の基礎となるトークン化された辞書を構築するための離散信号空間 (単語、サブワード単位など) があります。対照的に、コンピュータービジョンは、生の信号が連続した高次元空間に存在し、人間のコミュニケーション用に構造化されていないため(たとえば、単語とは異なり)、語彙の構築により重点を置いています[54、9、5]。いくつかの最近の研究 [61、46、36、66、35、56、2] は、対照的不在相関法を使用した教師なし視覚表現学習に関して有望な結果を達成しました [29]。さまざまな動機によって推進されますが、これらのアプローチは動的な辞書を構築するものと考えることができます。辞書内の「キー」(トークン) はデータ (画像やパッチなど) からサンプリングされ、エンコーダーのネットワークによって表されます。教師なし学習では、辞書検索を実行するようにエンコーダーをトレーニングします。エンコードされた「クエリ」は、一致するキーワードに似ている必要がありますが、他のものと異なるものではありません。学習は、コントラスト損失を最小限に抑えるものとして定式化されます [29]。

この観点から、(i) 規模が大きく、(ii) トレーニング中に継続的に進化する辞書を構築するのが最善であると仮説を立てます。直観的には、より大きな辞書は、基礎となる連続的な高次元視覚空間をより適切にサンプリングし、クエリとの比較に一貫性を持たせるために、辞書内のキーは同じまたは類似のエンコーダで表される必要があります。ただし、対照的な損失を使用する既存の方法は、これら 2 つの側面のいずれかに限定される可能性があります (文脈の中で後述します)。

私たちは、対比損失を引き起こす教師なし学習用に大規模で一貫性のある辞書を構築する方法として、Momentum Contrastive (MoCo) を提案します (図 1)。辞書をデータ サンプルのキューとして維持します。現在のミニバッチのエンコードされた表現がキューに入れられ、最も古い表現がキューに入れられます。キューは辞書のサイズをミニバッチのサイズから分離し、辞書のサイズを大きくできるようにします。さらに、辞書キーは以前のいくつかのミニバッチから取得されるため、一貫性を維持するためにクエリ エンコーダの運動量ベースの移動平均として実装された、ゆっくりと進行するキー エンコーダが提案されます。

MoCo は、さまざまな口実タスクに使用できる、対照学習用の動的辞書を構築するメカニズムです。この論文では、単純なインスタンス識別タスク [61、63、2] に従います。クエリは、同じ画像のエンコードされたビュー (たとえば、異なる作物) である場合にキーと一致します。この口実タスクを使用して、MoCo は、ImageNet データセット [11] の線形分類に関する一般的な合意の下で競合する結果を示します。教師なし学習の主な目標は、微調整を通じて下流のタスクに転送できる表現 (つまり、特徴) を事前にトレーニングすることです。我々は、MoCo の教師なし事前トレーニングが、検出またはセグメンテーションに関連する 7 つの下流タスクにおいて、ImageNet で教師付きの事前トレーニングよりも優れたパフォーマンスを示し、場合によっては、無視できないマージンでパフォーマンスを向上できることを示します。これらの実験では、ImageNet または 10 億枚の Instagram 画像セットで事前トレーニングされた MoCo を調査し、MoCo がより現実世界の 10 億枚の画像スケールおよび比較的未処理のシナリオでも適切に機能できることを実証します。これらの結果は、MoCo が多くのコンピューター ビジョン タスクにおける教師なし表現学習と教師あり表現学習の間のギャップを大きく埋め、一部のアプリケーションでは ImageNet 教師あり事前トレーニングを置き換えることができることを示唆しています。 

関連作業

 教師なし/自己教師あり学習方法には、通常、口実タスクと損失関数という 2 つの側面が含まれます。「言い訳」という用語は、解決されているタスクが実際には興味のあるものではなく、適切なデータ表現を学習するという本当の目的のためにのみ解決されることを意味します。損失関数は、多くの場合、口実タスクとは独立して調査できます。MoCo は損失関数の側面に焦点を当てています。次に、これら 2 つの側面に関する関連研究について説明します。損失関数。損失関数を定義する一般的な方法は、L1 または L2 損失 (例: オートエンコーダー) を介して入力ピクセルを再構成する、または入力を事前定義されたカテゴリ (例: 8 つの位置) として分類するなど、モデル予測と固定ターゲットとの間の差を測定することです。 [13]、カラービット[64])。以下に説明するように、他の代替方法も可能です。コントラスト損失 [29] は、表現空間内のサンプルのペアの類似性を測定します。入力を固定ターゲットに一致させる代わりに、対比損失定式化では、ターゲットはトレーニング中に動的に変更でき、ネットワークによって計算されたデータ表現の観点から定義できます [29]。対照学習は、教師なし学習に関するいくつかの最近の研究の中心となっています [61, 46, 36, 66, 35, 56, 2]。これについては、この文脈で後ほど詳しく説明します (セクション 3.1)。 

敵対的損失 [24] は、確率分布間の差異を測定します。これは、教師なしデータ生成において非常に効果的な手法です。[15, 16] は、表現学習に対する敵対的アプローチを調査しました。敵対的生成ネットワークとノイズ対比推定 (NCE) の間には関係があります ([24] を参照) [28]。

すみません。さまざまな口実ミッションが提示されます。例には、ノイズ除去オートエンコーダ [58]、コンテキスト オートエンコーダ [48]、またはクロスチャネル オートエンコーダ (カラー化)] [64、65] など、特定の破損が発生した場合の入力の復元が含まれます。一部の口実タスクは、単一 (「例」) 画像 [17]、パッチランキング [13、45]、追跡 [59]、ビデオ内のオブジェクトのセグメント化 [47]、またはクラスタリング特徴 [3、4] を変換することによって、擬似ラベルを形成します。

学習と口実タスクを対比させます。さまざまな口実タスクは、何らかの形式の対比損失関数に基づくことができます。インスタンス判別式 [61] は、例ベースのタスク [17] および NCE [28] に関連しています。対比予測コーディング (CPC) [46] のプリテキスト タスクはコンテキスト自動エンコーディング [48] の形式ですが、対比マルチビュー コーディング (CMC) [56] のプリテキスト タスクはカラー化 [64] に関連しています。

方法

3.1 辞書引きとしての対照学習

対照学習 [29] とその最近の開発は、以下で説明するように、辞書検索タスクのトレーニング エンコーダーとみなすことができます。エンコードされたクエリ q と、辞書のキーであるエンコードされたサンプルのセット {k0, k1, k2, ...} を考えてみましょう。辞書内に q に一致するキー (k+ で示される) があるとします。対比損失 [29] は、q がその正のキー k+ に似ているが、他のすべてのキー (q の負のキーとみなされる) とは異なる場合に値が低くなる関数を指します。ドット積によって類似性を測定するために、この論文では InfoNCE [46] と呼ばれる対比損失関数の形式を検討します。

 ここで、τ は [61] の温度ハイパーパラメータです。合計は 1 つ以上の陽性サンプルと K 個の陰性サンプルです。直観的には、この損失は、q を K+ として分類しようとする (K+1) 方向のソフトマックス分類器の対数損失です。対照的な損失関数は、マージンベースの損失や NCE 損失の変形など、他の形式 [29、59、61、36] に基づくこともできます。

対比損失は、クエリとキーを表すエンコーダ ネットワークをトレーニングするための教師なし目的関数として使用されます [29]。通常、クエリは q = fq(xq) として表されます。ここで、fq はエンコーダ ネットワーク、xq はクエリ サンプルです (ここでも、k = fk(xk))。それらのインスタンス化は、特定のインターフェイス タスクによって異なります。入力 xq および xk は、イメージ [29、61、63]、パッチ [46]、またはパッチのセットで構成されるコンテキスト [46] にすることができます。ネットワーク fq と fk は、同じ [29、59、63]、部分的に共有される [46、36、2]、または異なる [56] にすることができます。

3.2 モメンタムコントラクト

 以上の観点から、対照学習は画像などの高次元連続入力に基づいて離散辞書を構築する手法である。キーがランダムにサンプリングされ、キー エンコーダーがトレーニング中に進化するため、辞書は動的です。私たちの仮説は、多数の否定的な例をカバーする大規模な辞書は優れた特徴を学習でき、辞書キーのエンコーダーは絶えず進化しているにもかかわらず、可能な限り一貫性を保っているというものです。この動機に基づいて、以下に説明するように、運動量の対比を提示します。

キューとしての辞書。私たちのアプローチの中核は、データ サンプルのキューとして辞書を維持することです。これにより、以前のミニバッチからエンコードされたキーを再利用できるようになります。キューの導入により、辞書のサイズがミニバッチのサイズから切り離されます。辞書のサイズは、一般的なミニバッチ サイズよりもはるかに大きくすることができ、ハイパーパラメーターとして個別に柔軟に設定できます。辞書の用例は徐々に置き換えられます。現在のミニバッチがディクショナリのキューに入れられ、キュー内の最も古いミニバッチが削除されます。ディクショナリは常にすべてのデータのサンプリングされたサブセットを表し、このディクショナリを維持するための追加の計算は管理可能です。また、最も古いミニバッチを削除することも有益です。これは、そのエンコードされたキーが最も古く、最新のキーとの一貫性が最も低いためです。

勢いのあるアップデート。キューを使用すると辞書が大きくなりますが、逆伝播によるキー エンコーダーの更新も困難になります (勾配はキュー内のすべてのサンプルに伝播される必要があります)。簡単な解決策は、この勾配を無視して、クエリ エンコーダ fq からキー エンコーダ fk をコピーすることです。しかし、この解決策は実験で悪い結果をもたらしました (セクション 4.1)。この障害は、エンコーダが急速に変化し、キー表現の一貫性が低下することが原因であると仮説を立てています。これに対処するためにモメンタムを更新することをお勧めします。

形式的には、fk のパラメータを θk として、fq のパラメータを θq として表し、θk を次のように更新します。

ここで、m ∈ [0, 1) は運動量係数です。バックプロパゲーションによりパラメータ θq のみが更新されます。式 (2) の運動量の更新により、θk は θq よりも滑らかに進化します。したがって、キュー内のキーは異なるエンコーダー (異なるミニバッチ) によってエンコードされますが、これらのエンコーダー間の差異は小さくすることができます。実験では、比較的大きな運動量 (例: m=0.999、デフォルト値) は小さな値 (例: m=0.9) よりもうまく機能し、ゆっくりと進化するキーエンコーダーがキューコアを使用していることを示唆しています。

以前のメカニズムとの関係。MoCo は、対照的な損失を使用する一般的なメカニズムです。図 2 では、これを既存の 2 つの一般的なメカニズムと比較しています。これらは、辞書のサイズと一貫性の点で異なる特性を示します。

バックプロパゲーションによるエンドツーエンドの更新は自然なメカニズムです (例: [29, 46, 36, 63, 2, 35]、図 2a)。現在のミニバッチ内のサンプルを辞書として使用するため、キーのエンコードは一貫しています (エンコーダー パラメーターの同じセットにより)。ただし、ミニバッチ サイズと組み合わせた辞書サイズは、GPU メモリ サイズによって制限されます。また、大規模なミニバッチの最適化という課題にも直面しています [25]。最近のいくつかのアプローチ [46、36、2] は、ローカルな場所によって駆動される口実タスクに基づいており、辞書のサイズは複数の場所によって拡大できます。しかし、これらの口実タスクには、ペイントされた入力 [46] やカスタムの受容野サイズ [2] などの特別なネットワーク設計が必要な場合があり、これらのネットワークの下流タスクへの転送が複雑になる可能性があります。

別のメカニズムは、[61] によって提案されたメモリ バンク アプローチです (図 2b)。メモリ バンクは、データセット内のすべてのサンプルの表現で構成されます。辞書の各ミニバッチはバックプロパゲーションなしでメモリ バンクからランダムに抽出されるため、より大きな辞書サイズをサポートできます。ただし、メモリ内バンクは最後に表示されたときに更新されるため、サンプリングされたキーは基本的に過去のエポックの複数の異なるステップに関するエンコーダであるため、一貫性が低くなります。[61] では、メモリ バンクにモメンタム更新が採用されています。その勢いの更新は、エンコーダーではなく、同じサンプルの表現に基づいて行われます。MoCo はすべてのサンプルを追跡するわけではないため、この運動量の更新は私たちの方法とは無関係です。さらに、私たちの方法はメモリ効率が高く、インメモリ ライブラリでは困難な 10 億規模のデータでトレーニングすることができます。いいえ。図 4 は、3 つのメカニズムを経験的に比較しています。

疑似コードの説明:

1. まずエンコーダ f_q、f_k を初期化します。

2. データ x をランダムに強調します。x のサンプル サイズは N で、x_q と x_k は N 個の正のサンプル ペアを表します。

3. 前向き推論、k の勾配を削除します。

4. q と k のアライメントを計算します (類似度として理解できます)。

5. q とキューの間のアラインメント (類似性) を計算しますキューには K 個のサンプルがあります (ImageNet には 1M 個あります)

6. マージして (N, K+1) 行列を取得します。1 は正のサンプルで、残りの K は負のサンプルです。

7. ラベルを生成します (ここにはトリックがあります。実際、生成されるラベルは [1,0,0,....,0] である必要がありますが、最初の添え字は 0 であり、クロスエントロピーは直接 0 に等しくなります) 。

8. 損失を計算します。

9. アップデートの損失。

10. 外に出てチームに加わります。

3.3 口実タスク

対照学習は、さまざまな口実タスクを推進できます。この論文の焦点は新しい口実タスクを設計することではないので、主に最近の研究[63, 2]に関連する[61]のインスタンス識別タスクに従って、単純な口実タスクを使用します。[61] に従って、クエリとキーが同じ画像に由来する場合は正のペアとして、そうでない場合は負のペアとして考慮します。[63, 2] に従って、ランダム データ拡張の下で同じ画像を 2 回ランダムに「観察」し、一対の正面ビューを形成します。クエリとキーは、それぞれエンコーダ fq と fk によってエンコードされます。エンコーダには、任意の畳み込みニューラル ネットワークを使用できます [39]。アルゴリズム 1 は、この口実タスクに MoCo の疑似コードを提供します。現在のミニバッチでは、クエリとそれに対応するキーをエンコードし、正のペアを形成します。陰性サンプルはキューから取得されます。技術的な詳細。エンコーダとして ResNet [33] を採用し、その最後の完全に接続された層 (グローバル平均プーリング後) は固定次元の出力 (128-D [61]) を持ちます。この出力ベクトルは、その L2 ノルムによって正規化されます [61]。これはクエリまたはキーの表現です。方程式 n の温度 τ。(1) 0.07[61]に設定します。データ拡張のセットアップは次のとおりです [61]: ランダムにサイズ変更された画像から 224 × 224 ピクセルのクロップが取得され、その後、ランダムなカラー ディザリング、ランダムな水平反転、およびランダムなグレースケール変換が行われます。これらはすべて、次の torchvision パッケージで利用できます。 PyTorch 。BNはシャッフル中です。

私たちのエンコーダ fq と fk は両方とも、標準 ResNet のバッチ正規化 (BN) [37] を備えています。実験では、[35] で説明されているように、BN を使用するとモデルが適切な表現を学習できなくなることがわかりました (BN の使用は避けてください)。このモデルは口実タスクを「騙し」、低損失の解決策を簡単に見つけるようです。これは、サンプル間のアッセイ内通信 (BN によって引き起こされる) による情報漏洩が原因である可能性があります。この問題は、BN をシャッフルすることで解決します。

トレーニングには複数の GPU を使用し、(通常どおり) 各 GPU からのサンプルに対して独立して BN を実行します。キー エンコーダー fk については、GPU に配布する前に現在のミニバッチ内のサンプル順序をシャッフルします (エンコード後にシャッフルします)。クエリ エンコーダー fq のミニバッチのサンプル順序は変更されません。これにより、クエリとその正のキーの計算に使用されるバッチ統計が 2 つの異なるサブセットから取得されることが保証されます。これにより不正行為の問題が効果的に解決され、トレーニングが BN の恩恵を受けることが可能になります。私たちの方法とそのエンドツーエンドアブレーションの対応物ではシャッフルBNを使用します(図2a)。これは対応するメモリ バンク (図 2b) とは関係がありません。正のキーは異なるミニバッチから取得されていたため、この問題の影響を受けません。 

 実験

ImageNet-1M (in-1M) で実行される教師なしトレーニングを研究します。これは、〜1000 クラスの〜128 万画像を含む ImageNet [11] トレーニング セットです (一般に ImageNet-1K と呼ばれます。画像の数を数えます。クラスは教師なし学習によって悪用されません)。このデータセットのクラス分布はバランスが取れており、その画像にはオブジェクトのアイコン ビューが含まれることがよくあります。Instagram-1B (IG-1B): [44] に続き、これは Instagram 上の約 10 億 (9 億 4,000 万) の公開画像です。画像は、ImageNet カテゴリに関連する約 1500 のラベルからのものです [44]。IN-1M データセットと比較すると、このデータセットは比較的不完全であり、現実世界のデータの分布にはロングテールと不均衡があります。このデータセットには、アイコン オブジェクトとシーン レベルの画像が含まれています。

トレーニングにはオプティマイザーとして SGD を使用します。SGD ウェイト減衰は 0.0001、SGD モメンタムは 0.9 です。IN-1M の場合、初期学習率 0.03 で 8 GPU 全体で最小バッチ サイズ 256 (アルゴリズム 1 の N) を使用します。120 および 160 エポックでは学習率を 0.1 倍した [61] を使用して 200 エポックをトレーニングし、ResNet-50 のトレーニングに約 53 時間を要します。IG-1B では、学習率 0.12 の 64 GPU で 1024 個のミニバッチを使用し、62.5k 反復 (64M イメージ) ごとに学習率が 0.9 倍に指数関数的に減衰します。〜ResNet-50 を 6 日間かけて、125 万回の反復 (〜1.4 IG-1B エポック) のトレーニングを行います。

 4.1 線形分類プロトコル (線形プロトコルはバックボーンを凍結し、分類ヘッドのみをトレーニングすることを意味します)

まず、一般的なプロトコルに従って、凍結された特徴に対して線形分類を実行することにより、方法を検証します。このサブセクションでは、In-1M で教師なし事前トレーニングを実行します。次に、特徴をフリーズし、教師あり線形分類器 (完全に接続された 1 つの層とそれに続くソフトマックス) をトレーニングします。この分類器は、100 エポックにわたる ResNet のグローバル平均プーリング プロパティに基づいてトレーニングされます。ImageNet 検証セットで 1 クロップ、トップ 1 の分類精度を報告します。この分類器では、グリッド検索を実行し、重み減衰 0 で最適な初期学習率 30 を見つけます ([56] で報告されているものと同様)。これらのハイパーパラメータは、このサブセクションで説明するすべてのアブレーション エントリにわたって良好に機能します。これらのハイパーパラメータ値は、特徴の分布 (サイズなど) が ImageNet の教師ありトレーニングの分布とは大きく異なる可能性があることを暗示しており、この問題についてはセクション II で再検討します。4.2. (学習率が30と考えられる理由は、Insgramのデータ分布がImageNetと大きく異なるためです)

アブレーション: 対照的な損失メカニズム。図 2 に示す 3 つのメカニズムを比較しました。対照的な損失メカニズムの効果に焦点を当てるために、セクション 3.3 で説明した同じ口実タスクでそれらのすべてを実装します。また、対比損失関数と同じ形式の情報、つまり式 (1) を使用します。したがって、これら 3 つのメカニズムのみを比較します。

結果を図 3 に示します。一般に、3 つのメカニズムはすべて、K が大きいほど恩恵を受けます。メモリバンクメカニズムでは、同様の傾向が [61, 56] で観察されましたが、ここでは、この傾向がより一般的であり、すべてのメカニズムにわたって見られることを示します。これらの結果は、大規模な辞書を構築するという私たちの動機を裏付けています。

K が小さい場合、エンドツーエンド メカニズムのパフォーマンスは MoCo と同様になります。ただし、エンドツーエンドの要件により、辞書のサイズはミニバッチ サイズによって制限されます。ここで、ハイエンド マシン (8 Volta 32GB GPU) が維持できる最大ミニバッチは 1024 ユニットです。さらに重要なことに、大規模なミニバッチ トレーニングは未解決の問題 [25] です。ここでは線形学習率スケーリング ルール [25] を使用する必要があることがわかりました。これを使用しないと精度が (〜2% (1024 ミニバッチ) 低下します)ただし、より大きなミニバッチでの最適化は困難 [25] であり、メモリが十分である場合でも、この傾向が K のより大きな値に外挿できるかどうかは疑問です

 

おすすめ

転載: blog.csdn.net/qq_34845880/article/details/124920289