yoheikikuta / paper-reading

Notes about papers I read (in Japanese)
156 stars 4 forks source link

[2005.14165] Language Models are Few-Shot Learners [paper-reading] #72

Open yoheikikuta opened 1 month ago

yoheikikuta commented 1 month ago

論文リンク

https://arxiv.org/abs/2005.14165

公開日(yyyy/mm/dd)

2020/05/28

概要

GPT-3 の論文。 GPT-2 よりも2桁大きい 1750 億というパラメタ数の言語モデルである GPT-3 を作成し、その性能を非常に広い範囲で検証している。 事前学習した大規模言語モデルに対して、モデルの重みを変えないが予測の際に具体的な例示を与える few-shot learning の構造によって様々なタスク(翻訳、質問応答、穴埋めタスク、etc......)で高い性能を発揮していて、大規模言語モデルの強力な汎用性を確固たるものにしている。あらゆる自然言語タスクに対して高い性能ということではなく、文章読解や natural language inference など SOTA に遠く及ばないタスクもある。 モデルサイズのスケーリング則がより明確になり、既存のタスクだけでは大規模言語モデルを評価しきれないということで算術やテキスト生成などの独自のタスクを準備して評価しているなど、生成AI時代の幕開けという感じの論文である。 なお、公開されているコードの情報はどんどん少なくなってきており、モデルやコードの情報などはなくてデータについての情報があるだけである。

公式GitHub(モデルとかの情報はなくデータについてちょっと情報が公開されている程度): https://github.com/openai/gpt-3

yoheikikuta commented 1 month ago

GPT-3 の論文も読んでみる。 GPT-3 の論文は 1,2 とは異なり arXiv に投稿されている。

ページ数が多め (75 ページ) なので、issue に細かく書きすぎると大変なので、特に興味を持った部分をかいつまんで情報として残しておくことにする。

yoheikikuta commented 1 month ago

事前学習した Transformer Decoder を fine-tuning すれば同一のアーキテクチャで多様なタスクが高い性能で解けるようになってきた。しかし、まだタスク固有のデータや fine-tuning が必要であり、これらも無くすことができれば真に汎用的なモデルが作れたと言えよう。これができれば特に次の 3 つの観点で嬉しい。

1 つめは言語処理のタスクは非常に多様(文法の修正から抽象的な概念の例の生成、短編小説の批評など)で、そのようなタスクの教師付きのデータは大規模には存在しないものが多いので、そのような教師付きデータに依存せずに解けるようになれば多様なタスクを楽に解くことができる。

2 つめは fine-tuning は非常に狭い分布で学習するので十分に汎化していないとこもあって、与えたデータに対しては良い結果だけどそこから外れると性能が落ちるというケースも観測されるが、もし fine-tuning なしで解けるようになれば多様なタスクの広い分布において十分に汎化できていると考えられる。

3 つめは人間と同じような流動性と汎用性を持たせることができる。例えば、人間は複数の例示に適応してタスクを解いたりすることができる(例:「勇敢に行動する人々の例を2つ示します。3つ目の勇敢さの例を挙げてください」)。このような能力の獲得により、多くのタスクやスキルをシームレスに組み合わせたり切り替えたりすることが可能となる。

これを実現する一つの有望な方向性が meta-learning で、概念的には以下の図のようなもの。 ここで in-context learning の登場である。これは、事前学習された言語モデルのテキスト入力でタスクを指定するもので、モデルは自然言語の指示やタスクのいくつかの例示を条件として与えられ、次に来るものを予測することでお望みのタスクを解けるだろうという手法である。これができるのは、大規模な事前学習で広範なスキルとパターン認識能力をモデルが獲得しているためである。 T5 とかもこういう方向性の中で生まれてきたもので一定の性能を示しているが、まだ各タスクにおいて SOTA には遠く及ばないというのがこの時点での状況だった。

先行研究の重要な発見として、SOTA にはまだ叶わないが、モデルを大規模にすると性能が連続的に向上しているので、もっともっと大規模にすれば凄い性能になるのではないかと考えたわけである。自然な考えだが、圧倒的に脳筋である。

この論文ではパラメタ数 1750 億の GPT-3 (GPT-2 よりも 2 桁大きい) を作り、20以上の自然言語処理のデータセットや学習データに直接含まれている可能性が低いタスクの性能を調べている。

yoheikikuta commented 1 month ago

in-context learning は、名前の通りコンテキストウィンドウ内に収まるだけ(GPT-3 では 2048 トークン)の例示から学習するというもので、この例示の数が 0 ならば zero-shot で、1 ならば one-shot で、few-shot という場合は 10~100 くらいにする。

