タグ
白いカードに、青から紫の回路基板の線で描かれた脳と、中央の吹き出しに書かれたLLMの文字

「失敗の積み重ね」がLLMを生んだ(後編)— Attentionからスケール革命、そして整列へ

文脈をどう扱うかからLLMの完成まで。RNNの構造的限界、Attentionの誕生、Transformer、GPT-3のスケール革命、RLHFによる整列、そして現在の効率化の時代までを追います。

目次

はじめに

この記事は 前編 の続きです。

前編では、チューリングマシンからシャノンの情報理論、パーセプトロンとバックプロパゲーション、GPUによる訓練の高速化と勾配消失の克服、そしてWord2Vec/Embeddingによる「単語を意味のあるベクトルに変換する」技術までを辿りました。

後編では、文脈をどう扱うか という問いから出発し、RNNの構造的限界、Attentionの誕生、Transformerへの進化、GPT-3のスケール革命、そしてRLHFによる整列と効率化の現在までを追います。LLMが「設計されずに」完成していく後半の物語です。

5. 文脈をどう扱うか? — Attentionの誕生

注記: この章で登場するLSTM(1997年)やRNN自体の研究は、時系列としてはAlexNet(2012年)やWord2Vec(2013年)より前に始まっています。しかし「なぜ順序のあるデータが難しいのか」を理解するには、第3章(ニューラルネットワークの訓練と深さの壁)と第4章(単語をベクトルに変換する方法)の知識が前提になるため、この順番で扱っています。

なぜ機械翻訳が主戦場だったのか

2010年代前半、NLP(自然言語処理)の研究者たちがもっとも力を注いでいた応用分野は機械翻訳でした。

理由は単純です。翻訳は「言語を本当に理解しているか」を最も厳しくテストするタスクだからです。単語を一つずつ置き換えるだけでは翻訳できません。語順が変わり、文法が変わり、文化的なニュアンスが変わる。文全体の意味を理解し、別の言語で再構成する必要がある。

英語: The cat sat on the mat.
日本語: 猫がマットの上に座った。
単語の置き換えだけ: The=その cat=猫 sat=座った on=の上に the=その mat=マット
→ 「その猫座ったの上にそのマット」 ← 意味不明
正しい翻訳には語順の再構成、助詞の追加、冠詞の削除が必要
→ 文全体の意味の理解が前提

だから「機械がどこまで言語を扱えるか」の限界は、翻訳で最も早く露呈しました。そしてそのボトルネックを解消するために生まれた技術が、後にLLM全体の基盤になります。

翻訳モデルのボトルネック:RNNの構造的限界 (2014年頃)

当時の翻訳モデルは RNN(Recurrent Neural Network・再帰型ニューラルネットワーク) を使っていました。RNNは文脈を扱うための、当時の最善手です。

RNNは新しい発明ではなく、これまで見てきた部品の組み合わせです。内部のニューロン・重み・層・バックプロパゲーションは第3章と同じ。入力として受け取るのは第4章のEmbeddingベクトル。RNNの唯一の新しいアイデアを理解するには、まず通常のニューラルネットワークの限界を知る必要があります。

なぜ言語は特別なのか:画像との違い

ここまでニューラルネットワークが成功してきたのは、画像のような一度に全体を入力できるデータでした。AlexNetが猫の写真を分類するとき、100万個のピクセルは同時に入力層に入ります。「まず左上のピクセルを見て、次に右隣のピクセルを見て…」と順番に処理するわけではありません。全体が一発で入力されるから、「前を覚えておく」必要がそもそもない。

しかし言語は本質的に順番に並んだデータです。「猫がマットの上に座った」の意味は、単語の順序に依存します。「マットが猫の上に座った」は同じ単語でも全く違う意味です。そして文の後半を理解するには、前半で何が言われたかを覚えている必要がある。

画像は一度に届く。文は順番に届く。2 つのパネル。左は画像で、ピクセルの格子がすべて同時に入力層へ入り、「猫の写真」というラベルを出す。順序がないので覚えておくものもない。右は言語で、猫・が・マット・に・座った という単語が 1 つずつ順番に届き、「座った」を読む時点でネットワークは「猫」を保持していなければならない。この章の話はすべて、この 2 つ目の点から始まる。画像は一度に届く。文は順番に届く。画像「猫の写真」全ピクセルが同時に入力層へ入る順序がないので、覚えておくものもない言語マット座った単語は 1 つずつ順番に届く「座った」を読む時点で「猫」を保持していなければならないこの章の話は、すべて 2 つ目の行から始まる。
順序こそ、画像には最初からなかったもの。

この問題を身近な例えで言うと、講義を聞きながらノートを取る状況に似ています。

  • 通常のネットワーク = 講義を聞くが、ノートを取らない。1文聞くたびに忘れる。今聞いた文にしか反応できない。
  • RNN(これから説明します)= 1ページだけのメモ帳にノートを取りながら講義を聞く。メモ帳がいっぱいになると、古いメモを上書きして新しい内容を書く。講義が終わったとき、手元にはその1ページだけが残る。

この例えを頭に入れて、技術的な仕組みを見ていきましょう。

では、通常のニューラルネットワークで文を処理しようとするとどうなるでしょうか。

通常のネットワークに深さはあるが、時間をまたぐ記憶はない2 つの帯。1 つ目は空間方向の流れで、通常のネットワークにはこれがある。「猫」という 1 つの入力が Layer 1、Layer 2、Layer 3 を通って出力に至る。2 つ目は時間方向の流れで、通常のネットワークにはこれがない。時点 1 では「猫」が入力・隠れ層・出力を通って結果 1 を出し、時点 2 では「座った」が同じように結果 2 を、時点 3 では「マット」が結果 3 を出す。そのたびにネットワークはリセットされ、前の痕跡は残らない。隠れ層は層を下る方向には情報を運ぶが、単語から次の単語へ横に運ぶものは何もない。通常のネットワークに深さはあるが、時間をまたぐ記憶はない空間方向の流れ — 1 つの入力が複数の層を通る✓ 通常のネットワークにはこれがあるLayer 1Layer 2Layer 3出力時間方向の流れ — 複数の入力を順番に処理する✗ 通常のネットワークにはこれがない時点 1入力 → 隠れ層 → 出力結果₁✗ ネットワークはリセットされ、前の痕跡は残らない時点 2座った入力 → 隠れ層 → 出力結果₂✗ ネットワークはリセットされ、前の痕跡は残らない時点 3マット入力 → 隠れ層 → 出力結果₃✗ ネットワークはリセットされ、前の痕跡は残らない隠れ層は情報を運んでいる——ただし層を下る方向だけ。単語から次の単語へ、横に運ぶものは何もない。
深さはあった。記憶がなかった。

「各層は前の層の出力を受け取るのだから、情報は引き継がれるのでは?」と思うかもしれません。しかしそれは1つの入力が複数の層を通る流れ(空間的な流れ)の話です。「猫」が入力層→隠れ層→出力層と流れるのは、1つの単語が深い層へ進む過程。

問題は時間的な流れです。「猫」の処理が終わって「が」の処理が始まるとき、ネットワークは完全にリセットされます。隠れ層に「猫」の痕跡は一切残っていません。だから「座った」を処理するとき、「何が座ったのか(猫が)」を知る手段がない。

RNNの解決策:同じ層が記憶を持ち越す

RNNのアイデアは、同じ層が異なる時点のトークンを順番に処理し、その際に内部の状態(メモ帳)を次の時点に引き継ぐことです。

RNN は、既存の部品にたった 1 つの新しい発想を足したもの3 つの部品が 1 つの結果に組み合わさる。第 3 章からはニューロン、重み、層、バックプロパゲーションが来て、内部構造を担う。第 4 章からは単語をベクトルに変換する Embedding が来て、入力を担う。第 5 章の新要素はたった 1 つの新しい発想で、同じ層がメモ帳を時点をまたいで引き継ぐというものである。これらが合わさって、順序のあるデータを扱えるニューラルネットワークである RNN になる。RNN は、既存の部品にたった 1 つの新しい発想を足したもの第 3 章からニューロン、重み、層、バックプロパゲーション内部構造として第 4 章からEmbedding — 単語をベクトルに変換入力として第 5 章の新要素同じ層がメモ帳を時点をまたいで引き継ぐたった 1 つの新しい発想RNN — 順序のあるデータを扱えるニューラルネットワーク
2 章分の部品と、それまでなかった 1 つの発想。

この「メモ帳」を、専門用語では 隠れ状態(hidden state) と呼びます。第3章で「隠れ層(hidden layer)」を覚えているでしょうか。入力層と出力層の間にある、ユーザーからは見えない内部の作業スペースです。RNNの「隠れ状態」も同じ「隠れ」です。入力(今読んでいる単語)にも出力(翻訳結果)にも直接現れない、ネットワーク内部の中間データだから「隠れ」と呼ばれます。

通常のネットワークと比較してみましょう:

同じ隠れ層をもう一度動かす——ただし自分のメモを持たせて2 つの帯で、どちらも猫・座った・マット という単語を隠れ層に通す。上の帯は通常のネットワークで、隠れ状態はトークンごとに消去されるため、次へ渡るものは何もない。下の帯は RNN で、同じ隠れ層に自分の前回の状態が渡される。猫のあとは「猫」を保持し、それがメモ帳 1 として先へ渡る。座ったのあとは「猫 … 座った」を保持し、メモ帳 2 として渡る。マットのあとは「猫 … 座った … マット」を保持する。異なる層のリレーではなく、1 つの層をトークンごとに動かし、前回書いたものを渡し直しているだけである。同じ隠れ層をもう一度動かす——ただし自分のメモを持たせて通常のネットワーク — 隠れ状態は毎回消去される隠れ層出力₁✗ 消去座った隠れ層出力₂✗ 消去マット隠れ層出力₃RNN — 同じ隠れ層に、自分の前回の状態を渡す隠れ層「猫」メモ帳₁座った隠れ層「猫 … 座った」メモ帳₂マット隠れ層「猫 … 座った … マット」異なる層のリレーではない。1 つの層をトークンごとに動かし、前回書いたものを渡し直しているだけ。
1 つの層をもう一度動かし、書いたものを渡し直す。

