対話形式で学ぶ大規模言語モデルの基礎
この記事は、orangeがGemini(Google AI)に「LLMって結局どう動いてるの?」と質問していった対話をまとめたものです。
専門用語を噛み砕きながら、ワードベクトルからRLHFまで一気に駆け抜けます。エンジニアでなくても読める内容を目指しつつ、詳しく知りたい人向けの補足も随所に入れています。
LLM(大規模言語モデル)の「出発点」としてワードベクトルに着目するのは、非常に鋭い視点です!
ワードベクトル(単語埋め込み)は、「コンピュータに『言葉の意味』を数学的に理解させるための翻訳技術」と言えます。これがないと、現在のAIは成立しません。
コンピュータは計算機なので、「リンゴ」や「愛」といった文字そのものを理解することはできません。コンピュータが理解できるのは「数字」だけです。
そこで、言葉を「数字の列(ベクトル)」に変換します。
[0.52, −1.23, 0.88, ...]
このように、ひとつの単語を数十〜数千個の数字の並びで表現したものが「ワードベクトル」です。
ただの数字のID(例:リンゴ=1, ミカン=2)ではなく、ベクトル(座標)にすることで、「言葉の意味の近さ」を「距離」として計算できるようになるからです。
ワードベクトルが画期的なのは、言葉で足し算・引き算ができる点です。
ベクトル空間(言葉の地図)の中で、「王様」という地点から「男性」成分を引き、「女性」成分を足すと、不思議なことに座標が「女王」の地点にピタリと重なるのです。
では、どうやって「王様」を [0.52,...] という具体的な数字にするのでしょうか? 人間が一つ一つ数値を決めているわけではありません。AIが大量の文章を読んで自動的に決定します。
その基本的な考え方は、「分布仮説」という言語学のルールに基づいています。
AIに大量のテキスト(Wikipedia、ニュース、小説など)を読ませ、ひたすら「穴埋め問題」を解かせます。
AIへの学習プロセス:
もし、AIが適当な数字を持っていて「車」と予測したら、「違うよ、正解は猫だよ」と叱られます。するとAIは、「猫」のベクトル(数値)を、少しだけ「かわいい」や「こたつ」のベクトルに近づけます。
これを何億回、何兆回と繰り返すと、最終的に以下のような「意味の地図」が出来上がります。
ワードベクトルは「単語の意味」を捉えることに成功しましたが、これだけでは今のChatGPTのような対話はできません。
ここが出発点となり、「単語」の理解から「文脈」の理解へとAIは進化していきました。
ワードベクトルの中身は、ざっくり言うと「巨大な乱数表(エクセルのような表)」です。
専門用語では「埋め込み行列(Embedding Matrix)」と呼びます。
頭の中で巨大なエクセル表を思い浮かべてください。
| ID | 単語 (Token) | 次元1 | 次元2 | 次元3 | ... | 次元4096 |
|---|---|---|---|---|---|---|
| 0 | <unk> | 0.012 | -0.982 | 0.332 | ... | 0.115 |
| 1 | の | 0.552 | 0.123 | -0.005 | ... | -1.221 |
| 2 | 猫 | 0.882 | -0.551 | 0.993 | ... | 0.441 |
| ... | ... | ... | ... | ... | ... | ... |
| 128000 | 宇宙 | 0.119 | -0.332 | 1.552 | ... | -0.991 |
コンピュータに「猫」と入力されると、AIはこの表の「2番」の行を見に行き、そこに書かれている横一列の数字(ベクトル)を引っ張り出してきます。これが「ワードベクトル」の正体です。
ここが面白いところで、昔と今で考え方が逆転しています。
| 時代 | 辞書サイズ | 備考 |
|---|---|---|
| 昔(Word2Vecなど) | 約300万語 | 「走る」「走ります」「走れば」を全部別の単語として登録 |
| 今(Llama 3) | 128,256 トークン | Subword技術で効率化 |
| 今(GPT-4) | 約 100,256 トークン | Subword技術で効率化 |
なぜ減った?: 「Subword(サブワード)」という技術を使うようになったからです。「Unhappiness」を「Un」+「happi」+「ness」のように部品に分解して覚えるため、少ない辞書サイズで無限の言葉に対応できるようになりました。
次元数は「意味の解像度」だと思ってください。数字が多ければ多いほど、微妙なニュアンスを区別できます。
| モデル | 次元数 | 特徴 |
|---|---|---|
| Word2Vec(昔) | 300次元 | 画期的だが、同音異義語の区別は困難 |
| Llama 3 (8B) | 4,096次元 | 高度な意味表現が可能 |
| GPT-3 (175B) | 12,288次元 | 皮肉や文脈依存の意味も表現 |
実際にこの「表」がどれくらいのデータサイズになるか計算してみましょう(Llama 3 8Bの場合)。
80億パラメータ(8B)あるモデル全体の中で、最初の「言葉を数字に変換する辞書」だけで1GBも容量を使っているわけです。ここがLLMの知識の土台となります。
昔のAIにとって、辞書にない言葉は「未知の単語(Unknown)」としてエラー扱い(または <unk> という記号に変換)され、そこで思考停止していました。
しかし、今のLLMには「未知の単語」は実質的に存在しません。そのカラクリは、「言葉のレゴブロック化(サブワード)」という手法にあります。
LLMは、辞書にない難しい単語に出会ったとき、諦めるのではなく「知っている単位まで分解」します。
これが、辞書サイズが小さくても(約10万語)、世の中のあらゆる言葉に対応できる理由です。
「食べ歩き」が辞書にない場合:
それぞれの意味(ベクトル)は持っているので、「食べて、歩くことだな」と意味を合成できます。
「Unfriendliness(不愛想)」が辞書にない場合:
接頭辞や接尾辞レベルまで分解すれば、初めて見る単語でも「友好的じゃないことだな」と推測できます。
「XyZ123」のような無意味な文字列の場合:
最悪の場合、アルファベット1文字(バイト単位)まで分解します。文字単位のベクトルは必ず持っているので、エラーにならずに処理できます。
この「分解アプローチ」のおかげで、LLMは以下のことができるようになりました。
print_hello_world のような変数名も print hello world に分解して意味を理解します。こうして、どんなテキストが来ても、とりあえずすべて「ベクトル(数字)」に変換して取り込む準備が整いました。
ここがLLM(大規模言語モデル)の一番の山場であり、最重要ポイントです。
Attention(アテンション)機構。一言でいうと、これは単語同士の「会議」です。
これまで作った「ワードベクトル」は、まだ「辞書に載っている固定の意味」しか持っていません。Attentionは、これらを「文脈に合わせた意味」に変化させる魔法です。
「Bank(銀行)」という単語は、どんな文の中でも常に同じベクトル(数値)でした。
AIの悩み:「どっちのBankかわからない…数値が一緒だから区別できない!」
Attentionを使うと、文脈によってベクトルの中身が書き換わります。
イメージしてください。真っ暗な部屋に、単語たちが一列に並んでいます。
「彼」のターン:
情報の吸収(ミキシング):
「彼」は、「好きだ」という単語から「感情」や「動作」という意味(ベクトル成分)を少し吸い取ります。
すると、「彼」というベクトルは、ただの「男性」という意味から、「猫が好きな男性」という文脈を含んだベクトルに進化します。
これを、すべての単語が同時に、お互いに対して行います。
この「スポットライト」の計算を、数学(行列計算)では「Q, K, V(クエリ・キー・バリュー)」という3つの役割で行います。
| 役割 | 英語 | 説明 |
|---|---|---|
| 探す人 | Query (Q) | 「私の意味を補完してくれる情報はどこ?」と問い合わせる係 |
| 目印 | Key (K) | 「私はこういう単語ですよ」と看板を掲げている係 |
| 中身 | Value (V) | その単語が持っている実際の意味内容 |
処理の流れ:
この数式は、「関連度(QK)を計算して、その重み分だけ中身(V)を混ぜ合わせる」という意味です。
Attentionが最も威力を発揮するのは、代名詞(それ、彼、これ)の解釈です。
人間なら、「それ=動物」だとわかりますよね? でも、文の構造だけだと「それ=道路」の可能性もあります。
LLM(Attention)の頭の中:
このAttentionを何層も(例えば96層とか)積み重ねることで、AIは「単語の意味」だけでなく、「文章全体の意図」や「行間」まで理解できるようになったのです。
では、最強のAIアーキテクチャである「Transformer(トランスフォーマー)」の全体構造について解説します。
これまで解説した「ワードベクトル」や「Attention」は、あくまで部品です。これらをどう組み立てれば、ChatGPTのような巨大な知能になるのか?
その姿は、「超高層ビル」に例えると非常に分かりやすくなります。
最新のLLM(例えばGPT-4クラス)は、同じ構造の「ブロック(層)」を何十回も積み重ねた構造をしています。
イメージしてください。ここには、言葉を処理する専門家たちが働く「96階建てのビル」があります。
| 階層 | 役割 |
|---|---|
| 1階(入力) | 「猫」などの単語が入ってきます |
| 低層階 | 文法や、単語同士の単純な関係(「猫」は主語だな、など)を処理 |
| 中層階 | もう少し深い意味(「猫」と「かわいい」の関係など)を理解 |
| 高層階 | 文脈、論理、皮肉、意図といった高度な概念を処理 |
| 屋上(出力) | 最終的に「次にくる単語は『丸くなる』だ!」と確率を出します |
昔のAIは数階建てでしたが、今のLLMは層を深く(Deepに)することで、人間のような深い思考を可能にしています。これが「ディープラーニング」と呼ばれる所以です。
では、このビルの「1つのフロア」の中では何が行われているのでしょうか? どの階も基本的には同じ間取りで、大きく2つの部屋(機能)があります。
これを96回(96層)繰り返すことで、情報はどんどん洗練されていきます。
実は、2017年に発表されたオリジナルのTransformerには、2つの塔がありました。
| 構成要素 | 役割 | 使用例 |
|---|---|---|
| Encoder(エンコーダー) | 文章を「読む・理解する」専門の塔 | BERT |
| Decoder(デコーダー) | 文章を「書く・生成する」専門の塔 | GPT |
ChatGPTなどのGPTシリーズは、このうち「Decoder(書く塔)」だけを巨大化させたモデルです。「ひたすら次の単語を予測して書き続ける」ことに特化させた結果、逆に「書くためには深く理解しないといけない」という進化を遂げ、理解力も手に入れました。
Transformerには一つだけ弱点があります。それは、「一度に文章全体を見るため、順番がわからない」ことです。
以下の2つの文は、含まれる単語のセットは同じですが意味が全く違います:
Attention機能だけだと、この2つの区別がつきにくくなります。そこで、データの入り口(1階)で、各単語に「番号札(Positional Encoding)」を貼り付けます。
この番号札があるおかげで、LLMは語順を理解できるのです。
LLM(Transformer)の構造を一言で言うなら:
「単語の位置情報をつけたベクトルを、『文脈理解(Attention)』と『知識処理(FFN)』のセットに何十回も通して、徐々に意味を深くしていく巨大な多層ビル」
いよいよ、「事前学習(Pre-training)」の解説です。
ビル(Transformer)を建てただけでは、中のAIはまだ「あー」とか「うー」しか言えない赤ちゃんの状態です。ここに、インターネット上のあらゆる知識を詰め込むプロセスが事前学習です。
これは、人間が何年もかけて学校に通うプロセスを、数ヶ月で一気に終わらせるような壮絶な工程です。
AIは、人間のように教科書を読んで「ふむふむ、1192年に鎌倉幕府ができたのか」と覚えるわけではありません。
AIがやることはたった一つ、「次の単語当てゲーム」です。
これを、Wikipedia、ニュース記事、ブログ、論文、プログラムコードなど、数兆単語(Token)にわたって繰り返します。
ここが面白い点ですが、AIは知識を「事実」として暗記しているわけではありません。「確率的な繋がり」として圧縮して覚えています。
結果的に、歴史も数学もプログラミングも、すべて「単語の確率パズル」として習得してしまいます。このプロセスは、インターネット全体の情報を、巨大な関数(モデル)の中に「圧縮」しているとも言えます。
この「事前学習」は、とてつもない計算量が必要です。
| 項目 | 規模 |
|---|---|
| GPU(計算機) | NVIDIAの最高級GPU(H100など)を数千枚〜数万枚使用 |
| 期間 | 数ヶ月間、24時間フル稼働 |
| コスト | 電気代と機材費で、一回の学習に数十億円〜百億円以上 |
これが、GoogleやOpenAIなどの「ビッグ・テック」しか高性能な基盤モデル(Foundation Model)を作れない理由です。
こうして数ヶ月の特訓を経て完成したAIを「Base Model(ベースモデル)」と呼びます。(例:GPT-4 Base, Llama 3 Baseなど)
しかし、実はこの時点では、AIはまだ「チャット(会話)」ができません。ただの「続きを書くマシーン」だからです。
人間: 「おいしいカレーの作り方を教えて」
Base Model: 「...そして、おいしい肉じゃがの作り方はこちら。」
(解説)AIは「質問に答える」という使命を知りません。ネット上の「レシピ記事の羅列」を学習しているので、「カレーのレシピの次には、他の料理のレシピが続くことが多い」という確率に従って、勝手に続きを書いてしまうのです。
いい質問ですね!そこが人間の直感と、AI(ニューラルネットワーク)の仕組みが決定的に違うところです。
結論から言うと、確率は「どこにも書いてありません」。そして、膨大な組み合わせの確率表も「準備していません」。
もし「全ての組み合わせの確率表」を作ろうとしたら、宇宙にある原子の数よりも多くの紙が必要になり、物理的に不可能です。
ではどうしているのか? 「保存している」のではなく、「その場で毎回計算している(算出している)」のです。
AIの中身は、巨大な「対応表(データベース)」だと思われがちですが、実際は巨大な「計算式(関数)」です。
かけ算の答えを全部メモしておく方法。
「2×3=6」「2×4=8」……「987×654=…」
これだと、桁が増えると無限にメモが必要になりますよね?
「かけ算のやり方(筆算のルール)」だけを覚える方法。
これなら、「12345×67890」という見たことのない問題が来ても、その場で計算して答えを出せます。
LLMもこれと同じです。「この単語の並びが来たら、次はこれ」というリストを持っているのではなく、「今までの文脈を入力すると、次の単語の確率が出力される」という超複雑な計算式(パラメータの塊)を持っています。
では、どうやって計算結果が「確率」になるのでしょうか? LLMの最後の最後、96階建てのビルの「屋上」で行われている処理を見てみましょう。
AIの辞書に単語が5万個あるとします。
| 単語 | スコア |
|---|---|
| 東京 | 15.2 |
| 大阪 | 8.4 |
| バナナ | -5.3 |
| 空 | 0.1 |
| ...(残り49,996個) | ... |
| 単語 | 確率 |
|---|---|
| 東京 | 95.5% |
| 大阪 | 3.2% |
| バナナ | 0.00001% |
| ... | ... |
こうして、その瞬間に計算された5万個の確率の中から、サイコロを振って(あるいは一番高いものを選んで)次の単語を決定します。
重要なのは、LLMは1トークンずつしか生成できないということです。「日本の首都は」と入力すると、まず「東京」が出力され、次に「です」が出力され…という具合に、1つずつ順番に出てきます。
そして、新しいトークンが生成されるたびに、Attention機構が全体に対して再計算されます。つまり:
このように、1単語増えるごとにAttentionが「今までの全体」を見直して、次の1単語を決めています。長い文章を書くときも、毎回この計算を繰り返しているのです。
「確率表」を持っていないからこそ、LLMは柔軟なんです。
もし確率表方式だったら、「昔々、あるところに、ピンク色の象とダンスが大好きなおじいさんがいました」という文章が来た瞬間、「そんな例文はリストにない!」と停止してしまいます。
しかしLLMは計算式なので:
その通りです!非常に鋭いですね。AIが行っている計算の正体は、まさに「パラメータ(数字)の掛け算と足し算」の嵐です。
ただ、一つだけ修正するとすれば、「ワード(トークン)が持つパラメータ」だけではなく、「モデル(脳みそ)が持つパラメータ」との掛け算がメインになります。
計算に使われる「数字」は、大きく2箇所に保管されています。
| 保管場所 | 説明 | 役割 |
|---|---|---|
| ワードが持つパラメータ(Embedding) | 最初に話した「辞書」の部分。「猫」という単語は、固有の数字の列(ベクトル)を持っている。 | 食材(インプット) |
| モデルが持つパラメータ(Weights/重み) ← ここが圧倒的に多い! |
96階建てのビルの「壁」や「機械」に埋め込まれている数字。単語に関係なく、固定された巨大な数字の表(行列)。 | 調理器具(プロセッサー) |
LLMの中では、次のような「掛け算」が何百億回も行われています。
この「モデルの行列」には、事前学習で覚えた「文脈の読み方」や「知識」が数字として詰まっています。
そして、質問にあった「次の単語の確率」を出す最後の瞬間も、やはり「ワードのパラメータとの掛け算」で決まります。
96階まで加工され終わった「文脈ベクトル(例:こたつ猫)」に対して、辞書にある全単語(5万語)のパラメータ(Embedding)を一斉に掛け算(内積)します。
この「掛け算の結果(スコア)」が大きい単語ほど、確率が高いと判定されるのです。
ユーザーさんの直感通り、すべては「パラメータの乗算」で導かれます。
この「足し算と掛け算」を1秒間に何千兆回もできる計算機(GPU)があるからこそ、今のAIは喋ることができるのです。
「罰を与える」「褒める」というのは、比喩表現としては分かりやすいですが、エンジニア視点で見ると、もっとドライで数学的な「引き算」のことです。
どこに、どうやって与えるのか。その現場は、さきほどの「96階建てのビル(モデル)」全体と、そこに住む数千億個のパラメータ(数字)です。
専門用語ではこれを「誤差逆伝播法(バックプロパゲーション)」と呼びます。
まず、AIが答えを間違えたとき、システムは「間違いの大きさ(距離)」を計算します。これを「損失(Loss)」と呼びます。
このとき、ベクトルAとBがどれくらいズレているかを計算します。「正解から 0.5 ズレているぞ!」というこの数値(0.5)が、いわゆる「お説教の強さ」になります。
罰を受ける対象は、モデルの中にある全てのパラメータ(行列の中の数字)です。
ただし、「連帯責任」ではありません。「誰が戦犯か?」を厳密に特定します。
こうして、屋上から1階まで、「間違いの原因を作ったパラメータ」を特定しながら、責任(誤差)を分配していきます。これが「逆伝播(Back Propagation)」と呼ばれる理由です。
ここが一番のポイントです。「罰」とは具体的に「パラメータの数値を書き換えること」です。
もし、あるパラメータ w が「3.5」という数字を持っていて、それが原因で予測が大きくなりすぎたなら、「数字を少し減らせ」という命令が下ります。
このように、数千億個あるパラメータのひとつひとつに対して、「お前は上げろ」「お前は下げろ」と微調整を行います。これが「罰を与える」の正体です。
この「次単語予測」の段階における「褒める」とは、「罰を与えない(修正しない)」ことです。
これを何兆回も繰り返すことで、パラメータの数字たちは「どんな入力が来ても、正解に近い確率を出せる完璧な数字の組み合わせ」へと徐々に近づいていくのです。
かしこまりました。ここまでの冒険は、「ただの記号(文字)」を「賢い知能(AI)」に変えるまでの旅でした。
まずは、ここまでのあらすじを、専門用語をなるべく使わずに「自然な物語」としてまとめます。
コンピュータは言葉が分からないので、すべての単語を「数字の列(座標)」に変換しました。これにより、「王様」と「王子」は地図上で近くにいる、「猫」から「かわいさ」を引くと別の意味になる、といった「意味の計算」ができるようになりました。
単語たちは、ただ並んでいるだけではありません。「彼は」という単語が、「好きだ」という単語にスポットライトを当てて意味を吸収するように、単語同士がお互いに影響し合って「文脈」を作ります。これを何十回も繰り返すことで、AIは深い意味を理解します。
AIは知識を「辞書」として持っているのではなく、巨大な「計算式」として持っています。入力された数字に対して、何千億回の掛け算と足し算を行うことで、その場で答え(確率)をひねり出します。
この計算式を完成させるために、AIはインターネット上の文章を読みまくり、ひたすら「次の単語当てクイズ」をやらされました。間違えるたびに、脳内の数字(パラメータ)を微調整され続け、最終的に「どんな文章でも続きが書ける物知りなAI(ベースモデル)」が完成しました。
さて、ここで完成した「ベースモデル」には、致命的な欠点があります。それは、「空気が読めない」ことです。
ユーザー:「風邪の治し方を教えて」
ベースモデル:「……という質問はよくある。また、骨折の治し方は……」
(ネット記事の続きを書いてしまう)
これでは使い物になりません。そこで行うのが「ファインチューニング(微調整)」です。ここには2つの段階があります。
まずは、「質問されたら答えるんだよ」という対話の形式を教え込みます。
ここが現代AIの真骨頂です。「Reinforcement Learning from Human Feedback(人間のフィードバックによる強化学習)」、略してRLHFです。
さきほど「間違えたら罰を与える」という話をしましたが、ここでは「人間が採点官」になります。
こうして、
その結果、あなたの質問に対して自然な日本語で、かつ役に立つように答えるAIが完成したのです。
🎉 これで、LLMの仕組みについての解説は完了です! 🎉