モデルサイズと例示の数の関係を、単語から特定の記号を削除するという単純なタスクで実行した結果が以下。 モデルサイズが大きいほど in-context learning の成果が如実に出て性能が高められていることが見てとれる。Natural Language Prompt というのは自然言語によるタスク描写のテキスト(例えば要約なら「入力した文章を 30 単語でまとめよ」みたいな)である。

yoheikikuta commented 1 month ago

全体的には、GPT-3は自然言語処理タスクにおいて zero, one-shot 設定で良い結果を達成し、few shot 設定ではものによっては SOTA 程度にもなる。 具体的には CoQAで zero-shot で F1:81.5、one-shot で F1:84.0、few-shot で F1:85.0 を達成する。 同様に TriviaQAで zero-shot で acc:64.3%、one-shot で acc:68.0%、few-shot で acc:71.2%(これは SOTA)を達成する。

accuracy で測定できるタスクにおけるモデルサイズ毎の性能を示したものが以下。 薄い線で描かれているのが各タスクで、通常の線で描かれているのは平均したものと思われる(論文中にも書かれているが、これは厳密だったり意味のあるベンチマークではないと述べている)。 平均したものを載せるのは本質的に意味があるかないか微妙なところだが、タスク毎に数と線がガタガタしてしまうけど、全体的な傾向としてモデルサイズや例示の数を増やすと性能が良くなることをどうすれば端的に伝えられるかということで採用したものと思われる。

苦手なデータセットとしては、ANLI のような自然言語推論タスクや、RACEやQuACのようないくつかの読解データセットが挙げられる。GPT-3の長所と短所を幅広く提示することで研究をより促進させたいと述べている。 こういう方向性は汎用的な大規模言語モデル、という感じだね。特定のタスクで SOTA を達成するとかではなくて、汎用性にかなりフォーカスが当てられている。

yoheikikuta commented 1 month ago

アプローチの部分では zero, one, few-shot と fine-tuning の違いを説明。 興味深い点としては以下の二つ。

以下は英語からフランス語への翻訳の例。 既にこの形式に慣れていることもあるし、特に難しいことはないが、in-context learning は learning と名が付いているがモデルの重みは変えていない。

yoheikikuta commented 1 month ago

モデルとアーキテクチャに関して GPT-2 と同様で、以下のように少し手を加えている。 しかしまあ実装の公開もどんどん情報量が少なくなっているし、この辺はこのモデルで商売をしているのでやむを得ない部分はもちろんあるんだけど、OpenAI って感じ。

We use the same model and architecture as GPT-2 [RWC+19], including the modified initialization, pre-normalization, and reversible tokenization described therein, with the exception that we use alternating dense and locally banded sparse attention patterns in the layers of the transformer, similar to the Sparse Transformer [CGRS19].

モデルサイズは複数個作っていて一番大きいのが GPT-3 である。改めて眺めると $d_model = 12288$ とかバッチサイズ(トークン数で表している) 3.2M とかどデカくて笑う。 モデルサイズが異なっても few-shot の設定とかを同一で実施できるように、コンテキストウィンドウはすべて 2048 で統一している。

モデルのパラメタ設定は、モデルパラメタに対して validation loss がそんなに sensitive ではないことが知られているので、計算効率のためだけに設定しているというのは面白い。 パラメタに関して職人芸とかそういうのは古い話であって、計算量こそが最重要なので、そこに合わせて最適なものにするのがよいという時代である。

The precise architectural parameters for each model are chosen based on computational efficiency and load-balancing in the layout of models across GPU’s.

yoheikikuta commented 1 month ago

学習データは、GPT-2 では WebText という Reddit のリンクをベースにデータを作ったが、ここではより大規模なデータが欲しいということで GPT-2 の時はデータの質に問題があるからと使わなかった Common Crawl を使っている。ちなみに Common Crawl のデータであれば GPT-3 を同じデータを繰り返すことなく十分に学習できる程度のサイズと言っている。

そのままだとデータの品質の問題が大きいので、以下の 3 つの方法でデータを前処理して質を高めている。

データセットのサイズは最終的には以下のようになっている。 総 token 数は 5000 億で、データの質を考慮して学習データを作る際のサンプリング割合(Weight in training mix)を設定している。 データサイズとしては恐らく 700 GB くらいで大きいが、画像データでよく使われる ImageNet データセットが 300 GB くらいなので、テキストだとやっぱだいぶ小さく済むなという感じはする。