ポイントは、RNNでは同じ隠れ層が繰り返し(Recurrent=再帰的に)使われることです。異なる層のリレーではなく、1つの層が時点ごとに繰り返し動き、メモ帳を引き継ぐことで「前に何を読んだか」を覚えていられます。

そしてメモ帳はニューロンごとに個別に持つものではなく、層全体で1つです。隠れ層に1024個のニューロンがあるなら、各ニューロンが1つの数字を出力し、それら1024個の数字をまとめたベクトルが「メモ帳」になります。次の時点では、この1024個の数字が層全体に共有入力として戻されます。

1,024 個のニューロンを持つ隠れ層の 1 時点1,024 個のニューロンを持つ隠れ層の 1 時点。入力は「猫」の Embedding と前のステップのメモ帳である。各ニューロンは数字を 1 つだけ出力し、0.3、−0.7、0.1 と続いて 0.9 まで並ぶ。それらすべてを並べたベクトルがメモ帳であり、1,024 個の数字、つまりニューロン 1 つにつき 1 個からなる。次のステップでは、このベクトル全体が全ニューロンに戻る。共有する意味はここにあり、各ニューロンは他の全ニューロンが検出したものを見られる。ニューロンごとのメモ帳では、これができない。1,024 個のニューロンを持つ隠れ層の 1 時点入力「猫」の Embedding+ 前のステップのメモ帳各ニューロンが数字を 1 つ出す10.32−0.730.1n0.9これがメモ帳[0.3, −0.7, 0.1, …, 0.9]1,024 個の数字 — ニューロン 1 つにつき 1 個次のステップでは、このベクトル全体が全ニューロンに戻る共有する意味はここにある。各ニューロンは他の全ニューロンが検出したものを見られる。ニューロンごとのメモ帳では、これができない。
メモ帳が 1,024 冊ではなく 1 冊である理由は、この横方向の共有にある。

Reactで例えると

Reactを知っている読者なら、RNNの隠れ状態はuseRefに近いと考えるとわかりやすいかもしれません。ref.currentはレンダリングをまたいで値を保持し、更新してもre-renderをトリガーしない、つまりReactのシステムからは「見えない(hidden)」内部状態です。RNNのメモ帳も同じで、各時点(トークン処理)をまたいでref.currentが上書き更新されていき、常に最新の状態だけを保持します。古い値は上書きされて消える。

const memo = useRef(new Float32Array(1024));
function processToken(embedding) {
memo.current = computeNewState(embedding, memo.current);
// 古いmemo.currentは上書きされて消える
}
processToken(embed("猫")); // memo.current = [猫の情報]
processToken(embed("が")); // memo.current = [猫が…の情報]
processToken(embed("座った")); // memo.current = [猫が…座った の情報]

各ステップでRNNが使えるのは2つだけです。「今読んでいるEmbeddingベクトル」と「前のステップから渡されたメモ帳」。前の単語に戻って読み返すことはできません。読み終わった情報は、メモ帳の中にしか存在しない。講義の例えで言えば、1ページのメモ帳に書き続けていて、講義を巻き戻すことはできない状態です。

なぜメモ帳は「ニューロンごと」ではなく「層全体で1つ」なのか

直感的には、各ニューロンが自分専用のメモ帳を持つ方が自然に思えます。しかしRNNのメモ帳が層全体で共有される理由は、各ニューロンの出力が他のニューロンの文脈になるからです。

「猫が座った」を処理するとき、あるニューロンが「主語は猫だ」という情報を検出し、別のニューロンが「動詞は過去形だ」を検出したとします。次のトークンを処理する際、「過去形の動詞の主語は猫」という複合的な理解が必要です。これは1つのニューロンだけでは持てず、複数のニューロンの出力を組み合わせて初めて成立する情報です。

メモ帳を全ニューロンの出力をまとめたベクトル(1024個の数字)として共有し、次の時点で全ニューロンに入力することで、各ニューロンは他のニューロンが前の時点で何を検出したかを参照できます。ニューロンごとに独立したメモ帳では、この「横の情報共有」ができません。

ニューロンはメモ帳をどう使うのか

各ニューロンは各時点で、「今のトークンのEmbedding」と「前の時点のメモ帳」を連結した1つのベクトルを入力として受け取り、第3章と同じ掛け算と足し算を行います。ニューロン自体は「どこまでがトークンでどこからがメモ帳か」を知りません。しかし訓練を通じて、トークン用の重みとメモ帳用の重みが異なる役割を学習します。例えば「現在のトークンが動詞なら、メモ帳の中で主語に相当する情報を重視する」というようなパターンが、重みの値として自然に現れます。

RNN のニューロンが読むもの、そしてそれで何をするか3 つの部分から成る。1 つ目は連結して作られる 1 本の入力ベクトルである。300 個の数字からなるトークンの Embedding と、1,024 個の数字からなる前のメモ帳が実際の比率で描かれ、メモ帳は 3 倍以上長い。両者は端から端まで連結されて 1,324 個の数字からなる 1 本のベクトルとなり、つなぎ目には薄い破線があるだけである。その境目を示すものは何もないからである。その横に、重みベクトルの各半分が学ぶことが示される。トークン側はこのトークンが動詞かどうかを学び、メモ帳側はどの記憶を重視するかを学ぶ。2 つ目は計算である。入力ベクトルに重み行列を掛けてバイアスを足すと出力になる。第 3 章と同じ計算であり、その出力が次のステップのメモ帳になる。3 つ目は具体例である。現在のトークンは動詞の「座った」で、その Embedding は動詞らしさを持つ。前のメモ帳は主語の次元が 0.9(猫)、目的語が 0.1、時制が 0.2 である。このステップの出力では主語の次元が他より大きく強調される。値は説明のためのもので、実際に学習される次元がこれほど解釈可能であることはまれである。ニューロンが見るのは 1 本の大きなベクトルで、当てはめる式も 1 つだけであり、両者を分化させるのは訓練である。RNN のニューロンが読むもの、そしてそれで何をするか1. 連結して作られる 1 本の入力ベクトルトークンの Embedding300 個の数字前のステップのメモ帳1,024 個の数字この境目を示すものは何もないxₜ — 1 本のベクトル、1,324 個の数字各半分の重みが学ぶことトークン側このトークンは動詞か?メモ帳側どの記憶を重視するか2. 1 回の掛け算と足し算 — 第 3 章と同じ計算xₜ×W+b=hₜ次のステップのメモ帳になるニューロンはどこまでがトークンでどこからがメモ帳かを知らない。例:「現在のトークンが動詞なら、メモ帳の中の主語に対応する情報を重視する」現在のトークン「座った」(動詞)Embedding が動詞らしさを持つ前のステップのメモ帳0.9主語(猫)0.1目的語(—)0.2時制(過去)hₜ — このステップの出力主語目的語時制値は説明のためのもので、実際に学習される次元がこれほど解釈可能であることはまれ——この図の下の「ブラックボックス」の段落を参照。ニューロンが見るのは 1 本の大きなベクトルで、当てはめる式も 1 つだけ。両者を分化させるのは訓練である。
ニューロンにとって境目はない。訓練がそこに境目を作る。

各ニューロンがどんなパターンを学ぶかは事前に決まっていません。訓練の過程で、各ニューロンが「次のトークンの予測に役立つ何らかのパターン」を自分で見つけます。そのパターンは人間には解釈できない抽象的なものかもしれません。これがニューラルネットワークが「ブラックボックス」と呼ばれる理由の一つです。

RNNの本当のボトルネック:スナップショットには問い合わせできない

メモ帳のサイズ(1024個の数字)は設計者が訓練前に決めるパラメータです。512でも2048でもかまいませんが、一度決めたら変わりません。ニューロンの層が固定数の入力を期待するためです(第3章の構造を思い出してください)。

「サイズが固定だから長い文で情報が溢れる」。一見これが問題に見えます。しかし本当の問題はサイズではなく、データ構造です。

メモ帳は**データベースのスナップショット(ダンプ)**に似ています。ダンプファイルには過去のすべてのトランザクションの累積結果が反映されていますが、特定のINSERT文を復元することはできません。サイズを10倍にしても1000倍にしても、この性質は変わらない。

RNNのメモ帳も同じです。すべての過去のトークンが現在の状態に貢献していますが、個々のトークンの情報を個別に取り出せないという構造的制約は、メモ帳をどれだけ大きくしても変わりません。

メモ帳を大きくしても解決しない理由2 つのパネル。左は RNN が持つもので、5 つのトークンがすべて 1,024 個の数字からなる最終メモ帳 1 枚に流れ込む。そのため 3 番目のトークンが何だったかという問い合わせは失敗する。トークンは合計の中に溶けており、メモ帳を 1,024 個から 100 万個に増やしても答えは同じである。右は本当に必要だったもので、5 つのステップがそれぞれ独立したエントリとして保存されている。同じ問い合わせは成功し、文がどれだけ長くなってもエントリ 3 を読み出せる。サイズは問題ではなかった。データベースのダンプは過去のすべてのトランザクションを反映しながら、そのどれ 1 つも復元できず、いくら大きくしてもその性質は変わらない。メモ帳を大きくしても解決しない理由入力文RNN が単語ごとに読む最終メモ帳(スナップショット)出力 RNN翻訳RNN が持つもの:スナップショットt1t2t3t4t5最終メモ帳 1 枚 — 1,024 個の数字問い合わせ:3 番目のトークンは何だったか?トークンは合計の中に溶けている1,024 個でも 100 万個でも答えは同じ本当に必要だったもの:トランザクションログt1t2t3t4t5各ステップを個別のエントリとして保存問い合わせ:3 番目のトークンは何だったか?エントリ 3 はそのまま読み出せる文がどれだけ長くなっても変わらない問題はサイズではなかった。ダンプは過去のすべてのトランザクションを反映しながら、そのどれ 1 つも復元できない。この性質はいくら大きくしても変わらない。
大きくしたところで、ダンプはダンプのままだ。

