Zero-shot Learningの包括的サーベイ:CLIPが切り開いたVision & Languageの新たな地平
ExaWizards Tech Blog は、CLIP を起点としたゼロショット学習とビジョン&ランゲージ分野の最新動向を 1000 本以上の論文から選別し、画像生成やセグメンテーションなどへの応用を網羅的に解説している。
キーポイント
CLIP の革新性とゼロショット学習の確立
訓練データなしでテキストと画像の類似度を計算し分類できる CLIP が、Vision & Language 研究の基盤となり、従来の限定的な学習から分散表現への転換を促した。
画像生成モデルへのCLIPの影響
StyleGAN2 から DALL-E 2 や Stable Diffusion へ移行する過程で、プロンプトによる制御やテキスト条件付き生成が可能になり、生成 AI の質が飛躍的に向上した。
多様な技術的拡張と最適化手法
CoOp や Adapter などのプロンプトチューニング、Convpass によるネットワークバイパスなど、CLIP の性能をさらに引き出すための下流タスク最適化技術が多数提案されている。
セグメンテーションと基盤モデルの統合
DenseCLIP や Segment Anything などの研究により、画像認識だけでなく領域分割や多様な視覚タスクを一つの基盤モデルで扱うアプローチが進展している。
CLIPによる画像生成のオープン化とゼロショット能力
CLIP登場前は訓練データに含まれる特定ドメインのみしか生成できなかったが、言語モデルの概念理解を活用することで「馬に乗った宇宙飛行士」など現実には存在しない画像もゼロショットで生成可能になった。
拡散モデルとゼロショット学習の相乗効果
高画質な画像生成は、DALL-E 2などの拡散モデルによる画質向上と、CLIP由来のゼロショット生成能力という両方の技術が揃って初めて実現された。
ノイズデータの活用を示したALIGNの研究
ALIGNは高価なフィルタリングを行わず大量のノイズを含むalt-textデータを用いた対照学習により、ノイズの多いデータでもCLIP手法が有効であることを示し、後の大規模データセット(LAION等)の基盤となった。
影響分析・編集コメントを表示
影響分析
この記事は、単なる技術解説を超え、CLIP という基盤技術がどのように進化し、現在の生成 AI や多様なビジョンタスクを支えているかを体系的に示しています。読者に対して、断片的な論文情報を統合し、Vision & Language 分野の全体像を把握する強力なフレームワークを提供しており、研究開発や技術選定における意思決定支援として極めて重要です。
編集コメント
1000 本以上の論文を精査した網羅的なサーベイであり、Vision & Language の現在地と未来像を理解する上で必読の資料です。特に CLIP が生成 AI に与えた影響について、技術的深みを持って解説されています。
こんにちは!画像システムグループで機械学習エンジニアをやっている小島です。
この記事では、今ホットな「Zero-shot Learning」と「Vision & Language」に関する最新情報を、CLIPという研究を起点として網羅的にサーベイしていきます。このために論文1000本に目を通し、70本程度を記事にしました。
Zero-shotやVision & Languageは、Stable Diffusionに代表される画像生成AIとも密接に関連している技術です。この記事を通して、Vision & Languageの奥深い世界を体感できるでしょう。
この記事は非常に長いため、全部読むのに1時間以上かかる可能性があるので、休憩を取りながら、または必要な部分だけ読んでください。各セクションを個別に読んでも問題ありません。
また、文章中の画像は、特別な記載がない限り、引用元の論文からのものです。
CLIPの効果と画像生成モデル CLIPが登場する前の画像生成モデル(例:StyleGAN2)
CLIPが登場した後の画像生成モデル(例:BigSleep、DALL-E 2)
プロンプトチューニング CoOp
Adapter CLIP-Adapter
SVL-Adapter / Tip-Adapter
Kronecker Adaptation
ネットワークバイパス Convpass
事前訓練の改善方法など MUST
セグメンテーション DenseCLIP
Segment Anything
生成 StyleGANベース StyleCLIP
StyleGANベース以外 Make-A-Scene
基盤モデル 画像系基盤モデル ALBEF
Everything at Once
以前のブログでも触れましたが、CLIPは、2021年にOpenAIによって発表された研究です。GPT-2やGPT-3のゼロショット学習と同様に、タスクに特化した最適化をせず、「画像が与えられたときに、最も類似度の高いテキストを選択することで、分類問題を解く」というモデルです。訓練データがなくても画像分類ができるという画期的なフレームワークです。