なお、本論文で研究したすべてのベンチマークの学習データとテストデータとの重複を検索して削除しようとしたが、残念ながら、フィルタリングのバグにより一部の重複を無視してしまったと書いてある。 学習コストのためにモデルを再訓練することは現実的ではないので 4章で重複の影響を評価していると述べている。 一回の学習でめちゃくちゃお金かかるので、バグを出さないということの重要性が恐ろしく高まっているのは怖い話。

yoheikikuta commented 1 month ago

モデル評価に関して。

few-shot の場合、学習データからランダムに k 個取り出してタスクに応じて改行を入れてモデルに食わせる(データセットによっては学習データに教師付きのデータがない場合はがあるが、適宜 development set から取るなどで対応する)。 コンテキストウィンドウは 2048 であり、典型的には k = 10~100 くらいが使える。多い方が精度が良いことが多いがそうでないこともある。 dev/test set が使える場合は dev set をでの性能を高めるように k を設定する。

選択肢を選ぶ形式とかは基本的に GPT-2 と同じように選択肢毎に尤度を計算してトークン長で正規化して最も尤度が高いものを答えとして選ぶ。それ以外もタスク毎に色々調整してるが特に難しいところはない。

最終的な結果は test set に対する性能で測るが、データが公開されていないものは training set で測る。 これは、サーバにモデルをアップロードして test 性能を計算する場合、モデルがデカすぎてアップロードできないからと書いてあって、そりゃこんなでかいモデルを想定してないよなと思うなどした。SuperGLUE などいくつかのデータセットでは 200B モデルであれば submit できたとのこと。

yoheikikuta commented 1 month ago

まずは言語モデルの事前学習のべき乗則に関して。 縦軸は validation set での cross entropy loss で、横軸 PetaFLOP/s-dayは「1ペタフロップ毎秒(PetaFLOP/s)の計算量を何日分回したかの総計算量」を示す。5 PetaFLOP/s-day なら 1 PetaFLOP/s を 5 日間回した計算量なので、60 60 24 5 1 [PetaFLOP/s] = 4.32 * 10^5 [PetaFLOP] となる。つまりこの図の一番右の 10^4 PetaFLOP/s-day なら 1 PetaFLOP/s を 10^4 日間回した計算量となる。

これはかなり impressive なグラフだ。 一番大きいモデルはべき乗則に綺麗に乗り切っていないが、これはもう少し学習すれば綺麗に乗りそうにも思えるので、これまでの大規模言語モデルで見られてきた「モデルをデカくすればするほど性能が良くなる」が継続して有効であることを示している。パワーだ。

これ以降は節ごとに様々なデータセットでの結果を評価し考察している。 全部載せるのは大変なので、いくつかかいつまんで載せる。

yoheikikuta commented 1 month ago

言語モデルに近いタスクに関して。

PTB の結果は GPT-2 が SOTA で perplexity が 35.8 であったが、これが 15 points も改善して GPT-3 では 20.5 で圧倒的な SOTA を叩き出している。

LAMBADA は結構面白い。 これはタスクとしては文章の最後の単語を予測するものになっていて、この「最後である」というのをどうやってモデルに教えるかで GPT-2 では候補となる単語をフィルタリングするというかなり人為的な操作をして対応していた。 GPT-3 では few-shot で以下のように例示を与えることでモデルがよしなにタスク設定を読み解いて回答するように誘導することができる。

Alice was friends with Bob. Alice went to visit her friend ___. → Bob
George bought some baseball equipment, a ball, a glove, and a ___. →

これにより以下のように zero-shot SOTA を更新するのみならず、few-shot では人間に 10 points 差程度まで性能を発揮している。モデルの重みを更新しないでここまでできるということはかなりのインパクトを残す結果である。 興味深いのは one-shot は zero-shot よりも常に結果が悪いということで、一つの例示に強く引きずられてしまうので、タスクの一般的な性質を理解させるにはむしろ害を及ぼすもので複数個の例示が必要であることを示している。人間でも一つの例示だけ示すとそれに引きずられすぎて、そうじゃないんだけどという答えを返す人がいるから想像はできる振る舞いである。 LAMBADA の場合、文章の最後の単語というのがちょっと特殊で、文としてはそこから継続しうるものを考えられる(上の例示のものも Bob という人名に限らず文章を継続することは不自然でもなんでもない)というところがモデルでの取り扱いが少し難しいところではある。