翻訳モデルでは、入力文を全部読み終わってから出力文を生成し始めます。

出力RNNが翻訳文を生成するとき、手元にあるのは最終スナップショットだけです。例えば「彼女は市場に行った。そこで彼女は友人の彼女に会った」を翻訳するとき、出力RNNが3番目の「彼女」を訳すには、それが「友人の恋人」であることを確認するために入力文の対応する箇所を参照したい。しかし個々のトークンはスナップショットに溶け込んでいる。ピンポイントで取り出す手段がありません。

本当に必要なのは、スナップショットではなくトランザクションログ、つまり各トークンの処理結果が個別に保存され、問い合わせできるデータ構造です。この転換が、後で登場するAttentionの核心になります。

第3章のデジャヴ:勾配消失、再び

RNNの問題は情報の溢れだけではありません。学習そのものにも壁がありました。

第3章で、バックプロパゲーション(誤差逆伝播)の仕組みを見ました。出力を正解と比較し、誤差信号を逆方向に伝えて各層の重みを調整します。これが「どの重みがどれだけ間違いに貢献したか」を追跡する「blame(責任追及)」の仕組みです。

RNNでも同じ仕組みが使われます。しかし第3章では誤差信号が層をまたいで逆方向に流れたのに対し、RNNでは時点をまたいで逆方向に流れます。

同じ問題が、2 つの軸に現れる同じ問題を異なる軸で示す 2 つの帯。1 つ目は第 3 章のもので、誤差信号が Layer 50 から Layer 1 に向かって層をさかのぼり、1 ホップごとに 0.25 倍に縮むため、最初の層には届かない。2 つ目は RNN のもので、同じ信号がメモ帳 50 からメモ帳 1 に向かって時点をさかのぼり、同じ割合で縮むため、最初のトークンには届かない。数学はまったく同じで、変わったのは軸だけ、空間から時間へであり、同じ壁がふたたび現れた。同じ問題が、2 つの軸に現れる第 3 章 — 層をさかのぼる(空間)Layer₁Layer₂Layer₃Layer₅₀← 誤差!1 ホップごとに ×0.25最初の層には届かないRNN — 時点をさかのぼる(時間)メモ帳₁メモ帳₂メモ帳₃メモ帳₅₀← 誤差!1 ホップごとに ×0.25最初のトークンには届かない数学はまったく同じ。変わったのは軸だけ、空間から時間へ——そして同じ壁がふたたび現れた。
数学は同じ、軸が変わっただけ。

例えば50番目のトークンで予測を間違えたとき、「1番目のトークンの処理の仕方が悪かったのが原因」かもしれません。しかし誤差信号はメモ帳の連鎖を49回遡る必要があり、各ステップで信号が縮小される。結果、初期のトークンに対するフィードバックがゼロに近くなり、重みが調整されないため、ネットワークは「文の冒頭をうまく処理する方法」を学習できません。

数学は全く同じです。第3章では深いを通るたびに信号が消えた。RNNでは長い時間を遡るたびに信号が消える。軸が空間から時間に変わっただけで、同じ問題が再び現れたのです。

LSTM:時間方向のResNet (1997年発明、2014年〜翻訳の主力に)

第3章では、層方向の勾配消失を ResNet(残差接続) が解決しました。入力をショートカットで出力に加算し、勾配が直接流れる「高速道路」を作る仕組みです。

では時間方向の勾配消失には? 実は、ResNet(2015年)より18年も前の1997年に、同じ発想の解決策が提案されていました。ホッホライターとシュミットフーバーによる**LSTM(Long Short-Term Memory・長短期記憶)**です。長年ニッチな存在でしたが、2014年頃に深層学習ブームとGPUの普及が重なり、機械翻訳の主力アーキテクチャとして花開きました。

LSTMの核心は、通常のメモ帳に加えてセル状態(cell state)というもう1つの記憶を持つことです。このセル状態は、時点間でほぼそのまま素通りする高速道路です。通常のRNNのメモ帳が各ステップで複雑な変換を受けて勾配を4分の1ずつ失うのに対し、セル状態のつなぎ目は加算だけなので、勾配は出発したときとほぼ同じ強さで届きます。

LSTMにはさらにゲートという仕組みがあります。「忘却ゲート」「入力ゲート」「出力ゲート」の3つが、セル状態に対して「何を忘れるか」「何を書き込むか」「何を読み出すか」を制御します。これにより、重要な情報を長期間保持しつつ、不要な情報を捨てることができます。

LSTM のセル状態:勾配が生き残る近道3 段構成。上段は通常の RNN で、3 つのセルが複雑な変換でつながれ、1 ホップごとに勾配が 0.25 倍される。そのため最初のトークンには何も届かない。中段は LSTM で、セル状態の高速道路が系列全体をまっすぐ貫き、つなぎ目は加算だけである。そのため勾配は 1.0 付近のままで信号が生き残る。高速道路の下には、それを制御する 3 つのゲートが下がっている。忘却ゲートが何を捨てるか、入力ゲートが何を書き込むか、出力ゲートが何を読み出すかを決める。下段は 2 つの近道を並べて示す。ResNet では skip connection が入力から層を飛び越えて出力へ勾配を運び、これは層の軸である。LSTM ではセル状態の高速道路があるステップから次のステップへ勾配を運び、これは時間の軸である。勾配が減衰せずに通れる道を用意するという同じ発想を、違う軸に当てたものである。LSTM のセル状態:勾配が生き残る近道通常の RNN — 各ステップで複雑な変換が入るh₁h₂h₃勾配 ×0.25勾配 ×0.25→ 最初のトークンには届かないLSTM — セル状態はほぼそのまま素通りするセル状態勾配 ≈ 1.0 — 信号が生き残る+忘却ゲート何を捨てるか+入力ゲート何を書き込むか+出力ゲート何を読み出すか同じ近道、違う軸ResNet — 層の軸入力Layer出力skip connectionLSTM — 時間の軸セル状態ₜゲートセル状態ₜ₊₁セル状態の高速道路同じ発想——勾配が減衰せずに通れる道を用意する。違うのは軸——ResNet は空間(層)、LSTM は時間(トークン)。
ResNet の発想を 18 年先取りして、別の軸に当てたもの。

LSTMはRNNの記憶問題を大幅に改善し、2014年〜2017年頃の機械翻訳で主力として使われました。しかし根本的な制約は残っていました。逐次処理です。トークン1を処理してからトークン2、トークン2を処理してからトークン3。どんなにメモリが改善されても、GPUの並列計算を活かせない。

バグへのパッチ:Attention(注意機構)

バダナウらの解決策は、先ほどの「スナップショットからトランザクションログへ」の転換そのものでした。

ステップ1:スナップショットをトランザクションログにする

RNNは入力を処理するとき、各ステップでメモ帳(スナップショット)を更新します。従来はこの最終スナップショットだけを出力RNNに渡していました。バダナウらのアイデアは、各ステップのスナップショットを全部、独立したコピーとして保存しておくことでした。

重要なのは、保存されるのは差分(デルタ)ではなく、各時点の完全なスナップショットです。5トークンを処理したら、1024個の数字が5セット、合計5120個の数字が保存されます。

最後の 1 枚だけでなく、全ステップを残す2 つの帯で、どちらも 5 つのメモ帳が順に並ぶ。1 つ目は従来の RNN で、途中のメモ帳は上書きされて消えるため、出力 RNN に届くのは 5 枚目の最終メモ帳だけである。2 つ目は Attention 付きの RNN で、各ステップが差分ではなく完全なコピーとして保存され、5 つすべてが保持されてどの出力ステップからも参照できる。その代償として、5 トークンなら 1,024 個の数字が 5 セット、合計 5,120 個になる。以前は 1,024 個だった。最後の 1 枚だけでなく、全ステップを残す従来の RNN — スナップショットは 1 枚しか残らないメモ帳₁メモ帳₂メモ帳₃メモ帳₄メモ帳₅出力 RNN途中のメモ帳は上書きされて消える↑ 使われるのはこれだけAttention 付き RNN — 各ステップを独立したコピーとして保存メモ帳₁コピー₁メモ帳₂コピー₂メモ帳₃コピー₃メモ帳₄コピー₄メモ帳₅コピー₅出力 RNN差分ではなく、各時点の完全なスナップショットすべて保持され、どの出力ステップからも参照できる5 トークンなら 1,024 個の数字が 5 セット——合計 5,120 個。以前は 1,024 個だった。
5 枚のうち 4 枚を捨てるのをやめる。

Reactで例えると

React的に言えば、Attentionはref.currentを上書きする前にhistory.push([...memo.current])でスプレッドコピーを保存しておくようなものです。出力時にはhistory[i]で任意の時点の状態にアクセスできます。

講義の例えに戻ると、Attentionは講義を録音することに相当します。ノート(最終メモ帳)だけに頼るのではなく、講義の各時点の録音が残っている。

しかし録音があるだけでは不十分です。2時間の講義の録音を毎回全部聴き直すわけにはいきません。「今、どの部分を聴き直すべきか」を判断する仕組みが必要です。これがAttentionの核心部分です。

ステップ2:どのスナップショットに注目するかを学習する

出力RNNが翻訳の各単語を生成するとき、以下のプロセスが走ります:

  1. 出力RNNの現在の状態(「今、何を訳そうとしているか」)を取る
  2. 保存された全スナップショットそれぞれとの関連度スコアを計算する
  3. スコアをsoftmaxで正規化して、合計が1.0になる重みに変換する
  4. 重みに応じてスナップショットの加重平均を取り、文脈ベクトルを作る
  5. この文脈ベクトルを使って出力単語を生成する
