Re Reference AI

技術

対照学習とは

Contrastive Learning / コントラスティブ学習

似たデータの表現を近づけ、異なるデータの表現を遠ざけるように埋め込みを学習する方式

学習埋め込み

ひとことで言うと

「似ているもの同士は近く、違うもの同士は遠く」に配置されるよう、データの特徴の座標を学習する方法。

概要

対照学習とは、似たデータの組の表現を近づけ、異なるデータの組の表現を遠ざけるように埋め込みを学習する方式を指す。 同じ画像への異なるデータ拡張を正例ペア、他の画像を負例として学習する画像表現学習や、画像とその説明文を対応づけるCLIPの学習が代表例になる。 ラベルを使わずに質の高い表現を得られる自己教師あり学習の主要な方法であり、検索や類似度計算に使う埋め込みモデルの学習にも広く使われている。

歴史

画像分野では2020年に発表されたSimCLRやMoCoが代表的な研究として知られる。

アーキテクチャ

同じデータに異なるデータ拡張(切り抜き・色調変化等)を適用したペアを正例、バッチ内の他のデータを負例として扱う。エンコーダがそれぞれを埋め込みベクトルへ変換し、正例ペアの類似度を高く、負例ペアの類似度を低くするようInfoNCE等の対照損失で学習する。

ワークフロー

入力データに2種類の拡張を適用し正例ペアを作る → エンコーダ埋め込みベクトルを計算する → バッチ内の他サンプルを負例として類似度を計算する → 正例の類似度を最大化し負例の類似度を最小化する対照損失で学習する。

コード例

対照損失(InfoNCE)の簡易実装

import torch
import torch.nn.functional as F

def info_nce_loss(z1, z2, temperature=0.5):
    z1, z2 = F.normalize(z1, dim=1), F.normalize(z2, dim=1)
    logits = z1 @ z2.T / temperature
    labels = torch.arange(z1.size(0), device=z1.device)
    return F.cross_entropy(logits, labels)

利点

  • ラベルなしデータから、下流タスクに転用しやすい高品質な埋め込み表現を学習できる
  • 画像とテキストなど異なる様式間の対応関係(CLIP等)も同じ枠組みで学習できる
  • 負例を増やすほど表現の質は向上する傾向にあり、バッチサイズやメモリバンクの工夫で性能を伸ばしやすい

欠点

  • 十分な数の負例を確保するため大きなバッチサイズやメモリバンクが必要になり、計算資源を要する
  • データ拡張の設計がタスクに合っていないと、学習される表現の質が低下する
  • 正例・負例の定義が曖昧なドメイン(意味的に類似するが別データとして扱われる場合等)では性能が不安定になりやすい

関連用語

EmbeddingCLIP自己教師あり学習埋め込みモデルデータ拡張

よくある質問

対照学習と自己教師あり学習の関係は?

対照学習は自己教師あり学習を実現する代表的な手法の1つで、データ拡張によって作った正例・負例の対比から表現を学習する。

CLIPとの関係は?

CLIPは画像とその説明文を正例ペア、他の組み合わせを負例として対照学習を行うことで、画像とテキストを同じ埋め込み空間に対応づけるモデル。

参考文献

関連Zenn記事