これをよしなにできるフレームワークも存在し、例えば、Hugging Faceのtransformersというライブラリを使えば、公式ドキュメントより引用
from PIL import Image
import requests
from transformers import CLIPProcessor, CLIPModel
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True)
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image
this is the image-text similarity score
probs = logits_per_image.softmax(dim=1) # we can take the softmax to get the label probabilities
NTT 人間情報研究所の西田さんによる「NLP と Vision-and-Language の基礎・最新動向」シリーズは非常に詳しく、おすすめです。こちらもあわせて読むと楽しめると思います。
https://speakerdeck.com/kyoun/deim-tutorial-part-1-nlp
https://speakerdeck.com/kyoun/a-tutorial-on-nlp-and-vision-and-language
CLIP の効果と画像生成モデル
CLIP の効果が顕著に現れているのは、「画像生成モデル」です。画像生成モデルとは、最近では Midjourney や Stable Diffusion などが有名です。Stable Diffusion(v2.1 時点)の構成モデルの 1 つに CLIP が含まれています。
CLIP 登場前の画像生成モデル(例:StyleGAN2)
CLIP 登場前の画像生成モデルは、クローズドな設定(訓練データに含まれる特定ドメインの画像しか生成できません)でした。例えば、現実の顔写真のデータセットで訓練されたモデルは、「スターウォーズのストームトルーパーの顔」のような訓練データにはない画像や、「宇宙空間にいるオバマ」のような現実にはありえない画像を生成することはできませんでした。これは StyleGAN2 の論文からです。

これは、FFHQ という顔写真データセットから生成された画像です。非常にきれいな顔写真が生成できていますが、顔以外の画像を生成したい場合は、別のデータセットで再び訓練する必要があります。
後に登場した StyleGAN と CLIP を組み合わせたモデル(StyleGAN-NADA)では、訓練データ以外のドメインでも画像を生成できるようになり、この問題が解決されました。あくまでこれは CLIP 登場後のことです。
CLIP 登場後の画像生成モデル(例:BigSleep、DALL-E 2)
CLIP 登場してからは、「訓練データに含まれる特定ドメインしか生成できない」という制約がなくなり、現実にはありえない画像も生成できるようになりました(オープンな設定)。
かつて、BigGAN は StyleGAN と双璧をなす強力なモデルでしたが、あくまでクローズド設定な場合でした。BigGAN に CLIP を組み合わせた BigSleep というライブラリを使うと(リポジトリからの引用です)、オープンな設定になります。

この画像は、「廃墟の街に浮かぶ風船」というプロンプトで生成されました。画像生成をやっている方ならピンとくると思いますが、画像生成を行う際、どのような画像を作りたいかを示すテキストを「プロンプト」と呼びます。「廃墟に風船が浮かんでいる光景」というのは実世界に存在するのでしょうか? 「訓練データに含まれる特定ドメインしか生成できない」という縛りが外れたことで、CLIP が学習している概念であれば、画像として生成できるようになりました。
次に、2022年に OpenAI が発表した DALL-E 2 で生成された画像を見てみましょう(ホームページからです)

「馬に乗った宇宙飛行士」という現実的にはありえない光景が、高画質で生成されています。これが可能になった理由は、言語モデルが持つ幅広い概念や深い理解を、画像生成に活用しているからです。「馬」「宇宙飛行士」「廃墟」「風船」などの個々の概念は、CLIP が学習済みで、生成モデルの訓練データにもおそらく含まれています。プロンプトに基づいて、「宇宙で馬に乗っている宇宙飛行士」のような新しい概念を理解し、生成できるのが、CLIP 以降の画像生成モデルの大きな進歩です。
「いや、ちょっとまって。CLIP が強力だからじゃなくて、拡散モデルが強力だからじゃないの?」と思うかもしれません。確かに、DALL-E 2 は拡散モデル(Diffusion Model)をベースにしており、これは画質向上の点では非常に大きいです。しかし、BigSleep のような GAN ベースのモデルでも、訓練データに含まれる特定ドメインの外側の生成、つまりゼロショット生成ができています。つまり、拡散モデルとゼロショットの両方のキーパーツが揃って、今日の高画質な画像生成が実現されているのです。
DALL-E 2 や Imagen のような最近の画像生成のホームページを見ると、「馬に乗った宇宙飛行士」や「タイムズスクエアで自転車に乗るコーギー」のような現実にはありえない画像が多数掲載されています。なぜこのようなパフォーマンスをしているかというと、絵としての単純な面白さもあるものの、「ゼロショットの画像生成がすごい」という技術的なアピールをしたいという意図があると私は理解しています。
以下では、「分類」「物体検出」といった個別のタスクについて、簡単に論文を紹介していきます。
分類モデルは、純粋な CLIP の拡張です。かなり多くの研究が出ています。まずは、CLIP と同じ時期に登場した ALIGN を紹介し、その後、下流タスクの適用についても説明します。