出力RNNが「she」を生成しようとしている場面:
保存されたスナップショット:
コピー₁(「彼女」処理後) コピー₂(「は」処理後) コピー₃(「市場」処理後)
コピー₄(「友人」処理後) コピー₅(「彼女」処理後)
ステップ2 — 関連度スコアを計算:
score(現在の状態, コピー₁) = 4.2 ← 高い!最初の「彼女」が関連
score(現在の状態, コピー₂) = 0.1
score(現在の状態, コピー₃) = 0.8
score(現在の状態, コピー₄) = 1.5
score(現在の状態, コピー₅) = 0.3
ステップ3 — softmaxで正規化(合計 = 1.0):
重み = [0.70, 0.02, 0.08, 0.15, 0.05]
ステップ4 — 加重平均:
文脈 = 0.70×コピー₁ + 0.02×コピー₂ + 0.08×コピー₃ + 0.15×コピー₄ + 0.05×コピー₅
= コピー₁(最初の「彼女」)に強く偏ったベクトル
ステップ5 — この文脈を使って「she」を生成

この「どのスナップショットにどれだけ注目するか」を決める重み。これが Attention(注意) の名前の由来です。人間が文章を読むとき、すべての単語に均等に注意を払うのではなく、今の文脈に関連する部分に注意を集中させます。Attentionメカニズムはまさにこれを数値的に再現しています。

そしてスコア計算に使われる重みも、バックプロパゲーションで訓練されるパラメータです。「動詞を訳すときは主語のスナップショットに高いスコアをつける」というようなパターンを、データから自動的に学びます。

スナップショットに点をつけて 1 本の文脈ベクトルを作る「she went to the market. There she met her friend's girlfriend」という文について保存された 5 つのスナップショットの表であり、出力 RNN は「she」を生成しているところである。各行は she、went、market、friend、she のいずれかを読んだ直後の状態を示し、現在の状態に対する関連度スコアは順に 4.2、0.1、0.8、1.5、0.3 である。softmax はこれを 0.70、0.02、0.08、0.15、0.05 の重みに変換する。合計は 1.0 で、棒グラフとして描かれ、最初の 1 本が他より大きく長い。スナップショットの加重平均は最初のスナップショットに強く偏った文脈ベクトルとなり、そのベクトルが出力単語を生成する。スコア計算の重み自体もバックプロパゲーションで訓練される。スナップショットに点をつけて 1 本の文脈ベクトルを作る入力:「she went to the market. There she met her friend's girlfriend」— 出力 RNN は「she」を生成中スナップショットこの語を読んだ直後の状態2. スコア3. softmax重みの合計は 1.0h₁she4.20.70h₂went0.10.02h₃market0.80.08h₄friend1.50.15h₅she0.30.054. 加重平均0.70×h₁ + 0.02×h₂ + …h₁ に強く偏ったベクトル5. 単語を生成sheスコア計算の重みもバックプロパゲーションで訓練される。「動詞を訳すときは主語のスナップショットに高い点をつける」は、書き込まれたものではなくデータから学ばれたもの。
Attention の正体はこれだけ。何をどれだけ重視するかを決めること。

Attentionは勾配消失も改善する

Attentionのもう一つの重要な効果があります。出力から各スナップショットへの直接的な接続が、勾配にとってのショートカットになるのです。

同じ接続が、勾配にとっての近道にもなる勾配が初期のトークンへどう戻るかを示す 2 つの帯。1 つ目は RNN だけの場合で、出力からメモ帳 50、メモ帳 49 と順にさかのぼってメモ帳 1 まで、50 ホップ分を移動し、そのたびに縮むため途中で消える。2 つ目は Attention がある場合で、出力から保存された各コピーへの直通経路があるため、勾配は必要なトークンへ 1 ホップで到達し、そのまま届く。Attention は長文の精度を上げるためのパッチであり、勾配消失の緩和は誰も狙っていなかった副産物である。同じ接続が、勾配にとっての近道にもなるRNN だけ — 勾配はチェーンをさかのぼるメモ帳₁メモ帳₂メモ帳₃メモ帳₅₀出力50 ホップ分さかのぼり、そのたびに縮む✗ 途中で消えるAttention あり — 各ステップへの直通経路コピー₁コピー₂コピー₃コピー₅₀出力どのトークンへでも 1 ホップ✓ そのまま届くこれは長文の精度を上げるためのパッチだった。勾配消失の緩和は、誰も狙っていなかった副産物である。
これは誰も狙っていなかった。

勾配はAttentionの直結路を通って任意のトークンに1ステップで到達できるため、RNNチェーンを遡る必要がなくなり、勾配消失が大幅に緩和されます。

これはグランドビジョンではありませんでした。翻訳の長文精度が落ちるというバグへの、工学的なパッチです。しかし結果として、スナップショットの制約(特定のトークンに問い合わせできない)を解決し、さらに勾配消失まで改善しました。

パッチがアーキテクチャになった:Transformer (2017)

バスワニらが立てた問い:「そもそもRNN(逐次処理の仕組み)は必要か? Attentionだけで翻訳できるのでは?」

ここまでの改善を振り返ると、Attention+RNNでもRNN部分の制約は残っていました。スナップショットの生成が逐次処理です。

Attention+RNNでは、参照(読み返し)は並列化できますが、スナップショットの生成は依然としてRNNが担当しています。各スナップショットは前のスナップショットに依存するため、順番にしか作れません。

Attention + RNN: 参照は改善されたが、スナップショット生成は逐次のまま
snapshot₁ = f("猫", 空) ← まずこれを計算
snapshot₂ = f("が", snapshot₁) ← snapshot₁が完成しないと計算できない
snapshot₃ = f("マット", snapshot₂) ← snapshot₂が完成しないと計算できない
各snapshotが前のsnapshotに依存 → チェーン → 並列化不可能

バスワニらの洞察は、このチェーン(メモ帳の連鎖)そのものを捨てることでした。

RNNなしでどう文脈を理解するか

RNNでは、トークンの順序はメモ帳の連鎖によって暗黙的に表現されていました。「猫」を処理してから「が」を処理するからこそ、「が」の時点のメモ帳に「猫」の情報が含まれる。処理の順序=文脈の順序。

Transformerは全く別のアプローチを取ります。各トークンは最初から自分の位置番号を持っている

RNN と Transformer:処理方式の比較処理方式を比較する 2 つのパネル。RNN はトークンを 1 つずつ処理し、それぞれがメモを次へ引き継ぐため、前のステップが終わるまで次に進めない。GPU は 1 コアしか使えず、必要なステップ数はトークン数×層数で、100 トークン 96 層なら 9,600 になる。Transformer は Self-Attention で全トークンを同時に処理し、順序は位置エンコーディングで保つ。GPU の全コアを使い、必要なステップ数は層数だけの 96 で、100 分の 1 になる。RNN と Transformer:処理方式の比較RNN(逐次処理)座ったメモ帳1メモ帳2メモ帳3逐次処理の制約token1 → token2 → token3 → …前のトークンが終わるまで次に進めないGPU 利用率1 コアだけ稼働処理ステップ数トークン数 × 層数100 トークン × 96 層 = 9,600 ステップTransformer(並列処理)座ったSelf-Attention:全員が全員を参照並列処理の利点全トークンを同時に処理位置エンコーディングで順序を保持GPU 利用率全コアがフル稼働処理ステップ数層数のみ96 層 = 96 ステップ(100 分の 1)RNN は計算が軽いが逐次で GPU 1 コアのみ。Transformer は計算が重いが並列で GPU 全コアを使う。
Transformer は計算が軽いのではなく、並べて実行できるのです。

位置情報がデータ自体に含まれているので、全トークンを同時に処理しても順序が失われません。そして各トークンが他のすべてのトークンを参照する。これがTransformerの Self-Attention(自己注意) です。

先ほどのAttentionでは「出力RNNが入力のスナップショットを参照する」仕組みでした。Self-Attentionでは、入力トークン同士が互いを参照する。「猫」は「座った」を見て、「座った」は「猫」を見る。すべて同時に。

RNNでは「メモ帳₃を計算するにはメモ帳₂が必要、メモ帳₂にはメモ帳₁が必要」という依存チェーンがありました。Transformerにはこのチェーンがありません。各トークンのEmbeddingは他のトークンの処理結果に依存しません。だから同時に処理できるのです。

Self-Attention:全トークンが全トークンを同時に参照する3 つの帯。1 つ目では、猫・が・マット・座った という 4 つのトークンがそれぞれ自分の位置番号を持っており、順序は処理順ではなくデータ自体に載っている。2 つ目では、「座った」というトークンが自分自身を含む 4 つすべてを一度に参照しており、同じことが他のすべてのトークンでも同時に起きるため、順番を待つトークンはない。3 つ目は対比である。RNN は h₃ に h₂ が要り、h₂ に h₁ が要るというチェーンだが、Transformer ではどのトークンの Embedding も他のトークンの処理結果に依存しない。Self-Attention:全トークンが全トークンを同時に参照する1. 位置情報は処理順ではなくデータ自体に載っている#1#2マット#3座った#42. あるトークンから見た図 — 全トークンが同時に同じことをする座ったマット座った順番を待つトークンはないRNN:チェーンがあるh₃ には h₂ が要り、h₂ には h₁ が要るTransformer:チェーンがないどのトークンの Embedding も、他のトークンの処理結果に依存しない
順序は処理の結果であることをやめ、データになった。

Transformerはまだ「深い」

「全トークンを同時に処理」と聞くと、ネットワークが「平ら」になったように聞こえるかもしれません。しかし Transformerは依然として深い多層構造 です。GPT-3は96層あります。