HellaSwagデータセットは、物語や一連の指示から結末を選ぶものです。例は、言語モデルには難しく人間には容易(acc:95.6%)であるように敵対的に作成されていることもあり、GPT-3は one-shot で acc:78.1%、few-shot で acc:79.3% であり、fine-tuned の SOTA 85.6% にはまだまだ及ばない。 敵対的にというのはこの論文 https://arxiv.org/abs/1905.07830v1 で導入している adversarial filtering で、dummy の train/test セットを作って 、train で学習した classifier を用いて test の回答候補を real or generated で予測できるようにして、test の回答候補としてより判別が難しいものへアップデートしていくものである。

StoryCloze 2016データセットではGPT-3は zero-shot で acc:83.2%、few-shot(K=70)で ac:87.7% を達成。これは、fine-tune した BERTベースのモデルのSOTAよりも 4.1 point 低いが、以前の zero-shot の結果を約 10 points 改善している。

言語モデルと相性の良いタスクに関しては全体的にやはり性能が高く、まだ fine-tune した SOTA には及ばないものの、かなり肉薄してきていることが分かる。スケーリング則と合わせて、もう一段性能の高いモデルが出てきたら fine-tune したものや人間と同等レベルになると想像することは妥当であるというレベルまできている。

yoheikikuta commented 1 month ago

モデルサイズと性能向上が顕著に出ているタスクとしては質問応答がある。 これは様々な知識を要求するものなので、これまでの評価では外部情報にアクセスして適切な情報を抽出してくるという "open-book" な設定であるが、大規模言語モデルはモデル外の情報を使わずにに単に質問に答えるという "closed-book" な状態でも良い性能を示す。

どのデータセットでも良い性能を残すし、out of domain っぽいものでも few-shot でかなりの改善を見せるが、ひとつ具体的に TriviaQA を取り上げると、以下のように fine-tune したモデルの SOTA を上回るレベルになっている。

知識に依存するという意味で、大規模な事前学習をすればするほど性能が高まる(モデルに様々な基本的知識が装着される)、というのは期待通りの結果だが、ここまで顕著だと思わず笑ってしまうほどの凄さだ。

yoheikikuta commented 1 month ago

機械翻訳は GPT-2 の頃から有望そうという感じだった(特にあまりデータがないフランス語とかでも一定効果を発揮していたところ)が、GPT-3 では期待通りモデルサイズと共に性能向上が見られた。

En → others はよく研究されていそうなので supervised の model が SOTA だが、その逆は GPT-3 が  SOTA になってきていて、この結果を見せられると、将来的にはほぼ GPT (のような unspervised 言語モデル学習とそこからの few-shot など)で置き換えられていくだろうな〜という感じがするね。

yoheikikuta commented 1 month ago

逆に、GPT-3 でもまだ過去の SOTA との乖離が大きいのは文章読解系のタスクである。他にも natural language inference も苦手。 文章読解に関しては CoQA は十分にいいが、それ以外のデータセットでは SOTA には程遠いものになっている。

データセットがたくさんあって色々ここに残すのは大変なので、そのうちの DROP https://arxiv.org/abs/1903.00161 だけ少し見てみる。 データの例は以下(BiDAF はベースラインモデルの結果)で、多様なタスクがあることに加えて、この時期の生成 AI が苦手そうな固有名詞や数値の適切な取り扱いなども多分に含まれているので、性能が低いということは頷ける。


その後のモデルとして、GPT-4 とか PaLM 2 では 80 以上(PaLM 2 では 85.0) の F1 score を達成するようになっていて、この手のタスクも更なる大規模化で解けるようになっている。 ref: https://paperswithcode.com/sota/question-answering-on-drop-test

yoheikikuta commented 1 month ago

GPT-3 論文が面白いのは、既存のタスクだけの評価だと生成 AI モデルの強力さを充分には伝えきれないということで様々なタスクを定義して検証しているところ。

例えば、単純な数字の演算。 これは言語モデルで対応するのはこれまでは難しかった(固いルールをモデルやデータから学ばせるのではなく、Web 上のデータで言語モデル学習によって対応させるのは相当難しい)が、これもモデルサイズを大きくすることで結構解けるようになっていることを示している。 この段階ではモデルに数字の計算をさせようとはまだ思わないけど、モデルサイズが大きくなっていけば自動的に学習するというのはかなり驚きの結果である。数学とかは汎用モデルでは全然無理そうという気持ちが、この方向性でも性能が上がっていけば結構やれるようになるか?という期待を持てるのは凄いと思う。