同じくゼロショット分類の研究でよく引用されるのが、ALIGN という手法です。ALIGN は、「ALIGN: A Large-scale ImaGe and Noisy-text embedding」の略で、大量の画像とノイズの多いテキストデータを使った対照学習(Contrastive Learning)を行います。CLIP と非常に似ていますが、CLIP が先に発表され、ALIGN はその後続となります。
ALIGN と CLIP の主な違いは、ALIGN が 10 億を超えるノイズの多い alt-text(画像の代替テキスト)を用いた対照学習である点です。一方、CLIP は 4 億枚のデータセットを使用しており、規模においては ALIGN よりも小さいものです。また、データ収集方法も異なり、CLIP は Wikipedia の頻出単語をクエリとしてクロールするというトップダウンアプローチを採用しています。これに対し、ALIGN は画像の alt-text というノイズの多いデータを、高価なフィルタリングなしで利用するボトムアップアプローチです。ALIGN が主張するのは、ノイズの多いデータであっても、Image-Encoder と Text-Encoder を用いた対照学習がうまく機能するという点です。
最近では、特に LAION-2B や 5B の登場により、データセットの規模に関わらず「CLIP」と呼ばれることが多くなっています。しかし、ノイズの多いデータセットにおいても CLIP の手法が有効であることが明らかになったのは、ALIGN の貢献と言えるでしょう。
2023 年現在、プロンプトエンジニアリングは、ChatGPT や GPT-4 を用いていかに有用な回答を引き出す方法や、Stable Diffusion を用いていかに美しい画像を生成する方法(呪文)として一般的に認識されています。しかし、プロンプトエンジニアリングの有効性は、オリジナルの CLIP 論文からすでに指摘されていました。
CLIP におけるプロンプトエンジニアリングはよりプリミティブで、テンプレート構文です。OpenAI が公開している Jupyter Notebook がわかりやすい例ですが、「a photo of {class_name}」という単一のプロンプトだけで分類するよりも、
a bad photo of a {class_name}.
a photo of many {class_name}.
a photo of the hard to see {class_name}.
のようなテンプレート構文を Text Encoder へ大量に入力し、それらの Embedding の平均をとって分類することで、「a photo of {class_name}」のような単純なプロンプトよりも高い分類精度が得られることが報告されています(CLIP の論文より)。

プロンプトエンジニアリングを使うか使わないかで比較すると、同じ精度を達成するために計算量が 4 倍も必要となる点は驚きですね。
プロンプトエンジニアリングは、GPT や Stable Diffusion と同様、手動での泥臭い調整が必要です。ここでの焦点は、「下流タスクの少量データセットで、どのようにプロンプト設計すれば精度を上げられるか?」や「下流タスクにおいて、Zero-shot から Few-shot にスケールできるか?」といった問題です。これに対して、学習ベースのアプローチが多く提案されています。
その中でも基本的なものが、プロンプトチューニング(Prompt Tuning)という手法です。これは、下流タスクのプロンプト表現を学習ベースで行う方法です。

これはプロンプトチューニングベースの手法の走りである「CoOp」という方法です。CoOpは、プロンプトエンジニアリングを計算ベースで行い、学習可能なコンテクスト(Learnable Context)をプロンプトの表現に追加することで、手動のプロンプトやLinear-Probeよりも優れた下流タスクの性能が得られると報告されています。Linear-Probeとは、CLIPのImage-Encoderを固定し、末尾に線形回帰を追加して、特徴量ベースのロジスティック回帰を行う方法です。
CoOpでは、画像やテキストのモデルのパラメータは固定され、プロンプトのコンテクストキーワードだけが学習されます。コンテクストキーワードと言われるとあまりイメージがわかないですが、実際はベクトルの値です。
CoOpの発展形としてDualCoOpがあります。この手法では、学習に使うコンテクストキーワードをポジティブとネガティブの2種類用意します。

ネガティブなプロンプトを用意することは、Stable Diffusionのようで直感的に理解しやすいです。DualCoOpは、もともと「アノテーションが限られた状況でのマルチラベル問題」に対処するために開発されました。アノテーションが限られるとは、ラベルが「ポジティブ、ネガティブ、不明」のようにざっくりとした状況を指します。DualCoOpは、正負両方のコンテクストを使って、誤検出を減らしながら新しい画像のラベルを正確に予測し、精度向上に貢献しています。
「CoOpがテキスト側のプロンプトチューニングするなら、画像側のプロンプトチューニングもすればいいじゃん」というのがVisual Prompt Tuningです。Jia et al.とBahng et al.がありますが、ここでは後者を紹介します。前者の解説記事はcvpaper.challengeが詳しいです。

Visual Promptとは、画像の外枠にノイズのようなものを追加し、それをプロンプトとするものです。プロンプト部分だけを学習ベースで最適化していく方法です。また、この論文の後半の議論が面白く、衛星画像(EuroSAT:CLIPのZero-shot精度が低いことで知られる)に1ピクセルの赤い点をVisual Promptとして追加するだけで、精度が3%も向上したと報告されています。この結果は、Unadversarial ExamplesやDomain Adaptationとの関連性が議論されている点が興味深いです。
テスト時にラベルを使わずにプロンプトチューニングを行う方法があります。Test-Time Prompt Tuning(TPT)という手法です。

テスト時にデータ拡張を行うことを「Test-Time Augmentation」と呼びますが、そのアナロジーで理解するとわかりやすいでしょう。TPT では、テストデータ全体に対して拡張を適用し、複数のビューを作成した上で画像の特徴を抽出します。その後、信頼度でフィルタリングし、エントロピー(entropy)を最小にするようにプロンプトを最適化します。このエントロピー最小化では、正解のラベルは必要ありません。信頼度に基づく閾値はハイパーパラメータとして設定されます。
プロンプトチューニングは、画像やテキストだけでなく、マルチモーダル(複数のモード)にも適用できます。Multi-modal Prompt Learning なので MaPLe です。

この図に示すように、クロスモーダル(異なるモード間)でプロンプトを学習させる際には、ネットワーク間でレイヤーごとに密接なつながりを持たせます。これにより、画像と言語のプロンプトが強く結びつき、相乗効果が生まれます。その結果、各モダリティごとに独立したプロンプトを学習させず、下流タスクの精度を向上させることが目的です。
教師なしでプロンプトラーニングを行う方法として、Unsupervised Prompt Learning(略して UPL)という手法があります。