並列化されたのはトークン方向だけです。層方向は依然として順番に処理します。各層が表現を精錬していきます。Layer 1は「座った=動詞だ」を学び、Layer 2は「猫が座ったの主語だ」を学び、さらに深い層は複雑な意味関係を学ぶ。深いほど豊かな理解。第3章と同じ原理です。

バックプロパゲーション(blame)も第3章と同じ仕組みで層を逆方向に流れます。加えて、Self-Attentionの接続を通じて、任意のトークンから任意のトークンへ直接blame信号が届くので、RNNのような長いチェーンを遡る必要がなく、勾配消失が大幅に緩和されます。そしてResNet残差接続が、層方向の勾配消失を防ぎます。

並列化はトークン方向のみ、層方向はいまも順番に処理する左は層のスタックである。Layer 1 は「座った」が動詞であることを学び、Layer 2 は「猫」が「座った」の主語であることを学び、Layer 3 はその 2 つを前提とする関係を学ぶ。これが GPT-3 の 96 層まで続き、深いほど豊かな理解になる。右は、その深さを訓練可能にしている 2 つの仕組みである。残差接続によって勾配は各層を恒等経路で通り抜け、Self-Attention によって blame 信号はチェーンをさかのぼることなく任意のトークンから任意のトークンへ 1 ホップで届く。並列化されたのはトークン方向だけで、層方向はいまも順番に処理され、深さはそこから生まれている。並列化はトークン方向のみ、層方向はいまも順番に処理する各層は前の層が出したものをさらに精錬するLayer 1「座った」は動詞であるLayer 2「猫」は「座った」の主語であるLayer 3上の 2 つを前提とする関係GPT-3 では 96 層 — 深いほど豊かな理解その深さを訓練可能にしているもの残差接続勾配が各層を恒等経路で通り抜ける(第 3 章)Self-Attentionblame 信号が任意のトークンから任意のトークンへ 1 ホップで届く並列化されたのはトークン方向だけ。層方向はいまも順番に処理され、深さはまさにそこから生まれている。
トークン方向に広く、層方向に深い。並列化されたのは片方だけ。

処理時間:なぜTransformerが速いのか

処理時間を比較してみましょう。RNNに必要な逐次ステップ数はトークン数 × 層数で、100トークン・96層なら9,600ステップになります。Transformerに必要なのは層数だけ、つまり96です。各層の中でトークンは同時に処理されるからです。

ただし、Transformerの各ステップはRNNより計算量が多い。Self-Attentionでは全トークンが全トークンを参照するため、トークン数の2乗(n²)の計算が必要です。100トークンなら10,000組のスコア計算。

逐次ステップ数 各ステップの計算量
RNN トークン数 × 層数 軽い(1トークン分)
Transformer 層数のみ 重い(n²のAttention計算)

合計の計算量はTransformerの方が多いこともあります。しかし重い計算はGPUで並列化できる。これは第3章のAlexNetと同じ構造です。4000人の小学生が足し算を同時に解く。n²のスコア計算は互いに独立しているため、GPUの数千コアで同時に実行できます。

一方、RNNの逐次ステップはどんなに高性能なGPUがあっても並列化できません。前のステップが完了しないと次に進めないからです。

結果として、Transformerはこの章で見てきた問題をすべて同時に解決しました:

RNN LSTM Attention+RNN Transformer
スナップショット問題 ✓ (ログ化)
勾配消失(時間方向) ✓ (高速道路) ✓ (ショートカット) ✓ (直結)
並列処理 ✗ (RNN部分が残る)

RNNを捨ててAttentionだけにした結果、訓練が劇的に速くなりました。速くなるということは、より大きいモデルをより多くのデータで訓練できるということです。

翻訳の速度改善を目的としたアーキテクチャが、スケールを可能にすることでLLM全体の基盤になりました。

6. 大きくすれば賢くなるか? — スケールと創発

スケール則の発見 (2020)

「モデルを大きくすれば性能が上がる」は経験則として知られていました。OpenAIのカプランらが、これを数式で示しました:

性能は、パラメータ数・データ量・計算量の3つに対して、なめらかで予測可能な法則に従って改善する。

3つの変数を具体的に見てみましょう:

変数 意味 増やす方法
パラメータ数 (N) モデルの重みの総数 層を深くする、各層のノード数を増やす
データ量 (D) 訓練に使うトークン数 より多くのテキストを収集する(Web、書籍、コードなど)
計算量 (C) 訓練中にGPUが実行する演算の総量(FLOPs) より多くのGPUで、より長い時間訓練する
スケール則:3 つの量と、1 本の予測可能な曲線スケール則が性能と結びつける 3 つの量を示す 3 枚のカード。N はパラメータ数で、モデルの重みの総数であり、層を深くしたり層あたりのノードを増やしたりして増やす。D はデータ量で、訓練に使うトークンの数であり、Web・書籍・コードからテキストをより多く集めて増やす。C は計算量で、訓練中に GPU が実行する演算の総量を FLOPs で測ったものであり、GPU を増やしてより長く回すことで増やす。その下に C ≈ 6 × N × D という関係が示される。これにより計算量は独立した第 3 の変数というより投入できる総予算となり、これを決めればモデルの大きさと投入するデータ量も同時に決まる。GPT-3 の訓練は約 3.14×10²³ FLOPs を費やした。スケール則:3 つの量と、1 本の予測可能な曲線性能は、この 3 つすべてに対してなめらかで予測可能な法則に従って改善するNパラメータ数モデルの重みの総数増やし方層を深くする、層あたりのノードを増やすDデータ量訓練に使うトークンの数増やし方テキストをより多く集める —Web、書籍、コードC計算量訓練中に GPU が実行する演算の総量(FLOPs)増やし方GPU を増やし、より長く回すC ≈ 6 × N × D計算量は独立した第 3 の変数というより、投入できる総予算に近い。これを決めれば、モデルの大きさと投入するデータ量も同時に決まる。GPT-3 の訓練は約 3.14×10²³ FLOPs を費やした。
変数は 3 つ、しかし予算は 1 つだけ。

計算量とは?

パラメータ数とデータ量は直感的ですが、計算量は少し説明が必要です。

計算量とは、訓練中にGPUが実行する浮動小数点演算(FLOP: Floating Point Operation)の総数です。モデルが1つのバッチを処理するたびに、順伝播と逆伝播で大量の行列演算が走ります。その演算の累計が計算量です。

カプランらは、この3つの関係を近似式で示しました:

C ≈ 6 × N × D

つまり計算量はパラメータ数とデータ量の積にほぼ比例します。計算量は独立した第3の変数というより、投入できる総予算です。予算が決まれば、モデルをどこまで大きくし、データをどれだけ食わせるかが決まります。

計算量を増やす方法はシンプルです。GPUの数 × 訓練時間です。GPT-3の訓練には約3.14×10²³ FLOPsが費やされました。これは数千基のGPUを数週間走らせた結果です。つまり計算量を増やすとは、端的に言えばお金と時間を投入するということです。

補足:Chinchilla則 (2022) カプランのスケール則は「計算予算が増えたら、モデルを大きくする方に多く配分すべき」と示唆しました。しかし2022年、DeepMindのホフマンらは「データ量にもっと配分すべき」と修正しました(Chinchilla則)。同じ計算予算でも、配分の最適比率が異なるという発見です。両者が一致しているのは、計算量が根本的な制約資源であるという点です。

これは「地図」でした。「このサイズのモデルをこれだけのデータで訓練すれば、これくらいの性能になる」と事前に予測できる。結果が見えるなら、大規模投資の判断ができます。

Transformerから「GPT」へ——目的の転換

Transformerは翻訳のために生まれました。しかしGPT(Generative Pre-trained Transformer、生成型の事前学習済みTransformer)は、翻訳とは別の問題を解こうとしていました。

2018年、OpenAIのラドフォードらが直面していた問題はこうです:

NLPには多様なタスク(質問応答、文書分類、感情分析など)があるが、それぞれのタスクごとにラベル付きデータを大量に集めるのは高コストすぎる。

ラベルなしテキスト(インターネット上の文章)は大量にある。これを使って「言語の一般的な理解」を先に学び、少量のラベル付きデータで個別タスクに適応させれば良いのではないか?

これがGPT-1の核心アイデアです:

  1. 事前学習(Pre-training):大量のテキストで「次の単語を予測する」だけの訓練をする
  2. 微調整(Fine-tuning):個別タスク用の少量データで重みを調整する

アーキテクチャはTransformerのDecoder部分だけを使いました。翻訳のためのEncoder-Decoder構造は不要で、「テキストを読んで続きを予測する」というシンプルな構造で十分だったからです。

GPT-1:言語を一度学び、タスクごとに適応させる2018 年の課題は、自然言語処理にはタスクが多数あり、そのそれぞれにラベル付きデータを集めるのはコストが高すぎる一方、インターネット上のラベルなしテキストなら大量にあるというものだった。GPT-1 はこれに 2 段階で答える。1 段階目は事前学習で、大量のラベルなしテキストに対して「次の単語を予測する」というただ 1 つの目的で訓練する。2 段階目はファインチューニングで、質問応答・文書分類・感情分析といった各タスクに少量のラベル付きデータを与え、ゼロからではなく事前学習済みの重みから始める。アーキテクチャは Transformer の Decoder だけを使う。翻訳には Encoder と Decoder の両方が必要だったが、テキストを読んで続きを予測するだけなら片方で足りる。GPT-1:言語を一度学び、タスクごとに適応させる2018 年の課題:NLP にはタスクが多数あり、そのそれぞれにラベル付きデータを集めるのはコストが高すぎる。ラベルなしテキスト——インターネット上の文章——なら大量にある。1. 事前学習大量のラベルなしテキスト目的はただ 1 つ:次の単語を予測する2. ファインチューニング質問応答文書分類感情分析タスクごとに少量のラベル付きデータ、出発点は事前学習済みの重みアーキテクチャは Transformer の Decoder のみ。翻訳には Encoder と Decoder の両方が要ったが、「テキストを読んで続きを予測する」なら片方で足りる。
Transformer の半分。仕事に必要だったのが半分だけだったから。