そして何よりもニュース記事生成タスク。 GPT-2 でもちょっとだけ例が紹介されてかなり inspiring なものだったが、それを深めている。 生成タスクは評価が人間が判定するくらいしかなかなか難しいので、この論文でも「人間がGPT-3生成の記事と実際の記事を区別できるか」を調べている。評価の時にわざと質の低いものを入れて評価者がちゃんと評価しているかなどの工夫を入れたりしている。 zero-shot で生成すると架空の情報を生成して判別が容易になるが、few-shot が使えるので k =3 で既存のニュース記事を提示することで性能が高まったと報告している。 結果を見ると、GPT-3 の最大のモデルでは人間が書いた記事と区別できるかは 52% であり、これはほぼ区別できない(区別できない、となってその上でどちらかを選ぶと 50% になるので)ものになっている。論文では詳しく書いてないが、I don't know がもっと増えそうだが、可能な限りどちらかを選ぶようになどとタスク依頼をされているのかもしれない。

生成した文章は例えば以下(Article が生成した文章)。 native じゃないので細かいニュアンスの違いなどが把握できないので、こういうレベルまでくると自分とかだともう区別するための能力が備わってないという感じにもなるね。

Title: United Methodists Agree to Historic Split Subtitle: Those who oppose gay marriage will form their own denomination Article: After two days of intense debate, the United Methodist Church has agreed to a historic split - one that is expected to end in the creation of a new denomination, one that will be "theologically and socially conservative," according to The Washington Post. The majority of delegates attending the church's annual General Conference in May voted to strengthen a ban on the ordination of LGBTQ clergy and to write new rules that will "discipline" clergy who officiate at same-sex weddings. But those who opposed these measures have a new plan: They say they will form a separate denomination by 2020, calling their church the Christian Methodist denomination. The Post notes that the denomination, which claims 12.5 million members, was in the early 20th century the "largest Protestant denomination in the U.S.," but that it has been shrinking in recent decades. The new split will be the second in the church's history. The first occurred in 1968, when roughly 10 percent of the denomination left to form the Evangelical United Brethren Church. The Post notes that the proposed split "comes at a critical time for the church, which has been losing members for years," which has been "pushed toward the brink of a schism over the role of LGBTQ people in the church." Gay marriage is not the only issue that has divided the church. In 2016, the denomination was split over ordination of transgender clergy, with the North Pacific regional conference voting to ban them from serving as clergy, and the South Pacific regional conference voting to allow them.

yoheikikuta commented 1 month ago

学習データがめちゃくちゃ大きいので、data leak などを調べる。 冒頭にも書いたように、学習データと評価タスクの重複を除こうとしたが、バグにより学習データに入ったままだったので、他の方法で色々調べている。

シンプルな方法として、評価タスクのデータから重複しているものを除いて評価をして、フルのデータセットでの評価と比較している。結果として、殆ど結果が変わらなかったので、data leak の影響は大きくないと結論づけている。

具体的なタスクをいくつか絞ってさらに深掘りしているけど、ここでは文章読解だけを見てみる。QuAC, SQuAD2, DROPのタスク例の90%以上が潜在的に混入しているとフラグ付けされたが、手動で確認したら質問-回答ペアは含まれてなかったので、背景情報は得たかもしれないけど答えを暗記してはいないと述べている。 厳しいこと言うなら背景知識はこのタスクにおいて重要な情報なので評価が妥当なのか?とも言えるかもしれないが、圧倒的に大規模モデルを作っていくなら様々なタスクの背景知識が様々な形で学習データに含まれるのは不可避だし、むしろ大規模言語モデルに期待する振る舞いでもある。Web 上で公開されているタスクで評価する、という方法論自体が適用が難しいというレベルに到達してきている。

yoheikikuta commented 1 month ago

limitations も色々書かれているが、特に興味深いところは以下:

yoheikikuta commented 1 month ago

あとは悪用とか差別的な話とかがあるけどこの辺は自分がそんなに興味ないのでここには書かない。 Energy Usage の項があってこれは面白そうな感じがするけど、計算量以外はあまり具体的な話が書いてなくて拍子抜けである。モデル学習に多大なコストがかかるので、それがどういう風に償却されていくかという観点は大事、と書いてあってそれはそうだねとなる。

yoheikikuta commented 1 month ago

ということで一通り終了。

実験が多いので記載は適宜スキップしつつだけど、この実験とか様々な観点を盛り込んだというのが新しい生成AI時代の幕開けという感じがあっていいよね。

モデルに関しては公開されている情報が全然なくて、"Open"AI ですねと揶揄される方向性が加速している。