UPL では、ラベルのないデータとプロンプトを使って、擬似ラベル(Pseudo Label)を生成します。その中から信頼度が高い TopK のサンプルを選び、プロンプトの表現を学習させます(プロンプトチューニング)。この信頼度の高い疑似ラベルを使ってプロンプトを学習させることが、教師なしを可能にしたポイントです。研究では、11 のデータセットに対して、CLIP のゼロショット精度が 59.18%から、追加のラベルなしで 63.38%まで向上したことが報告されています。さらに、CLIP のプロンプトエンジニアリングと組み合わせることで、精度が 68.37%まで向上し、CoOp や Tip-Adapter の 8-shot と同等の結果が得られたとのことです。
これまでプロンプトのチューニング方法を見てきましたが、最近では Adapter という別の方法が主流になっています。Adapter は、ネットワークを固定し、新しい層を追加してその層だけを訓練する方法です。一部の層だけを訓練するという考え方は、プロンプトチューニングに似ていますが、Adapter では訓練箇所がプロンプトの表現に限られません。
この Adapter の良い例が、「LoRA」という手法で、Stable Diffusion で特定のデザインを生成したり、ローカルで動作する LLM(例:Alpaca、LLaMA)を任意の言語に適用するために使われます。LoRA はファインチューニングに似ていますが、追加された層だけを訓練するため、訓練時間が短く済みます。

CLIP-Adapter は、各エンコーダーの最後にブランチのボトルネック構造を持つレイヤーを追加し、その部分だけを訓練する方法です。コードを見ると分かる通り、Adapter の構造は非常にシンプルで、Image-Encoder の最後に ResNet の Skip Connection だけが追加された形です。
この方法では、元の事前学習済みの特徴と、Skip Connection による特徴をブレンドすることで、CoOp よりもシンプルなモデル構造が実現され、少数のデータでの下流タスクの精度が向上することが報告されています。そのため、CLIP においてプロンプトチューニングの代わりとして、Adapter が注目されるようになります。
SVL-Adapter / Tip-Adapter
CLIP-Adapter 以降、多くの「○○-Adapter」という手法が登場しました。ここでは SVL-Adapter と Tip-Adapter を紹介します。

SVL-Adapter は、画像側に自己教師あり学習を追加したものです。これは、CLIP の訓練データセットに含まれていないデータ(例:衛星画像や熱/モーショントリガーカメラの画像)を扱いたいためです。これらの分類は「ローショット分類」と呼ばれ、ファインチューニングに使える画像が限られています。ローショット分類は、CLIP による分類の信頼性が低く、インターネット上にデータが少ない困難な状況です。
SVL-Adapter を使うと、ローショット領域で既存手法よりも 10%精度が向上することが報告されています。さらに、ハイパーパラメータの自動選択方法も提案されています。

一方、Tip-Adapter は、Few-shot 学習データから Key-Value Cache モデルを使って Adapter を構築する手法です。Key には訓練データの Image Encoder の特徴量、Value にはクラスラベルが格納されます。推論時には、特徴量の検索を行い、CLIP の事前知識を更新します。訓練データのキャッシュのみを行っているため、従来の Adapter とは異なり、訓練(バックプロパゲーションを伴う)が不要です。ハイパーパラメータに敏感な欠点がありますが、精度は良く、計算量やデータ数が限られた状況では有効です。
Kronecker Adaptation
最後に、少し異なるタイプのアダプターを紹介しましょう。これは Kronecker Adaptation(KAdaptation)という方法で、Stable Diffusion でよく用いられる LoRA の改良版にあたります。実は、これも CLIP の文脈で使用されています。最近話題の画像生成の裏に、CLIP がちらほら登場するのが面白いですね!

クロネッカー適応(Kronecker Adaptation)は、LoRA をクロネッカー積に拡張した手法です。左の図は、20 の下流タスクデータセットに対する CLIP の適応精度の平均を示しています。縦軸は精度、横軸は訓練パラメータの数であり、LoRA や Linear-Probe(線形プローブ)よりも計算量と精度の両面で効率的であることが示されています。
画像生成においては、LoRA に代わり最近 LyCORIS というオープンソースソフトウェア(OSS)が利用されるようになりましたが、これはアダマール積ベースの手法です。LoRA の改良版として、アダマール積を採用するかクロネッカー積を採用するかという、いわば親戚のような関係性が興味深いです。
ここでは、ネットワークバイパス技術の進化を見ていきます。これらは一種の Adapter(アダプター)とみなすことができますが、画像分類ネットワーク全般に適用可能であるため、CLIP との関連性は必ずしも強いものではありません。
この研究では、ViT(Vision Transformer:ビジョン・トランスフォーマー)の各レイヤー間に畳み込みブロックの Skip Connection(スキップ接続)を追加することで精度が向上することが示されています。この技術は Conv のバイパスであるため Convpass と呼ばれています。位置付けとしては、LoRA や後述する AdaptFormer の改良版となります。