GPT-1 → GPT-2 → GPT-3:同じ設計図、異なるスケール

ここが重要です。GPT-1、GPT-2、GPT-3はアーキテクチャがほぼ同じです。 基本設計を変えず、スケールだけを変えて何が起きるかを観察した。これが3世代の本質です。

GPT-1 (2018) GPT-2 (2019) GPT-3 (2020)
パラメータ数 1.17億 15億 1750億
訓練データ BookCorpus(約5GB) WebText(約40GB) CommonCrawl等(約570GB)
核心の発見 事前学習 + 微調整が有効 微調整なしでもタスクが解ける(Zero-shot) 数例示すだけで未知のタスクをこなす(Few-shot)
論文タイトルが語る思想 “Improving Language Understanding by Generative Pre-Training” “Language Models are Unsupervised Multitask Learners” “Language Models are Few-Shot Learners”

GPT-1は「事前学習+微調整」の有効性を示しました。しかしタスクごとに微調整が必要でした。

GPT-2はモデルを13倍に大きくし、データも増やしました。すると、微調整なしでも一部のタスクをこなせるようになりました(Zero-shot)。論文タイトルの通り「言語モデルは教師なしのマルチタスク学習器である」という発見です。ただし性能はまだ限定的でした。

GPT-3はさらに117倍に大きくしました。アーキテクチャの変更はごくわずか(Sparse Attentionの部分導入程度)です。同じ設計図のまま、スケールだけで質的な飛躍が起きました。

GPT-1 → GPT-2 → GPT-3:同じ設計図を 3 つのスケールで1 つの設計図の 3 世代を示す 3 つの列。2018 年の GPT-1 はパラメータ 1.17 億、訓練データは約 5GB の BookCorpus で、事前学習とファインチューニングが有効であることを示した。ただしタスクごとの調整は必要だった。2019 年の GPT-2 はパラメータ 15 億、訓練データは約 40GB の WebText で、13 倍の規模となり、ファインチューニングなしで一部のタスクを解いた。これが zero-shot である。2020 年の GPT-3 はパラメータ 1750 億、訓練データは CommonCrawl 等の合計約 570GB で、さらに 117 倍の規模となり、数例を示すだけで未知のタスクをこなした。これが Few-shot である。3 世代を通じてアーキテクチャの変更はごくわずかで、GPT-3 が sparse attention を部分的に導入した程度であり、質的な飛躍を生んだのはスケールだけである。GPT-1 → GPT-2 → GPT-3:同じ設計図を 3 つのスケールで基本設計は保ち、スケールだけを変えて何が起きるかを観察するGPT-1(2018)1.17 億パラメータBookCorpus 約 5GB事前学習+ファインチューニングは有効 — ただしタスクごとGPT-2(2019)15 億パラメータWebText 約 40GBファインチューニングなしで一部のタスクを解く(zero-shot)GPT-3(2020)1750 億パラメータCommonCrawl 等 約 570GB数例を示すだけで未知のタスクをこなす(Few-shot)×13×1173 世代を通じてアーキテクチャの変更はごくわずか——GPT-3 が sparse attention を部分的に導入した程度。質的な飛躍を生んだのはスケールだけである。
2 度の飛躍、設計図は 1 つ。

Few-shot学習:訓練後に起きること

ここで読者が抱きやすい疑問に答えます。

「Few-shotは訓練の一部なのか? それとも訓練の後に起きることなのか?」

答えは訓練の後です。Few-shotは推論時(ユーザーがモデルを使う時)のテクニックです。

GPT-3の訓練プロセスを整理すると:

  1. 訓練時:インターネットから集めた大量のテキストで「次の単語を予測する」だけを学ぶ。翻訳を教えたわけでも、コーディングを教えたわけでもない。目的は一つだけです。次の単語の予測精度を上げる
  2. 推論時(Few-shot):ユーザーがプロンプトに数例のサンプルを示す。モデルはそのパターンを文脈から読み取り、同じパターンで続きを生成する

GPT-3は翻訳を明示的に訓練されていません。しかし訓練データに英日の対訳テキストが含まれていたため、「次の単語を予測する」能力がスケールすることで、パターンを汲み取って正しく続ける力が創発しました。

コード生成も同じです。GitHubのコードが訓練データに含まれていたので、「関数の説明 → コード」というパターンを数例示すだけで、見たことのない関数を書けるようになりました。

Few-shot は訓練中ではなく訓練後に起きる2 つのパネル。訓練時、モデルの目的は「次の単語を予測する」の 1 つだけであり、それがすべてである。翻訳も、コーディングも、どのタスクも教えられていない。しかしコーパスには英日の対訳テキストと GitHub のコードが含まれていたため、予測精度がスケールするにつれてそれらの能力が創発した。推論時の Few-shot はこれとは別物である。ユーザーのプロンプトが Hello →こんにちは、Thank you →ありがとう という 2 つの訳例を示し、3 つ目の Good morning を未完のまま残すと、モデルはパターンを続けて「おはよう」を生成する。勾配は流れず、訓練ステップも起きず、重みも変化しない。パターンはコンテキストウィンドウから読み取られ、終わったあともモデル自体は何も変わっていない。Few-shot は訓練中ではなく訓練後に起きる訓練時次の単語を予測する目的はこれだけ翻訳は教えていないコーディングは教えていないどのタスクも教えていないしかしコーパスには英日の対訳テキストと GitHub のコードが含まれていた。だから予測精度がスケールするにつれ、それらの能力が創発した推論時(Few-shot)ユーザーのプロンプトEnglish: Hello → Japanese: こんにちはEnglish: Thank you → Japanese: ありがとうEnglish: Good morning → Japanese:おはよう生成ユーザーがパターンを示し、モデルがその続きを書く勾配なし、訓練ステップなし、重みの変化なしパターンはコンテキストウィンドウから読み取られる。終わったあともモデル自体は何も変わっていない。
示された例が重みに触れることはない。

なぜGPT-3で「ビッグバン」が起きたのか?

GPT-2でもZero-shotは部分的に動いていました。では、GPT-3で何が変わったのか?

答えは閾値の突破です。

多くのタスクで、モデルサイズと性能の関係はこう推移しました:

  • 1.25億~3.5億パラメータ:ランダムに近い性能
  • 13億~130億パラメータ:緩やかに改善
  • 1750億パラメータ:急激にジャンプ

これが**創発的能力(Emergent Abilities)**です。物理学の相転移(水が氷になる瞬間)のように、量的な変化がある閾値を超えると質的な変化を引き起こす。GPT-2はその閾値の手前にいて、GPT-3はその先にいました。

なぜ閾値が存在するのか? 訓練中、モデルは「次の単語を予測する」ために、テキストに含まれるあらゆるパターン(文法、論理、事実、タスク構造)を内部に符号化していきます。小さなモデルでは容量が足りず、個別パターンの断片しか学べない。しかしスケールが十分に大きくなると、パターン同士が組み合わさり、明示的に訓練していない能力として表面化します。これが創発の正体です。

GPT-3は新しいアーキテクチャで知性を設計したのではありません。同じ設計図を、閾値を超えるまでスケールさせた結果、設計されなかった知性が現れたのです。これが現在のLLM時代の出発点です。

創発的能力:量的な変化が質的な変化を引き起こすモデルサイズに対する性能の曲線を 3 つの帯に分けた図。パラメータ 1.25 億から 3.5 億までは性能がランダムに近く、曲線は平らである。13 億から 130 億までは緩やかに改善する。1750 億では急激にジャンプする。2 番目と 3 番目の帯の間に閾値を示す破線があり、GPT-2 はそのわずか手前に、GPT-3 は十分に先に置かれている。その横に、閾値が存在する理由が示される。水が相転移で氷になるのと同じように、小さなモデルの容量では個々のパターンの断片しか学べないが、スケールが十分になるとパターンが結合し、訓練していない能力として表面化する。GPT-2 と GPT-3 のアーキテクチャはほとんど変わっていない。創発的能力:量的な変化が質的な変化を引き起こす性能モデルサイズ(パラメータ数)閾値GPT-2GPT-31.25 億〜3.5 億ランダムに近い性能13 億〜130 億緩やかに改善1750 億急激なジャンプそもそもなぜ閾値があるのか相転移小さなモデルの容量では個々のパターンの断片しか学べないスケールが十分になるとパターンが結合し、訓練していない能力として表面化するGPT-2 は閾値のわずか手前、GPT-3 はその先にいた。両者のアーキテクチャはほとんど変わっていない。
GPT-2 は閾値の手前だった。違いはそれだけだった。

7. 賢くなった後の課題 — 微調整から整列へ、そしてスケールの先

GPT-3は驚くほど多才でしたが、使いにくかった。人種差別的な文章を生成したり、質問に答える代わりに無関係な文章を続けたり、嘘を自信満々に語ったりしました。「次の単語を予測する」能力と「人間に役立つ回答をする」能力は、同じではなかったのです。

ここから先の歴史は、3つの段階に分けられます。

微調整(Fine-tuning)の仕組み

GPT-1で登場した微調整を、もう少し詳しく見てみましょう。

事前学習済みモデルは、言語の一般的なパターンを学んでいますが、特定のタスク(感情分析、質問応答など)に最適化されていません。微調整は、この汎用モデルを特定の目的に「調律」するプロセスです。

仕組みはシンプルです:

  1. タスク用のデータを用意する:例えば「レビュー文 → ポジティブ/ネガティブ」のペアを数百〜数千件
  2. 事前学習済みの重みを出発点にする:ゼロから学習するのではなく、すでに言語を理解している重みから始める
  3. タスク用データで追加学習する:通常の訓練と同じ仕組み(順伝播→損失計算→逆伝播)だが、学習率を小さくし、少ないステップで済ませる

