【論文】Language Models are Few-Shot Learners

6 min read読了の目安(約5400字

OpenAIから発表されたGPT-3の論文。基本的にはGPT-2をスケールアップした内容であり、NLPの様々なタスクを自己回帰型の推論形式に落とし込むことでパラメータの更新なしに各タスクを処理することができる。論文は付録も含めて74ページから構成されるが、ここでは冒頭のIntroductionとApproachを紹介する。

https://arxiv.org/abs/2005.14165

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

1 Introduction

Transformerベースのアーキテクチャをファインチューニングすることで、文章読解や質問回答などといった多くのタスクで優れた性能を得ることができている。一方で、こうしたアプローチはタスクを既知として学習しており、目標タスクの学習データが必要になるという制約がある。この制約を乗り越えることは、以下の観点から重要であると言える。

  1. タスクによっては、十分な教師ありデータを用意するのは大変な場合がある。タスク固有の教師ありデータの必要性は、言語モデルの有用性を制限してしまう。
  2. モデルの表現力が高かったり、学習データの分布が狭いと、モデルがデータ内の見せかけ(spurious)の相関を利用してタスクを解いてしまう可能性がある。結果的に、ファインチューニングして得られたモデルのベンチマーク性能は、実際の性能よりも過大評価されたものになってしまう場合がある。
  3. 人間は多くの教師ありデータを必要とせずに、簡潔な指示や短いデモンストレーションのみから言語タスクを解くことができる。言語モデルが広く有用であるためには、このような柔軟性と汎用性が望ましい。

これに対して有用と考えられるアプローチの一つがメタ学習である。言語モデルにおけるメタ学習とは、学習時に幅広いタスクに対する認識性能を獲得し、推論時に求められたタスクに高速に適応することである。GPT-2では目標タスクの情報をテキスト入力として扱い、自己回帰型の推論(入力文から次の単語を予測する)形式によってメタ学習を行なった。

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

図1.1は本論文におけるメタ学習の概要である。学習時に入力される文章内には、様々なサブタスクが埋め込まれると考えられる。こうした文章の生成を学習することで、内包される様々な言語タスクへの処理能力の獲得が期待できる。このアプローチはGPT-2から用いられており、ここではin-context learningと呼ぶ。

また近年では、言語モデルを大きくすることで、文章生成能力や下流タスクの処理能力も向上することが報告されている。In-context learningにおいても、こうしたスケーリング則を期待できる。本論文では175Billionの自己回帰言語モデル(GPT-3)を学習することで、このスケーリング則とin-context learningの性能を検証する。

評価データには24種類以上のNLPデータセットに加えて、特に適応力が問われるタスクを用いた。また各タスクで3つの条件での検証を行なった。

  1. Few-shot learning: 推論時に少数(10から100)のデモンストレーションを与える
  2. One-shot learning: 推論時に一つのデモンストレーションを与える
  3. Zero-shot learning: 推論時にデモンストレーションは与えられず、自然言語によるタスク指示のみが与えられる。

既存モデルと同様に、GPT-3にもファインチューニングを行うことはできるが、本論文の検証目標ではないため扱わない。

結果的に、タスクの説明と多くのデモンストレーション(K)を与えることでモデルの性能が向上していくことが確認された。またモデルを大きくすることによっても、性能が改善していることがわかる。図1.2は単語に加えられたランダムな文字を除去するというシンプルなタスクでの検証結果だが、他の多くのタスクでも同様の傾向が見られた。

全体的に、zero, one-shotでも悪くない性能、few-shotでは一部ファインチューニングを用いたSOTAモデルに匹敵する性能を得ることができた。また計算や新語の処理などといった、適応力が問われるタスクについてもone, few-shotによって良い性能を発揮した。一方で言語推論や文章読解などいくつかのデータセットでは、GPT-3の規模でもまだまだの結果となった。これらのタスクへのfew-shot性能の向上は今後の課題と言える。→5章 Limitations

本論文ではデータの混交(contamination)についても調査した。Common Crawlのようなウェブベースのデータを用いると、テストデータと同じデータを含む可能性がある。これに対してツールによって混交の度合いとその影響を計測し、過大評価が疑われるタスクはそのように記載した。→4章 Measuring and Preventing Memorization Of Benchmarks

最後に、GPT-3の広汎な性能を踏まえて、バイアスや公平性、社会的影響についても議論する。→6章 Broader Impacts

2 Approach

GPT-3の基本的なアーキテクチャ、データ、学習方法はGPT-2を踏襲しており、それぞれをスケールアップさせている。まずファインチューニングとfew, one, zero-shotを整理する。

  • Fine-Tuning: 広く利用されるアプローチ。対象タスクで高い性能を得やすいが、タスク固有のデータが必要、与えられたデータに過学習してしまうなどの懸念がある。GPT-3はタスクを未知とした場合の性能に関心があるため、本論文ではファインチューニングは検証しない。
  • Few-Shot: モデルのパラメータは固定したまま、少量のデモンストレーションから予測を行う方式。タスク固有のデータが少量で済み、過学習の心配がない。一方でファインチューニングほどの性能は発揮できない場合が多い。
  • One-Shot: Few-shotでデモンストレーションが一つだけ与えられるケース。人がタスクに取り組むシチュエーションに近いとして個別に取り上げている。
  • Zero-Shot: タスクの指示のみが与えられる。最も汎用だが最も難しい設定。

図2.1はこれらの設定を英語→フランス語の翻訳タスクを例にして比較している。今回検証する中ではfew-shotが最も高性能だが、one-shot, zero-shotで優れた性能を発揮したタスクもあり、検証対象として重要である。

(GPT-3以外で一般にfew, one, zero-shot learningと呼ばれる学習方法はまた異なる。それらについては以下を参照。)

https://zenn.dev/dhirooka/articles/34205e1b423a80

2.1 Model and Architecture

GPT-3のモデルアーキテクチャは基本的にGPT-2と同様である。異なる点として、GPT-3ではSparse Transformerで用いられているものと似た、計算量を削減したtransformerレイヤを用いている。

またモデルサイズと性能の関係を検証するために、8種類の大きさのモデルを構築した。最も大きな175BパラメータのモデルがGPT-3である。

2.2 Training Dataset

Common Crawlデータセットは膨大な単語を含んでいるが、他のデータセットよりも質が低い。本論文では以下の3ステップで高品質なデータセットを作成した。

  1. Common Crawlをダウンロードし、複数の高品質なコーパスとの相関によってフィルタリング
  2. 冗長性と検証(ホールドアウト)データへのリークを防ぐために、データセット間でドキュメントレベルの重複を除去
  3. 既存の高品質なコーパス(WebTextデータセット、英語のWikipediaなど)を加えることでデータセットの多様性を向上

最終的な学習データの構成は表2.2で示されている。下4段がステップ3で言及されている追加のデータセットである。CommonCrawlデータセットはフィルタリングによって570GBまで削減している。

学習時には高品質なデータセットが多く現れるように重みをつけている。例えば学習時のある300Bトークンを考えると、Common Crawlは60%=180Bトークンが現れており、これはCommon Crawlの全410Bトークン中の約44%という計算である。

インターネットから収集されたデータによって言語モデルを学習する際の懸念として、学習データと評価時のベンチマークでデータが重複すると、正当な評価が得られない可能性がある。これを防ぐために、評価用のベンチマークと学習データの重複を除去した。フィルタリングのバグにより一部の重複の見逃しがあったが、学習コストの大きさのため再学習は行なっていない。データ重複の影響は4章で詳細に評価する。

2.3 Training Process

大きなモデルは大きなバッチサイズと小さい学習率で学習する場合が多い。今回は各モデルで学習時の勾配のノイズのスケールを測定し、これに基づいてバッチサイズを決定した。

学習時は行列積に対するモデル並列と、各層に対するモデル並列を合わせて、Microsoftから提供されたV100 GPUクラスター上で学習を行なった。→Appendix B: Details of Model Training

2.4 Evaluation

Few-shotの設定では、各タスクの学習データからランダムに抽出したK件をデモンストレーションとし、評価データに対して評価を行う。LAMBADAやStoryclozeなど教師ありデータが得られない場合はdevelopment setのデータによって条件付け、test setに対して評価を行った。

デモンストレーションの数Kは0から100程度まで変化させた。基本的に多くのデモンストレーションが与えられるほど、優れた予測になった。よってdevelopment setとtest setが分かれているデータではdev setで最適なKの値を探索し、test setに適用した。いくつかのベンチマークでは自然言語の指示をデモンストレーションに加えて入力した。

穴埋めなどの選択式のタスクでは、K件の入力+正解の後に、対象の文章を入力し、各選択肢に対する尤度を比較した。多くのベンチマークではトークンあたりの尤度を比較している。一方でARC, OpenBookQA, RACEベンチマークでは、"Answer: "や"A: "という文字列をanswer_contextとして、以下の値を用いて予測を行う。

\frac{P(\text{completion}|\text{context})}{P(\text{completion}|\text{answer\_context})}

2値分類タスクでは、文として意味を持つように、0/1ではなくTrue/Falseという単語を用意して、選択式タスクとして扱った。

自由記述式タスクでは、ビームサーチを用いてタスクを処理した。モデルの評価は各ベンチマークで主に使われる物に倣って、F1 similarityやBLEUを用いている。

最終的な評価は、テストセットが公開されているものについては各サイズのモデル、推論設定(zero, one, few-shot)で評価を行った。テストセットがプライベートなものは、development setに対する評価結果を提示した。

3 Resultsへ続く