この方法では、Multi-Head Self Attention(マルチヘッド・セルフアテンション)や MLP(多層パーセプトロン)の間に CNN モジュールをバイパスさせます。ViT の各層の間に CNN を挟むことで精度が向上する理由として、論文では「画像指向のネットワーク設計により、新たな帰納バイアスが生じ、効率性が向上した」と述べられています。
ViT が導入された当初は、「CNN は帰納バイアスがハードコーディングされている」という悪い意味で評価され、「ViT は帰納バイアスから解放されている」と良い意味で評価されることが多かったです。しかし、特に少量のデータを用いた転移学習(Ad
原文を表示
こんにちは! 画像システムグループで機械学習エンジニアをやっている小島です。
この記事では、今ホットな「Zero-shot Learning」と「Vision & Language」に関する最新情報を、CLIPという研究を起点として網羅的にサーベイをしていきます。このために論文1000本に目を通し、70本程度を記事にしました。
Zero-shotやVision & Languageは、Stable Diffusionに代表される画像生成AIとも密接に関連している技術です。この記事を通して、Vision & Languageの奥深い世界を体感できるでしょう。
この記事は非常に長いため、全部読むのに1時間以上かかる可能性があるので、休憩を取りながら、または必要な部分だけ読んでください。各セクションを個別に読んでも問題ありません。
また、文章中の画像は、特別な記載がない限り、引用元の論文からのものです。
CLIPの効果と画像生成モデル CLIPが登場する前の画像生成モデル(例:StyleGAN2)
CLIPが登場した後の画像生成モデル(例:BigSleep、DALL-E 2)
プロンプトチューニング CoOp
Adapter CLIP-Adapter
SVL-Adapter / Tip-Adapter
Kronecker Adaptation
ネットワークバイパス Convpass
事前訓練の改善方法など MUST
セグメンテーション DenseCLIP
Segment Anything
生成 StyleGANベース StyleCLIP
StyleGANベース以外 Make-A-Scene
基盤モデル 画像系基盤モデル ALBEF
Everything at Once
以前のブログでも触れましたが、CLIPは、2021年にOpenAIによって発表された研究です。GPT-2やGPT-3のゼロショット学習と同様に、タスクに特化した最適化をせず、「画像が与えられたときに、最も類似度の高いテキストを選択することで、分類問題を解く」というモデルです。訓練データがなくても画像分類ができるという画期的なフレームワークです。

これをよしなにできるフレームワークも存在し、例えば、Hugging Faceのtransformersというライブラリを使えば、公式ドキュメントより引用
from PIL import Image import requests from transformers import CLIPProcessor, CLIPModel model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32") processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32") url = "http://images.cocodataset.org/val2017/000000039769.jpg" image = Image.open(requests.get(url, stream=True).raw) inputs = processor(text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True) outputs = model(**inputs) logits_per_image = outputs.logits_per_image # this is the image-text similarity score probs = logits_per_image.softmax(dim=1) # we can take the softmax to get the label probabilities
このような簡単なコードで、「犬か猫か」を分類できます。
CLIPの革新性は、訓練データが不要なだけでなく、「画像と言語の分散表現を学習する」ことで応用範囲が格段に広がる点です。従来の画像だけの学習では、訓練データセット内の限られた表現しか学習できませんでした。しかし、言語モデルの豊富な表現力を利用することで、ゼロショット転移性を持つ(訓練データにない分布にも適応できる)ようになりました。これが非常に強いのです。これにより、さまざまな画像認識タスクがゼロショット方面に拡張されます。
CLIPは現在のVision & Languageの研究の基礎となっており、多くのモデルで活用されています。最近の話題の生成モデルや基盤モデルも、CLIPの影響を大きく受けているものが多数あります。
この記事では、CLIPの後続の研究をひたすらサーベイし、CLIPの遺伝子がどのように受け継がれているかを見ていきます。CLIPを追跡することで、現在のVision & Languageの最先端の動向を理解することができるでしょう。論文の抽出は以下の手順で行いました。
Google ScholarでCLIPを引用している約1000本の論文を抽出
各論文をざっと見て、「面白そうなもの」や「特にコードが付いているもの」を選ぶ
論文の選択は2022年末に行ったため、生成モデルなどの情報が少し古い部分があることをご了承ください。
この記事では、「下流タスク(Downstream task)」という表現が何度も登場します。これは大規模モデルでよく使われる言葉で、例えば、CLIPのような大規模な事前訓練を行ったモデルがあると仮定して、その上で「犬か猫かを分類する分類器を作りたい」とします。
この「犬か猫かを分類する」タスクが下流タスクです。「事前訓練と対比して言っている」ということを頭の片隅に入れておいてください。
NTT人間情報研究所・西田さんの「NLPとVision-and-Languageの基礎・最新動向」シリーズが詳しくておすすめです。こちらもあわせて読むと楽しめると思います。
https://speakerdeck.com/kyoun/deim-tutorial-part-1-nlp
https://speakerdeck.com/kyoun/a-tutorial-on-nlp-and-vision-and-language
CLIPの効果と画像生成モデル
CLIPの効果が顕著に現れているのは、「画像生成モデル」です。画像生成モデルとは、最近ではMidjourneyやStable Diffusionなどが有名です。Stable Diffusion(v2.1時点)の構成モデルの1つにCLIPが含まれています。
CLIPが登場する前の画像生成モデル(例:StyleGAN2)
CLIPが登場する前の画像生成モデルは、クローズドな設定(訓練データに含まれる特定ドメインの画像しか生成できません)でした。例えば、現実の顔写真のデータセットで訓練されたモデルは、「スターウォーズのストームトルーパーの顔」のような訓練データにはない画像や、「宇宙空間にいるオバマ」のような現実にはありえない画像を生成することはできませんでした。これはStyleGAN2の論文からです。