なぜ少量のデータで効くのか? 事前学習で文法・語彙・世界知識をすでに獲得しているからです。微調整は「英語が話せる人に、医療用語を教える」ようなもので、言語の基礎から教え直す必要はありません。

ファインチューニング:汎用モデルを 1 つの目的に調律する3 つのステップ。1 つ目はタスク用のデータを用意することである。レビュー文をポジティブかネガティブに対応づけるような、そのタスク専用のペアを数百から数千件そろえる。2 つ目はゼロからではなく事前学習済みの重みを出発点にすることである。その重みはすでに言語を、つまり文法・語彙・世界知識を理解しているからである。3 つ目はタスク用データで追加学習することである。順伝播、損失計算、逆伝播という通常の訓練とまったく同じ仕組みを使うが、学習率は小さく、ステップは少なくする。少量のデータで足りるのは、文法も語彙も世界知識も事前学習の時点ですでに手に入っているからである。ファインチューニングは英語が話せる人に医療用語を教えるようなもので、言語の基礎を教え直す必要はない。ファインチューニング:汎用モデルを 1 つの目的に調律する1タスク用のデータを用意するそのタスク専用のペア——例:レビュー文 → ポジティブ / ネガティブ数百〜数千件のペア2事前学習済みの重みを出発点にするゼロからではなく、すでに言語を理解している重みから始める文法・語彙・世界知識3タスク用データで追加学習する順伝播 → 損失計算 → 逆伝播、通常の訓練とまったく同じ仕組み学習率は小さく、ステップは少なく少量のデータで足りる理由:文法も語彙も世界知識も、事前学習の時点ですでに手に入っている。ファインチューニングは、英語が話せる人に医療用語を教えるようなもの。言語の基礎を教え直す必要はない。
すでに言語が話せる人に、医療用語を教えるだけ。

InstructGPT:人間のフィードバックで「整列」させる (2022)

GPT-3の問題は「賢いが、人間の意図に沿わない」ことでした。OpenAIはこれを解決するために、微調整の概念を発展させた RLHF(Reinforcement Learning from Human Feedback、人間のフィードバックによる強化学習) を開発しました。

RLHFは3段階のパイプラインです:

第1段階:教師あり微調整(SFT)

人間のアノテーター(約40人)が、プロンプトに対する「理想的な回答」を手書きで約13,000件作成しました。これで通常の微調整を行い、「質問されたら回答する」という基本的な振る舞いを教えます。

第2段階:報酬モデルの訓練

同じプロンプトに対してモデルが複数の回答を生成し、人間がそれらを「どちらが良いか」でランク付けします。このランキングデータから、「良い回答とは何か」を数値化する 報酬モデル(Reward Model) を訓練します。

第3段階:強化学習による最適化

元のモデルが回答を生成し、報酬モデルがスコアをつけ、そのスコアを使って元のモデルの重みを更新します。「人間が好む回答」を生成する方向にモデルが調整されていきます。

結果は衝撃的でした。13億パラメータのInstructGPTが、1750億パラメータの素のGPT-3より人間に好まれる回答を生成したのです。パラメータ数で130倍小さいモデルが、「整列」するだけで逆転しました。

RLHF:モデルを人間の意図に整列させる 3 段階3 つの段階。1 段階目は教師あり微調整である。約 40 人のアノテーターが約 13,000 件の理想的な回答を手書きし、それに対する通常の微調整が「質問されたら答える」という振る舞いを教える。2 段階目は報酬モデルの訓練である。同じプロンプトへの複数の回答を人間がランキングし、報酬モデルはそのランキングから良い回答とは何かを学ぶ。3 段階目は強化学習による最適化である。報酬モデルがモデルの回答を採点し、そのスコアが重みを更新して、人間が好む方向へモデルを動かす。結果として、13 億パラメータの整列済み InstructGPT の回答が、素の 1750 億パラメータの GPT-3 より人間に好まれた。パラメータ数は 130 分の 1 であり、より良い回答への道はモデルを大きくすることだけではないことを示している。RLHF:モデルを人間の意図に整列させる 3 段階1教師あり微調整(SFT)約 40 人のアノテーターが約 13,000 件の理想的な回答を手書き教えること:質問されたら答える2報酬モデルを訓練する同じプロンプトへの複数の回答を人間がランキングする学ぶこと:良い回答とは何か3強化学習で最適化する報酬モデルが回答を採点し、そのスコアが重みを更新する人間が好む方向へ動かす結果:人間は小さいほうのモデルの回答を好んだInstructGPT — 13 億、整列済みが上回ったGPT-3 — 1750 億、素のままパラメータ数は 130 分の 1。より良い回答への道は、モデルを大きくすることだけではない。
パラメータは 130 分の 1、それでも好まれた。

これは重要な教訓です:モデルを大きくすることだけが性能向上の道ではない。

微調整の現在地:いつ必要で、いつ不要か?

GPT-1の時代は、すべてのタスクに微調整が必須でした。GPT-3でFew-shotが使えるようになり、さらにInstructGPTでゼロショットでも指示に従えるようになった今、微調整の役割は変わりました。

微調整が不要なケース 微調整が必要なケース
典型例 メール作成、要約、一般的なQ&A 医療診断支援、法律文書レビュー、社内用語の理解
理由 汎用モデルのプロンプトで十分な品質 専門用語・特定フォーマット・コンプライアンス要件が厳密

ラベル付きデータは依然として重要です。ただし用途が変わりました。GPT-1時代は「タスクを教える」ために必要でしたが、現在は主に「モデルの振る舞いを整列させる」ために必要です。RLHFの人間によるランキングデータがその典型です。

また、LoRA(Low-Rank Adaptation)やQLoRAといった パラメータ効率的微調整(PEFT) の登場により、全パラメータを更新せずとも、わずかなパラメータの追加だけで微調整できるようになりました。微調整のコストは2020年代前半と比べて90%以上削減されています。

スケールの先へ:LLMは今どう進化しているか?

「パラメータ・データ・計算量を増やせば賢くなる」。スケール則はGPT-3の成功を説明しました。しかし2024年頃から、この戦略は壁に直面しています。

壁1:データの枯渇

インターネット上の高品質なテキストデータは有限です。2026年現在、人間が書いた高品質テキストはほぼ使い尽くされたと言われています。

壁2:コストの限界

より大きなモデルの事前学習には数億ドル規模の投資が必要で、収穫逓減が見え始めています。

NeurIPS 2024で、OpenAI共同創設者のイリヤ・サツキヴァーはこう宣言しました:

「私たちが知っている形の事前学習は終わりを迎える。2010年代はスケールの時代だった。今は驚きと発見の時代に戻った。」

事前学習が割に合わなくなった地点パラメータ・データ・計算量を増やすという、GPT-3 を説明したその戦略が、2 つの理由で 2024 年頃に壁に当たった。1 つ目の壁はデータの枯渇である。インターネット上の高品質なテキストは有限であり、2026 年現在、人間が書いた高品質テキストはほぼ使い尽くされたと言われている。2 つ目の壁はコストの限界である。より大きなモデルの事前学習には数億ドル規模の投資が必要で、収穫逓減が見え始めている。その下に、NeurIPS 2024 における OpenAI 共同創設者イリヤ・サツキヴァーの言葉が置かれる。私たちが知っている形の事前学習は終わりを迎える、2010 年代はスケールの時代だった、今は驚きと発見の時代に戻った、というものである。事前学習が割に合わなくなった地点パラメータ・データ・計算量を増やす——GPT-3 を説明したその戦略が、2024 年頃に壁に当たった壁 1:データの枯渇インターネット上の高品質なテキストは有限。2026 年現在、人間が書いた高品質テキストはほぼ使い尽くされたと言われている。壁 2:コストの限界より大きなモデルの事前学習には数億ドル規模の投資が必要で、収穫逓減が見え始めている。「私たちが知っている形の事前学習は終わりを迎える。2010 年代はスケールの時代だった。今は驚きと発見の時代に戻った。」— イリヤ・サツキヴァー(OpenAI 共同創設者)、NeurIPS 2024
野心が尽きるより先に、地図が尽きた。

では、スケール以外にどんな進化の軸があるのか? 現在の主要なアプローチを整理します。

軸1:事後学習(Post-training)の深化

InstructGPTで始まったRLHFは、現在さらに洗練されています。事前学習(大量テキストで基礎能力を獲得)の後に行う追加学習、すなわち事後学習が、モデルの能力を引き出す主戦場になりました。

  • RLHF / RLAIF:人間またはAIのフィードバックで整列(Anthropic、OpenAIが継続的に改良)
  • DPO(Direct Preference Optimization):報酬モデルを介さず、人間の好みデータから直接最適化する効率的な手法
事後学習:モデルの能力を引き出す主戦場事前学習は大量のテキストから基礎的な能力を獲得する。事後学習はその後に行う追加学習であり、いまではモデルの能力を引き出す主戦場になっている。2 つの手法が比較される。RLHF と RLAIF は人間または AI のフィードバックでモデルを整列させる。回答が報酬モデルに渡り、そのスコアが重みを更新するため、ループの中に報酬モデルがいる。これは Anthropic と OpenAI が継続的に改良している。DPO すなわち直接選好最適化は、選好ペアから重みの更新へ直行し、ループの中に報酬モデルをまったく置かない。訓練・運用するモデルが 1 つ減り、効率の良さはそこから来ている。事後学習:モデルの能力を引き出す主戦場事前学習 — 大量のテキストから基礎的な能力を獲得する事後学習 — その後に行う追加学習。いまはここが主戦場RLHF / RLAIF人間または AI のフィードバックで整列させる回答報酬モデル重みを更新Anthropic と OpenAI が継続的に改良しているループの中に報酬モデルがいるDPO — 直接選好最適化選好データから直接最適化する選好ペア重みを更新報酬モデルなし訓練・運用するモデルが 1 つ減る効率の良さはここから来ている
同じ結果を、ループの中のモデル 1 つ少なくで。

