Understanding Negative Samples in Instance Discriminative Self-supervised Representation Learning の概要
Self-supervised contrastive representation learningというのが2018年から流行っている表現学習の手法です。 有名な方法としては
というようにたくさんあります。negative samplingを使わないので、contrastive ではありませんが、発展系としてBYOL/SimSiam/Barlow Twins/VICRegが2020年末からのself-supervised representation learningのトレンドです。
ものすごく大雑把にSelf-supervised contrastive representation learningで使われている損失関数を説明します。
- \(\mathbf{z}\): 入力 \(\mathbf{x}\)にデータ拡張を施してから、何かしらの変換 \(\mathbf{f}\) (ニューラルネットを使った特徴量抽出)をして得られる \(d\) 次元の表現ベクトル
- \(\mathbf{z}^+\): 入力 \(\mathbf{x}\)にデータ拡張を施してから、\(\mathbf{f}\)で得られる \(d\) 次元の表現ベクトル(positive sampleといいます)
- \(\mathbf{z}^-\): 別の入力にデータ拡張を施してから、\(\mathbf{f}\)で得られる \(d\) 次元の表現ベクトル(negative sampleといいます)
- \(\mathbf{Z} = \{\mathbf{z}^+, \mathbf{z}^-_1, \ldots, \mathbf{z}^-_K \}\): positive/negative samples をまとめたもの
とすると、\(\mathbf{z}\)に対するSelf-supervised contrastive representation learningの損失関数は、
\[\ell(\mathbf{z}, \mathbf{Z}) = - \ln \frac{ \exp(\mathbf{z} \cdot \mathbf{z}^+ / t)}{ \sum_{\mathbf{z}_k \in \mathbf{Z} }\exp(\mathbf{z} \cdot \mathbf{z}_k / t) },\]で定義されるInfoNCEです。論文間で多少の違いはありますが大まかにはだいたいこの損失関数を最小化します。MoCoやSimCLR論文を見るとnegative sample数(以下 \(K\) )を数千から数万を使って学習して得られる特徴量表現は、線形分類器の入力として使った時に、高い識別性能が報告されています。似たような設定のcontrastive unsupervised representation learningに対する理論解析(以下CURL)では、\(K\)は小さい必要があるという解析結果があり、上記の現象とは反することを主張しています。
というわけで、この不一致を改善する論文, Understanding Negative Samples in Instance Discriminative Self-supervised Representation Learning, を書きました。
なぜCURLが機能しないかを簡単に説明します。CURLを単純に上記の設定に適用すると、以下のようなlower boundが得られます(厳密な定義は論文の式8)。
\[L_{\mathrm{Info}}(\mathbf{f}) = (1-\tau_K) L_{\mathrm{sub}}(\mathbf{f}) + \tau_K \text{Collision} + d(\mathbf{f}),\]ただし、
- \(L_{\mathrm{Info}}(\mathbf{f})\): InfoNCE \(\ell\) のサンプル平均
- \(\tau_K\): \(\mathbf{z}\) のラベルが\(K\) negative samplesのラベルと一致する確率(例えると、最初にガチャガチャを引いてから、追加で\(K\) 回引いた時に最初に引いたものとダブる確率)
- \(L_{\mathrm{sub}}(\mathbf{f})\): \(K\) negative samplesの中でダブっているラベルを取り除いてから、残ったラベルを使って計算できる教師あり損失。\(K\) によっては、解きたい教師ありタスクのクラス数よりも数が小さいので、教師ありクラスの部分集合に対する損失
- \(\text{Collision}\): \(\mathbf{z}\) のラベルが\(K\) negative samplesのラベルと一致した数(ダブった数)
- \(d(\mathbf{f})\): \(\mathbf{f}\)に依存する項。ここでの議論と関係がないので無視してください
このlower boundでは、例えば、\(L_{\mathrm{sub}}\) で解きたいタスクのラベルを全て含むように\(K\) を増やすと、\(\tau_K\)も増えるので、\(L_{\mathrm{sub}}(\mathbf{f})\)の係数が\(0\)に近づき、\(\text{Collision}\)が支配的になります。 しかし、教師あり損失と\(\text{Collision}\)は関係がないので、\(K\)が増えると教師ありの分類性能が落ちることが期待されます。冒頭で言及したように\(K\)は実験的には増やしても問題ないことが知られているので一貫していません。
貢献
上記の議論では\(\tau\)が厳しすぎるので、\(\tau\)を使わないlower boundを提案しました。具体的には、Coupon collector’s problemの確率を使います。日本では、食玩問題やTeao分布でも検索すると出てきます。食玩問題を使うと上記の\(\tau\)に相当する確率が、\(K+1\)のサンプルの中で解きたいタスクのクラスを全て含まない確率になります。これにより、\(K\)を増やすことで意味のない項がlower boundで支配的にならなくなります。
\(K\)が小さい時の議論や、\(K\)が増えた時の影響についても議論していますが、ここでは省略します。camera-readyではNLPの実験も増える予定です。
余談
2019年12月くらいに、CPC+InfoNCEに対してCURLの解析ができないかどうかを考えはじめたのがはじまりでした。当時は別の論文の査読を待っていたり、UCL行く前にやっていてどこにも通っていない内容をどうしようか考えていると2020年の夏の終わりくらいになり、本格的にはじめました。2020年の夏の終わりというとすでにSimCLRとかMoCoとかBYOLとかSWaVが出てきて、手法が単純かつ性能がよいSimCLRに寄せたような記憶があります。CURL論文はUCL滞在時にPAC-Bayesを使った拡張をやっていて、CURLは普通の教師あり学習に対して理論解析が機能しないことがわかっていたので、self-supervised representation learningで観測されている事象とストーリーを合わせました。