これは、FFHQという顔写真データセットから生成された画像です。非常にきれいな顔写真が生成できていますが、顔以外の画像を生成したい場合は、別のデータセットで再び訓練する必要があります。
後に登場したStyleGANとCLIPを組み合わせたモデル(StyleGAN-NADA)では、訓練データ以外のドメインでも画像を生成できるようになり、この問題が解決されました。あくまでこれはCLIPが登場した後のことです。
CLIPが登場した後の画像生成モデル(例:BigSleep、DALL-E 2)
CLIPが登場してからは、「訓練データに含まれる特定ドメインしか生成できない」という制約がなくなり、現実にはありえない画像も生成できるようになりました(オープンな設定)。
かつて、BigGANはStyleGANと双璧をなす強力なモデルでしたが、あくまでクローズド設定な場合でした。BigGANにCLIPを組み合わせたBigSleepというライブラリを使うと(リポジトリからの引用です)、オープンな設定になります。

この画像は、「廃墟の街に浮かぶ風船」というプロンプトで生成されました。画像生成をやっている方ならピンとくると思いますが、画像生成を行う際、どのような画像を作りたいかを示すテキストを「プロンプト」と呼びます。「廃墟に風船が浮かんでいる光景」というのは実世界に存在するのでしょうか? 「訓練データに含まれる特定ドメインしか生成できない」という縛りが外れたことで、CLIPが学習している概念であれば、画像として生成できるようになりました。
次に、2022年にOpenAIが発表したDALL-E 2で生成された画像を見てみましょう(ホームページからです)

「馬に乗った宇宙飛行士」という現実的にはありえない光景が、高画質で生成されています。これが可能になった理由は、言語モデルが持つ幅広い概念や深い理解を、画像生成に活用しているからです。「馬」「宇宙飛行士」「廃墟」「風船」などの個々の概念は、CLIPが学習済みで、生成モデルの訓練データにもおそらく含まれています。プロンプトに基づいて、「宇宙で馬に乗っている宇宙飛行士」のような新しい概念を理解し、生成できるのが、CLIP以降の画像生成モデルの大きな進歩です。
「いや、ちょっとまって。CLIPが強力だからじゃなくて、拡散モデルが強力だからじゃないの?」と思うかもしれません。確かに、DALL-E 2は拡散モデルをベースにしており、これは画質向上の点では非常に大きいです。しかし、BigSleepのようなGANベースのモデルでも、訓練データに含まれる特定ドメインの外側の生成、つまりゼロショット生成ができています。つまり、拡散モデルとゼロショットの両方のキーパーツが揃って、今日の高画質な画像生成が実現されているのです。
DALL-E 2やImagenのような最近の画像生成のホームページを見ると、「馬に乗った宇宙飛行士」や「タイムズスクエアで自転車に乗るコーギー」のような現実にはありえない画像が多数掲載されています。なぜこのようなパフォーマンスをしているかというと、絵としての単純な面白さもあるものの、「ゼロショットの画像生成がすごい」という技術的なアピールをしたいという意図があると私は理解しています。
以下では、「分類」「物体検出」といった個別のタスクについて、簡単に論文を紹介していきます。
分類モデルは、純粋なCLIPの拡張です。かなり多くの研究が出ています。まずは、CLIPと同じ時期に登場したALIGNを紹介し、その後、下流タスクの適用についても説明します。

同じくゼロショット分類の研究でよく引用されるのが、ALIGNという手法です。ALIGNは、「ALIGN: A Large-scale ImaGe and Noisy-text embedding」の略で、大量の画像とノイズの多いテキストデータを使った対照学習(Contrastive Learning)を行います。CLIPと非常に似ていますが、CLIPが先に発表され、ALIGNはその後続となります。
ALIGNとCLIPの主な違いは、ALIGNが10億を超えるノイズの多いalt-text(画像のalt属性のテキスト)を使った対照学習であることです。一方、CLIPは4億枚のデータセットを使っており、ALIGNと比べて規模が小さいです。また、データ収集方法も異なり、CLIPはWikipediaの頻出単語をクエリとしてクロールするというトップダウンアプローチです。ALIGNは、画像のalt-textというノイズの多いデータを、高価なフィルタリングなしで使ったボトムアップアプローチです。ALIGNの主張は、ノイズの多いデータでも、Image-EncoderとText-Encoderを使った対照学習がうまく機能することです。
最近では、特にLAION-2B, 5Bが登場したことで、データセットの大きさに関係なく「CLIP」と呼ばれることが多くなっています。しかし、ノイズの多いデータセットでもCLIPの手法が有効であることが分かったのは、ALIGNの貢献と言えるでしょう。
2023年現在、プロンプトエンジニアリングは、ChatGPTやGPT-4を使っていかに有用な回答を引き出す方法や、Stable Diffusionを用いていかに美しい画像を生成する方法(呪文)として一般的に認識されています。しかし、プロンプトエンジニアリングの有効性は、オリジナルのCLIP論文からすでに指摘されていました。
CLIPにおけるプロンプトエンジニアリングはもっとプリミティブで、テンプレート構文です。OpenAIが公開しているJupyter Notebookがわかりやすいですが、単に「a photo of {class_name}」というプロンプトだけで分類するよりも、
a bad photo of a {class_name}.
a photo of many {class_name}.
a photo of the hard to see {class_name}.
のようなテンプレート構文をText Encoderへ大量に入力し、それらのEmbeddingの平均をとって分類することで、「a photo of {class_name}」のような単純なプロンプトよりも高い分類精度が得られることが報告されています(CLIPの論文より)。

