対照学習の原理:InfoNCEとSimCLR/CLIP
ラベルなしのデータから「似ているか」を当てさせるだけで、転移に強い表現が手に入る。InfoNCE損失が相互情報量の下界になる仕組みと、温度・バッチサイズ・射影ヘッドの役割を数理から押さえます。
- 1.対照学習は、同じ元から作った正例どうしを近づけ、無関係な負例を遠ざけることで、ラベルなしに表現を学ぶ。
- 2.InfoNCE損失は負例集合上のソフトマックス分類であり、最小化は表現間の相互情報量の下界を最大化することに対応する。
- 3.温度パラメータが負例の効き方を、バッチサイズが負例数を決める。SimCLRは射影ヘッドと強いデータ拡張、CLIPは画像とテキストの対で同じ原理を使う。
出発点:似ているかどうかだけを当てさせる
教師あり学習はラベルを必要としますが、ラベル付けは高コストです。対照学習(contrastive learning)は、ラベルの代わりに「2つのサンプルが同じ元から来たか」という自分で作れる教師信号だけを使って表現を学ぶ、自己教師あり学習の代表的な系統です。
基本の構図はシンプルです。1つの元サンプルに2通りのデータ拡張をかけて作った2つのビューを正例ペアとし、バッチ内の無関係なサンプルを負例とします。エンコーダ f が出す表現ベクトルどうしの類似度を、正例では高く、負例では低くなるように学習します。狙いは、データ拡張で壊れない意味的に本質的な情報だけを表現に残すことです。色のジッタや切り抜きで変わってしまう表面的な特徴は、正例どうしを近づける過程で捨てられていきます。
類似度には、正規化したベクトルの内積(コサイン類似度)がよく使われます。
sim(u, v) = (u · v) / (‖u‖ ‖v‖)
表現をいったん単位球面上に載せてから角度で測る、という発想です。この「球面上の幾何」が、後で温度パラメータの役割を理解する鍵になります。なお、ここで学ぶ表現は最終的に 埋め込み(embedding) として下流タスクや ベクトルデータベース で使われる、汎用的な特徴ベクトルそのものです。
InfoNCE損失:負例の中から正例を当てる分類
対照学習の中心にあるのが InfoNCE損失(NCE = Noise-Contrastive Estimation) です。アンカー表現 z_i に対し、その正例 z_j と多数の負例 {z_k} を並べ、「どれが正例か」を当てる多クラス分類として定式化します。1つのアンカーに対する損失は次の形です。
L_i = − log [ exp(sim(z_i, z_j) / τ)
/ Σ_k exp(sim(z_i, z_k) / τ) ]
分母の和は、正例1個と負例すべてにわたって取ります。τ(タウ)は温度パラメータです。この式の正体は、類似度をロジットとみなしたソフトマックス+クロスエントロピーであり、「正例というクラスに正解ラベルを置いた分類問題」に他なりません。分子を大きく(正例を近づける)、分母を小さく(負例を遠ざける)する方向に勾配が流れます。
類似度の絶対値を直接合わせ込もうとすると、何を基準に近い・遠いとするかが定まらず学習が不安定になります。InfoNCEは「正例 vs 負例集合」の相対的な順位だけを問うので、スケールに依存せず安定します。負例が多いほど分類は難しくなり、より細かい区別ができる表現が要求される——これが後述する「バッチサイズが効く」理由の出発点です。
実装上は、2N 個のビュー(N個の元サンプル×2拡張)すべてを相互に比較し、各ビューにとっての正例は「同じ元から来たもう片方のビュー」、それ以外の 2N−2 個を負例とする対称な形(NT-Xent損失)を取ります。
相互情報量の下界:InfoNCEは何を最大化しているのか
InfoNCEを最小化することは、単なる分類精度の向上を超えた意味を持ちます。理論的には、アンカーと正例の表現がもつ相互情報量(mutual information)の下界を最大化することに対応します。負例数を K とすると、おおまかに次の関係が成り立ちます。
I(z_i ; z_j) ≥ log(K) − L_InfoNCE
ここで I は相互情報量、L_InfoNCE は損失の期待値です。損失を下げると右辺が上がり、相互情報量の下界が押し上げられます。直感的には、「2つのビューに共通して残る情報量」を最大化していることになります。データ拡張で消える成分は2ビューで一致しないため共有情報に寄与せず、拡張をまたいで保たれる成分だけが相互情報量を稼ぐ——だからこそ拡張不変な意味表現が残るのです。
この不等式は下界なので、K(負例数)が小さいと下界そのものが緩く、相互情報量を十分に押し上げられません。log(K) の項が示すとおり、負例が増えるほど下界は理論上タイトになり得ます。ただし「相互情報量が大きい=良い表現」とは限らず、拡張の設計が悪いと無意味な共有情報を最大化してしまう点には注意が必要です。下界の最大化は必要条件を整えるだけで、表現の質はデータ拡張の選び方が決めます。
温度とバッチサイズ:2つのハイパーパラメータの数理
InfoNCEの挙動は、温度 τ とバッチサイズ(=負例数)という2つの量に強く支配されます。
| 要素 | 数理的な役割 | 小さすぎると | 大きすぎると |
|---|---|---|---|
| 温度 τ | ソフトマックスの鋭さを制御。1/τ がロジットの拡大率 | 最も近い負例(hard negative)に勾配が集中し、局所構造を過度に強調・不安定化 | 分布が平坦になり正負の区別が甘く、表現が潰れる |
| バッチサイズ | 負例の個数 K を決める。下界の log(K) 項を支配 | 下界が緩く、区別すべき相手が少なく表現が荒い | メモリと計算が増大。一定以上で効果は逓減 |
温度 τ は類似度を 1/τ 倍してからソフトマックスに通すので、小さいほど分布が鋭くなります。鋭いと、アンカーの近くにある「紛らわしい負例(hard negative)」に勾配の大半が集中し、それらを強く引き離します。これは細かい区別を促す一方、過度だと特定ペアに引っ張られて学習が不安定になります。逆に大きいと全負例を一様に少しずつ離すだけになり、表現が一点に潰れる崩壊(collapse)に近づきます。実用では τ = 0.1 前後がよく使われます。
バッチサイズは負例数 K を直接決めます。InfoNCEは同一バッチ内の他サンプルを負例に流用するため、バッチが大きいほど負例が増え、前節の下界 log(K) がタイトになり、より難しい分類を解く表現が育ちます。SimCLRが数千規模の大バッチを要したのはこのためです。一方でメモリ制約が壁になるため、MoCoはキュー(メモリバンク)に過去の表現を貯めて負例として再利用し、バッチに依存せず大量の負例を確保する設計を取りました。
SimCLR:データ拡張・射影ヘッド・正規化温度損失
SimCLRは、対照学習の構成要素を整理して何が効くかを明確にした枠組みです。中核は3点です。
第一に、強いデータ拡張の組み合わせです。ランダム切り抜き+リサイズ、色のジッタ、グレースケール化、ガウシアンぼかしなどを連鎖させます。とくに「切り抜き」と「色ジッタ」の併用が重要で、片方だけだと色ヒストグラムなどの近道(ショートカット)で正例を当てられてしまい、意味表現が育ちません。拡張の設計思想は データ拡張 の発想を、表現学習の教師信号として積極利用する方向に拡張したものといえます。
第二に、射影ヘッド(projection head) です。エンコーダ f の出力 h を、そのまま対照損失にかけるのではなく、小さなMLP g を通した z = g(h) の上で損失を計算します。
h = f(x) # 下流タスクに使う表現
z = g(h) # 対照損失だけに使う表現
対照損失は拡張で変わる情報(色・向きなど)を捨てる圧力をかけますが、その情報は下流タスクでは有用なことがあります。射影ヘッド g に「捨てる作業」を肩代わりさせ、その手前の h には情報を温存させるのが狙いです。実際、下流タスクには z ではなく h を使うほうが性能が高くなります。学習が終わったら g は捨て、エンコーダ f だけを転移に使います。
第三が、これまで述べた温度付き正規化損失(NT-Xent) です。正規化(単位ベクトル化)と温度 τ の両方が揃って初めて良い表現が得られます。なお、表現を球面上に均一に広げる「一様性」と正例を近づける「整列性」のバランスが質を決めることが知られており、温度はこのバランスの調整ノブとして働きます。
CLIP:画像とテキストの対照学習
同じInfoNCEの原理を、データ拡張ではなく異なるモダリティの対に適用したのがCLIPです。Webから集めた大量の「画像とそのキャプション」のペアを使い、画像エンコーダとテキストエンコーダを同時に学習します。
正例は「正しく対応する画像とテキストのペア」、負例は「バッチ内の他の画像と他のテキストの組み合わせ」です。N 個のペアからなるバッチでは、N×N の類似度行列を作り、対角成分(正しい対応)を正例、非対角を負例として、行方向(画像→テキスト)と列方向(テキスト→画像)の両方でInfoNCEを取ります。
logits = (画像埋め込み) · (テキスト埋め込み)^T / τ # N×N 行列
loss = ( CE(logits, 行ラベル) + CE(logits^T, 列ラベル) ) / 2
ここで CE はクロスエントロピー、正解ラベルは対角位置 0,1,…,N−1 です。学習の結果、画像とテキストが共通の埋め込み空間に並びます。この空間では「犬の写真」のベクトルと「a photo of a dog」のベクトルが近くに来るため、未知のクラスでも「クラス名を文に埋め込んで類似度を測る」だけで分類できる——これがゼロショット分類の正体です。類似度計算が画像とテキストの内積に帰着する点は、Attentionの数理 でクエリとキーの内積が関連度を測るのと同じ幾何的発想です。
CLIPは画像・テキスト双方向のInfoNCEであり、温度 τ も学習可能パラメータとして最適化されます(過度に小さくならないよう上限でクリップされます)。ゼロショット性能を支えるのは、対照学習が「共通空間で正例を近づけ負例を離す」一点に尽きること。データ拡張版(SimCLR)とマルチモーダル版(CLIP)は、正例・負例の作り方が違うだけで損失の数理は同一です。
まとめ:正例と負例という最小の教師信号
| 論点 | 中身 | 押さえどころ |
|---|---|---|
| 教師信号 | 正例(同一起源)を近づけ、負例を離す | ラベル不要。拡張不変な意味情報だけが残る |
| 損失 | InfoNCE(温度付きソフトマックス分類) | 相互情報量 I(z_i;z_j) の下界を最大化 |
| 温度 τ | ソフトマックスの鋭さ=hard negativeの効き | 小さすぎると不安定、大きすぎると崩壊。0.1 前後 |
| 負例数 | バッチサイズ or メモリバンクで確保 | 下界の log(K) をタイトにし表現を精緻化 |
| SimCLR/CLIP | 拡張ペア/画像テキスト対 | 正負の作り方が違うだけで損失は同型 |
対照学習の核心は、「似ているか」という自分で作れる最小の教師信号だけで、転移に強い表現が学べる点にあります。InfoNCE損失は負例集合上のソフトマックス分類であると同時に相互情報量の下界の最大化でもあり、温度とバッチサイズという2つのハイパーパラメータが負例の効き方を数理的に支配します。SimCLRは射影ヘッドと強い拡張でこの原理を画像表現に、CLIPは画像とテキストの対で共通空間の構築に応用しました。学習した表現がどう使われるかは 埋め込み と ベクトルデータベース を合わせて読むと、自己教師あり表現が現代のAIシステムにどう接続するかの全体像が見えてきます。
AI/機械学習 Article
対照学習の原理:InfoNCEとSimCLR/CLIPを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
対照学習
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5
導入後に効く点
InfoNCE損失は負例集合上のソフトマックス分類であり、最小化は表現間の相互情報量の下界を最大化することに対応する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 5
判断チェックリスト
- 自社の用途が「対照学習 / 自己教師あり学習」に近いか確認する。
- 強みである「対照学習は、同じ元から作った正例どうしを近づけ、無関係な負例を遠ざけることで、ラベルなしに表現を学ぶ。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。