GPT-3におけるFew-Shot・Zero-Shot

5 min読了の目安(約4500字TECH技術記事

膨大なパラメータを持つ言語モデルであるGPT-3は、学習後にパラメータを更新することなくタスクの情報と少量のデモンストレーションを入力することで、様々なNLPタスクをこなすことができます。論文のタイトルに含まれる「Few-Shot Learners」というフレーズもこれを意図したものだと言えます。

論文ではZero/One/Few-Shotという概念に触れられていますが、これらの説明が自分の理解していた内容と違っていました。結論から言えば、GPT-3におけるZero/One/Few-Shotと、一般に紹介されている(と思う)Zero/One/Few-Shot learningは大きく異なります。本稿ではGPT-3におけるこれらの説明と、他の資料での説明を比較し内容を整理します。

https://arxiv.org/abs/2005.14165

GPT-3によるマルチタスク処理の仕組み

GPT-3がパラメータの更新なしに様々なタスクを処理する仕組み自体は、基本的に前身となったGPT-2と同じ自己回帰です。つまり与えられたトークンの系列から、次のトークンを予測するという方法です。

マルチタスクの予測はp(output|input, task)としてモデル化できますが、GPT-2(およびGPT-3)ではこのタスクの部分も文章として入力することで、単一のモデルで様々なタスクを処理することができます。逆に言えば、自己回帰による学習が潜在的にマルチタスク学習になっているとも言えます。

https://github.com/openai/gpt-2

GPT-3の推論形態

GPT-3の論文では、事前学習モデルを利用するアプローチとしてFine-Tuning, Few-Shot, One-Shot, Zero-Shotの4つに触れています。これらの4つは目標タスクのデータをどれくらい必要とするかによる分類と言えます。

Fine-Tuning

事前学習済みモデルをもとにして、目標タスクのデータセットで教師あり学習を行う方法です。多くのベンチマークで優れた性能を発揮しており、広く利用されています。一方で論文では以下のようなデメリットを挙げています。

  1. 目標タスクが増えるとその分だけ個別にモデルを学習する必要がある
  2. FineTune時の狭い領域の学習データに特化してしまい、汎化性能が悪くなる(可能性がある)
  3. 学習データの見せかけ(spurious)の特徴を利用する(可能性がある)

③の見せかけの特徴とは、例えば画像分類において背景のみに注目して物体を分類できてしまうようなケースを指していると思われます。GPT-3はタスクに関知しない性能にフォーカスしているため、fine-tuneは行いません。

Few-Shot

GPT-3の論文内では、few-shotは推論時にタスクに関する説明と少量のデモンストレーションを与える方式(※ただしモデルのパラメータは更新しない)として紹介しています。これはもともとGPT-2の時点で採用されていた方法です。パラメータを更新しないため、fine-tuningのようにタスクごとに新しくデータセットを作成しなくて良いというメリットがあります。同じ理由で、対象タスクのデータに過学習しないというメリットもあります。

一方で注意するべき点として、fine-tuning程の性能は発揮できない、また少量とはいえデモンストレーションとしてのデータが必要ということが記載されています。

One-Shot

One-Shotはfew-shotにおいてデモンストレーションの数が1つであるケースです。One-shotのシチュエーションは、人が例示を見てタスクに取り組むという状況に近いとして個別に取り上げられています。

Zero-Shot

GPT-3におけるzero-shotとは、推論時にはタスクに関する説明のみが与えられ、デモンストレーションは全く与えられないケースです。最も汎用ですが、最も難しい設定になっています。一方で翻訳など一部のタスクでは、zero-shotの設定でも人間に近い性能を発揮したと報告しています。

以下は英語→フランス語の翻訳タスクにおけるzero-shot, one-shot, few-shotの推論例です。自己回帰(与えられた単語系列から次の単語を予測する)によって予測を行うという点は共通していますが、与えられるデモンストレーション(図中example)の数が異なっていることがわかります。

このように、GPT-3においてZero/One/Few-Shotはタスク説明+デモンストレーションが与えられるという統一的な設定において、デモンストレーションの多寡に応じて分類されていることがわかります。

一般的なFew/One/Zero-Shot learningの説明

一般的なFew/One/Zero-Shot learningの紹介として、まずGoodfellowらのDeep Learning[1]をあたりました。15章「表現学習」の「15.2 転移学習とドメイン適応」の節に、one-shot learningとzero-shot learningに関する記載があり、どちらも転移学習の極端なケースとして触れられています。

One-Shot Learning

ワンショット学習(Fei-Fei et al., 2006[2])は、潜在的なクラスをきれいに分けるような表現を1段階目で学習することで可能となる。知識を転移する際には、1つのラベル付き事例があれば、特徴空間上でその点の周りにあるいくつものテスト事例のラベルを推論するのに十分である。学習された表現空間でこのような普遍性に対応する変化の要因がその他の要因からきれいに区別でき、特定のカテゴリの物体を識別するのにどの要因が重要なのかを何らかの形で学習する限りにおいて、これはうまくいく。

Few-Shot learningは少量のラベル付きデータが与えられる設定であり、one-shotの一般的なケースとして扱えます。

VinyalsらのMatching Networks[3]では、学習データを記憶するメモリーモジュールと近傍法を組み合わせることで、少数サンプルに基づいた分類を提案しています。SnellらによるPrototypical Networks[4]では、学習によって各クラスの代表点(prototype)を獲得します。予測時は代表点との距離に応じて分類確率を計算します。これらの手法は以下のGitHubリポジトリにおいても紹介されています。

https://github.com/oscarknagg/few-shot

Zero-Shot Learning

ゼロショット学習の例として、学習器が大量のテキストを読んだ後に物体認識を行うような問題設定を考えよう。もしそのテキストが物体を十分にうまく説明できているとすれば、ある特定の物体のタスクを、その物体の画像を1枚も見ずに認識しうる。例えば猫は4本の足と尖った耳を持つというテキストを読んでいた場合、学習器は猫の画像を前もってみていなくても、ある画像が猫であると推測することができうるだろう。

ここで挙げられているのは、学習時に入力データが存在しないクラス(ここでは猫)でも、それを補うような追加情報(猫は尖った耳と4本の足を持つ、など)が利用できれば予測が期待できるということです。追加情報を用いるという点で、通常の画像分類やテキスト分類などよりも特殊な設定と言えます。

Palatucciらはsemantic encodingという方式によって、学習データに存在しないクラスを扱うことを提案しています[5]。彼らのアプローチでは入力データから直接クラスを予測するのではなく、semantic featureという特徴ベクトルを計算します。特徴ベクトルはknowledge baseと呼ばれる補助情報によってクラスと結びつけられ、最終的な予測クラスに変換されます。学習時に存在しないクラスのデータが与えられても、knowledge baseにおいて適切に特徴ベクトルと新規クラスが結びつけられていれば、正しい分類が期待できます。

Socherらの取り組みでは、画像とテキストを結びつけることでzero-shot learningを行っています[6]。ここでのテキストとはクラスラベルのことであり、dogやcatなどといったクラスラベルの分散表現を先に学習しておきます。さらに画像から該当するラベルの分散表現への写像を学習し、得られた特徴ベクトルに基づいて分類を行います。これによって、学習時に画像が与えられなかったクラスでも、テキストの表現に基づいた分類が期待できます。同時に、与えられた画像のクラスが学習時に存在したかどうかも計算できる構造になっています。

以上より、一般的な意味合いではfew/one-shot learningとzero-shot learningは全く異なる枠組みであると言えます。

まとめ

一般的な扱い GPT-3での扱い
Few/One-Shot 少量の教師ありデータに基づく学習方法 タスク説明と少量のデモンストレーションを入力とした予測
Zero-Shot 学習時に存在しないクラスのデータを扱う枠組み タスク説明のみを入力とした予測

同じフレーズがいろいろな意味で使われるのはつらい😭

脚注
  1. https://www.deeplearningbook.org/ ↩︎

  2. https://ieeexplore.ieee.org/abstract/document/1597116 ↩︎

  3. https://arxiv.org/abs/1606.04080 ↩︎

  4. https://arxiv.org/abs/1703.05175 ↩︎

  5. https://papers.nips.cc/paper/2009/file/1543843a4723ed2ab08e18053ae6dc5b-Paper.pdf ↩︎

  6. https://papers.nips.cc/paper/2013/file/2d6cc4b2d139a53512fb8cbb3086ae2e-Paper.pdf ↩︎

この記事に贈られたバッジ