プロンプトエンジニアリングを使うか使わないかで比較すると、同じ精度を達成するために、計算量が4倍も必要なことが驚きですね。
プロンプトエンジニアリングは、GPTやStable Diffusionと同じく、手動での泥臭い調整が必要です。ここでの焦点は、「下流タスクの少量データセットで、どのようにプロンプト設計すれば精度を上げられるか?」や「下流タスクで、Zero-shotからFew-shotにスケールできるか?」といった問題です。これに対して、学習ベースのアプローチが多く提案されています。
その中でも基本的なものが、プロンプトチューニング(Prompt Tuning)という手法です。これは、下流タスクのプロンプト表現を学習ベースで行う方法です。

これはプロンプトチューニングベースの手法の走りである「CoOp」という方法です。CoOpは、プロンプトエンジニアリングを計算ベースで行い、学習可能なコンテクスト(Learnable Context)をプロンプトの表現に追加することで、手動のプロンプトやLinear-Probeよりも優れた下流タスクの性能が得られると報告されています。Linear-Probeとは、CLIPのImage-Encoderを固定し、末尾に線形回帰を追加して、特徴量ベースのロジスティック回帰を行う方法です。
CoOpでは、画像やテキストのモデルのパラメータは固定され、プロンプトのコンテクストキーワードだけが学習されます。コンテクストキーワードと言われるとあまりイメージがわかないですが、実際はベクトルの値です。
CoOpの発展形としてDualCoOpがあります。この手法では、学習に使うコンテクストキーワードをポジティブとネガティブの2種類用意します。

ネガティブなプロンプトを用意することは、Stable Diffusionのようで直感的に理解しやすいです。DualCoOpは、もともと「アノテーションが限られた状況でのマルチラベル問題」に対処するために開発されました。アノテーションが限られるとは、ラベルが「ポジティブ、ネガティブ、不明」のようにざっくりとした状況を指します。DualCoOpは、正負両方のコンテクストを使って、誤検出を減らしながら新しい画像のラベルを正確に予測し、精度向上に貢献しています。
「CoOpがテキスト側のプロンプトチューニングするなら、画像側のプロンプトチューニングもすればいいじゃん」というのがVisual Prompt Tuningです。Jia et al.とBahng et al.がありますが、ここでは後者を紹介します。前者の解説記事はcvpaper.challengeが詳しいです。

Visual Promptとは、画像の外枠にノイズのようなものを追加し、それをプロンプトとするものです。プロンプト部分だけを学習ベースで最適化していく方法です。また、この論文の後半の議論が面白く、衛星画像(EuroSAT:CLIPのZero-shot精度が低いことで知られる)に1ピクセルの赤い点をVisual Promptとして追加するだけで、精度が3%も向上したと報告されています。この結果は、Unadversarial ExamplesやDomain Adaptationとの関連性が議論されている点が興味深いです。
テスト時にラベルを使わずにプロンプトチューニングを行う方法があります。Test-Time Prompt Tuning(TPT)という手法です。

テスト時にData Augmentationをすることを「Test-Time Augmentation」と言いますが、そのアナロジーで理解するとわかりやすいでしょう。TPTでは、テストデータ全体に対してAugmentationを適用し、複数のビューを作成した上で、画像の特徴を抽出します。その後、信頼度でフィルタリングし、エントロピーを最小にするようにプロンプトを最適化します。このエントロピー最小化では、正解のラベルは必要ありません。信頼度に基づく閾値はハイパーパラメータとして設定されます。
プロンプトチューニングは、画像やテキストだけでなく、マルチモーダル(複数のモード)にも適用できます。Multi-modal Prompt LearningなのでMaPLeです。

この図に示すように、クロスモーダル(異なるモード間)でプロンプトを学習させる際には、ネットワーク間でレイヤーごとに密接なつながりを持たせます。これにより、画像と言語のプロンプトが強く結びつき、相乗効果が生まれます。その結果、各モダリティごとに独立したプロンプトを学習させず、下流タスクの精度を向上させることが目的です。
教師なしでプロンプトラーニングを行う方法として、Unsupervised Prompt Learning(略してUPL)という手法があります。