軸2:推論時計算(Test-time Compute)

訓練を大きくする代わりに、推論時にもっと考えさせるというアプローチです。

OpenAIのo1/o3シリーズやAnthropicのClaude(拡張思考モード)が代表例です。モデルが回答する前に「思考の連鎖(Chain of Thought)」を生成し、段階的に推論する。訓練時の計算量を増やす代わりに、推論時の計算量を増やすことで性能を上げます。

スケール則が「訓練にどれだけ計算を投入するか」の法則だったのに対し、これは「推論にどれだけ計算を投入するか」という新しい軸です。

計算量を注ぎ込める 2 つの場所計算量を注ぎ込める 2 つの場所を示す 2 つのパネル。従来の軸は訓練時の計算量である。データも GPU も増やしてより大きなモデルを作り、それはユーザーが何かを尋ねる前にすべて使われる。スケール則が記述したのはこの軸であり、性能はモデルの大きさから来る。新しい軸は推論時の計算量である。標準的なモデルが 1 問あたり長く考え、問題を分解し、段階的に推論し、それから初めて答える。OpenAI の o1/o3 シリーズや Anthropic の Claude の拡張思考モードがこの方式であり、性能は長く考えることから来る。スケール則が訓練にどれだけ計算量を投入するかを問うたのに対し、こちらは推論にどれだけ投入するかを問う。計算量を注ぎ込める 2 つの場所従来の軸:訓練時の計算量データも GPU も増やすより大きなモデルユーザーが何かを尋ねる前にすべて使われるスケール則が記述したのはこの軸だった性能はモデルの大きさから来る新しい軸:推論時の計算量標準的なモデル1 問あたり長く考える問題を分解する段階的に推論するそれから答えるOpenAI o1/o3、Anthropic Claude(拡張思考モード)性能は長く考えることから来るスケール則が「訓練にどれだけ計算量を投入するか」を問うたのに対し、こちらは「推論にどれだけ投入するか」を問う。
計算量は減っていない。場所が移っただけだ。

軸3:合成データと蒸留

人間のデータが枯渇するなら、AIにデータを作らせる

  • 蒸留(Distillation):大きなモデル(教師)が生成した回答で、小さなモデル(生徒)を訓練する。DeepSeek-R1の蒸留版やLlamaの派生モデルがこの手法で作られています
  • Self-Play:モデルが自分自身と対話し、問題を出し合い、解き合うことで能力を向上させる
人間のデータが尽きたら、AI に作らせる人間のデータが尽きたあとに訓練データを作る 2 つの方法。蒸留では、教師役の大きなモデルが回答を生成し、生徒役の小さなモデルがそれで訓練される。DeepSeek-R1 の蒸留版や Llama の派生モデルはこうして作られている。Self-Play では、モデルの 2 つのインスタンスが互いに問題を出し合い解き合うため、新しい人間のデータがまったくなくても能力が上がる。その下に、2026 年の典型的なワークフローとして両者が組み合わさったパイプラインが示される。人間が 200 件のシードサンプルを書き、フロンティアモデルがそれを数万件に拡張し、品質フィルタをかけ、その結果で小さなモデルを訓練する。人間のデータが尽きたら、AI に作らせる蒸留大きなモデル(教師)小さなモデル(生徒)教師が生成した回答で生徒を訓練するDeepSeek-R1 の蒸留版、Llama の派生モデルSelf-Playモデルのインスタンス Aモデルのインスタンス B互いに問題を出し合い、解き合う新しい人間のデータなしで能力が上がる2026 年の典型的なワークフロー人間が 200 件のシードサンプルを書くフロンティアモデルが数万件に拡張する品質フィルタをかける小さなモデルを訓練する
コーパスは有限。それを作るモデルは有限ではない。

2026年の典型的なワークフローでは、200件の種データを人間が書き、それをフロンティアモデルで数万件に拡張し、品質フィルタをかけて小型モデルを訓練します。

まとめ:3つの時代

時代 主な戦略 代表例
スケールの時代 (〜2023) パラメータ・データ・計算量を増やす GPT-3, PaLM, LLaMA
整列の時代 (2022〜) 事後学習で人間の意図に合わせる InstructGPT, Claude, ChatGPT
効率の時代 (2024〜) 推論時計算・合成データ・蒸留で賢くする o1/o3, DeepSeek-R1, Claude拡張思考

これらは互いに排他的ではなく、現在のフロンティアモデルは3つすべてを組み合わせています。しかし重心は明確に移動しました。「大きくすれば賢くなる」から「賢く使えば小さくても強い」へ。

まとめ

LLMは誰もLLMを目指していなかった時代に、別々の問題への解答として積み重なってきた概念の集積です。

LLM 誕生までの 80 年 — 意図せぬ接続の系譜1936 年から 2022 年までの 13 項目の年表。Turing が計算可能性を定義し、Shannon がエントロピーをもたらし、Rosenblatt がパーセプトロンを作る。1969 年に Minsky と Papert が単層の限界を証明し、AI の冬が始まる。1986 年のバックプロパゲーションで深い層が訓練可能になり、1997 年の LSTM が時間方向の勾配を保ち、2012 年の AlexNet が GPU で速度の壁を破り、2013 年の Word2Vec が意味を幾何学に変え、2014 年の Attention が任意のトークンへの直接参照を可能にし、2015 年の ResNet が 152 層を訓練する。2017 年の Transformer が RNN を捨てて並列 Self-Attention に移り、2020 年の GPT-3 が Few-shot 学習が現れるまで拡大し、2022 年の InstructGPT が人間の意図に整列させる。LLM 誕生までの 80 年 — 意図せぬ接続の系譜1936Turing:計算可能性の定義数学の限界を証明し、その過程で万能チューリングマシンの概念を発明1948Shannon:情報理論通信ノイズの削減から生まれたエントロピーが、訓練損失関数と Temperature 制御になる1958Rosenblatt:パーセプトロン学習する機械の実装。同時に単層の限界が露呈する1969Minsky & Papert:XOR 問題(AI の冬)単層の数学的限界を証明。「多層なら解けるが、訓練方法は不明」1986Rumelhart, Hinton, Williams:バックプロパゲーション多層 NN の訓練方法を確立し、誤差逆伝播で深い層も学習可能に1997Hochreiter & Schmidhuber:LSTMセル状態という高速道路で、時間方向の勾配消失を解決2012Krizhevsky et al.:AlexNet(GPU 革命)画像認識の精度向上と、GPU 並列計算による訓練速度の壁の突破2013Mikolov et al.:Word2Vecより良い単語表現が、意味を幾何学に変える2014Bahdanau et al.:Attention翻訳の長文精度が改善。任意のトークンへの直接参照が可能に2015He et al.:ResNet(残差接続)ショートカットで勾配消失を解決し、152 層の訓練を実現2017Vaswani et al.:TransformerRNN を廃止し、Self-Attention で全トークンを並列処理2020Brown et al.:GPT-3スケール則に従って拡大すると、Few-shot 学習が求めずして現れる2022Ouyang et al.:InstructGPT(RLHF)人間の意図に整列させると、小さいモデルが整列だけで大モデルを逆転
どれも別々の問題への答えでした。この地点を狙っていたものは 1 つもありません。
人物 元々の目的 解こうとした問題 意図せぬ副産物
Turing (1936) 数学の限界の証明 アルゴリズムで解けない問題は存在するか? コンピュータという概念の誕生
Shannon (1948) 通信ノイズの削減 情報をどう正確に送るか? 情報エントロピー → LLMの損失関数
Rosenblatt (1958) 学習する機械の実装 機械は学べるか? パーセプトロン(最初のニューラルネット)
Minsky & Papert (1969) NNの数学的解析 パーセプトロンの能力と限界は? 限界の証明 → 多層ネットワークへの要件定義
Rumelhart et al. (1986) 多層NNの訓練 深いネットワークをどう学習させるか? バックプロパゲーション
Krizhevsky et al. (2012) 画像認識の精度向上 計算速度が足りない GPU活用 → 訓練速度の壁を突破
He et al. (2015) さらに深いネットワーク 層を深くすると勾配が消失する 残差接続(ResNet) → 深さの壁を突破
Mikolov et al. (2013) より良い単語表現 テキストをどう数値化するか? 意味の幾何学(Embedding)
Hochreiter & Schmidhuber (1997) RNNの長期記憶 時間方向の勾配消失をどう解決するか? LSTM → 時間方向のResNet
Bahdanau et al. (2014) 翻訳の長文精度 固定長ベクトルの情報損失を防ぐには? Attentionメカニズム
Vaswani et al. (2017) 翻訳の高速化 RNNの逐次処理の遅さを解決するには? Transformer(並列化可能なアーキテクチャ)
Radford et al. (2018) ラベル付きデータ不足の解消 少量のラベルデータで多様なNLPタスクを解くには? GPT-1:事前学習+微調整パラダイム
Radford et al. (2019) 汎用言語モデルの探求 微調整なしでタスクを解けるか? GPT-2:Zero-shot能力の萌芽
Kaplan et al. (2020) 計算コストの最適化 スケールと性能の関係は? スケール則 → 大規模訓練の根拠
Brown et al. (2020) 大規模モデルの能力調査 スケールアップすると何が起きる? GPT-3・Few-shot学習の創発
Ouyang et al. (2022) モデルの安全性と有用性の改善 賢いモデルを人間の意図に沿わせるには? RLHF → 小さくても「整列」で逆転

それぞれの研究者は自分の目の前の問題だけを見ていた。設計図なしに、80年余りかけて部品が揃いました。

今この瞬間も、誰かが全く別の問題に行き詰まり、その壁を越えるために書いている論文が、10年後のAIの部品になっているかもしれません。

この記事をシェア