UPLでは、ラベルのないデータとプロンプトを使って、擬似ラベル(Pseudo Label)を生成します。その中から信頼度が高いTopKのサンプルを選び、プロンプトの表現を学習させます(プロンプトチューニング)。この信頼度の高い疑似ラベルを使ってプロンプトを学習させることが、教師なしを可能にしたポイントです。研究では、11のデータセットに対して、CLIPのゼロショット精度が59.18%から、追加のラベルなしで63.38%まで向上したことが報告されています。さらに、CLIPのプロンプトエンジニアリングと組み合わせることで、精度が68.37%まで向上し、CoOpやTip-Adapterの8-shotと同等の結果が得られたとのことです。
これまでプロンプトのチューニング方法を見てきましたが、最近ではAdapterという別の方法が主流になっています。Adapterは、ネットワークを固定し、新しい層を追加してその層だけを訓練する方法です。一部の層だけを訓練するという考え方は、プロンプトチューニングに似ていますが、Adapterでは訓練箇所がプロンプトの表現に限られません。
このAdapterの良い例が、「LoRA」という手法で、Stable Diffusionで特定のデザインを生成したり、ローカルで動作するLLM(例:Alpaca、LLaMA)を任意の言語に適用するために使われます。LoRAはファインチューニングに似ていますが、追加された層だけを訓練するため、訓練時間が短く済みます。

CLIP-Adapterは、各エンコーダーの最後にブランチのボトルネック構造のレイヤーを追加し、その部分だけを訓練する方法です。コードを見ると分かる通り、Adapterの構造は非常にシンプルで、Image-Encoderの最後にResNetのSkip Connectionだけが追加されてた形です。
この方法では、元の事前学習済みの特徴と、Skip Connectionによる特徴をブレンドすることで、CoOpよりもシンプルなモデル構造が実現され、少数のデータでの下流タスクの精度が向上することが報告されています。そのため、CLIPにおいてプロンプトチューニングの代わりとして、Adapterが注目されるようになります。
SVL-Adapter / Tip-Adapter
CLIP-Adapter以降、多くの「○○-Adapter」という手法が登場しました。ここではSVL-AdapterとTip-Adapterを紹介します。

SVL-Adapterは、画像側に自己教師あり学習を追加したものです。これは、CLIPの訓練データセットに含まれていないデータ(例:衛星画像や熱/モーショントリガーカメラの画像)を扱いたいためです。これらの分類は「ローショット分類」と呼ばれ、ファインチューニングに使える画像が限られています。ローショット分類は、CLIPによる分類の信頼性が低く、インターネット上にデータが少ない困難な状況です。
SVL-Adapterを使うと、ローショット領域で既存手法よりも10%精度が向上することが報告されています。さらに、ハイパーパラメータの自動選択方法も提案されています。

一方、Tip-Adapterは、Few-shot学習データからKey-Value Cacheモデルを使ってAdapterを構築する手法です。Keyには訓練データのImage Encoderの特徴量、Valueにはクラスラベルが格納されます。推論時には、特徴量の検索を行い、CLIPの事前知識を更新します。訓練データのキャッシュのみを行っているため、従来のAdapterとは異なり、訓練(バックプロパゲーションを伴う)が不要です。ハイパーパラメータに敏感な欠点がありますが、精度は良く、計算量やデータ数が限られた状況では有効です。
Kronecker Adaptation
最後に、少し異なるタイプのアダプターを紹介しましょう。これはKronecker Adaptation(KAdaptation)という方法で、Stable Diffusionでよく用いられるLoRAの改良版にあたります。実は、これもCLIPの文脈で使用されています。最近話題の画像生成の裏に、CLIPがちらほら登場するのが面白いですね!

Kronecker Adaptationは、LoRAをクロネッカー積にしたものです。左の図は、20個の下流タスクのデータセットに対するCLIPの適応精度の平均を示しています。縦軸は精度で、横軸は訓練パラメーターの数です。LoRAやLinear-Probeよりも、計算量と精度の両方で効率的であることが示されています。
画像生成では、LoRAの代わりに最近LyCORISというOSSが使われるようになりましたが、これはアダマール積ベースの手法です。LoRAの改良で、アダマール積を使うか、クロネッカー積を使うかという、親戚のような関係が興味深いです。
ここでは、ネットワークバイパス技術の進化を見ていきます。これらは一種のAdapterと考えることができますが、画像分類ネットワーク全般に適用可能であるため、CLIPとは関連性が薄い部分もあります。
この研究では、ViT(Vision Transformer)の各レイヤー間に畳み込みブロックのSkip Connectionを追加することで、精度が向上することが示されています。この技術は、ConvのバイパスなのでConvpassと呼ばれています。位置付けとしては、LoRAや後述のAdaptFormerの改良版となります。

この方法では、Multi-Head Self AttentionやMLPの間にCNNモジュールをバイパスさせます。ViTの各層の間にCNNを挟むことで精度が向上する理由として、論文では「画像指向のネットワーク設計により、新たな帰納バイアスが生じ、効率性が向上した」と述べられています。
ViTが導入された当初は、「CNNは帰納バイアスがハードコーディングされている」という悪い意味で評価され、「ViTは帰納バイアスから解放されている」と良い意味で評価されることが多かったです。しかし、特に少量のデータを用いた転移学習(Ad
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み