ChatGPTはなぜ確率的に次の単語を出力するだけで頭の良い出力ができるのか説明できなかったので勉強した。
2026年05月30日
こんにちは!
エンジニアの中田裕貴です。
タイトルにもある通り、ChatGPTはなぜ確率的に次の単語を出力するだけで頭の良い出力ができるのか説明ができなかったので勉強してみました。
その中でも『作ってわかる大規模言語モデルの仕組み』を読んでみたので、それについてご紹介します。
📕 作ってわかる大規模言語モデルの仕組み
https://www.amazon.co.jp/%E4%BD%9C%E3%81%A3%E3%81%A6%E3%82%8F%E3%81%8B%E3%82%8B%E5%A4%A7%E8%A6%8F%E6%A8%A1%E8%A8%80%E8%AA%9E%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF-%E4%BA%95%E4%B8%8A%E9%A1%A7%E5%9F%BA/dp/4296205250
🔖 目次
1. 作ってわかる大規模言語モデルの仕組み』を読んだ理由
2. 「確率で次の単語を出してるだけ」って説明できますか?
2. 「確率で次の単語を出してるだけ」って説明できますか?
3. 確率的に出力するって、具体的にはどういう計算をしてるの?
4. じゃあなぜ質問の意図や文脈がわかるの?アテンションの話
5. よく聞くQ・K・Vって何者? 実際にどう動いているのか知りたかった
6. self-attentionがある時とない時では何が変わるか?マルチヘッドにすると何が良いか?
7. nanoGPTだけだと賢くならないのはなぜ?
8. 最終的にどのように次の単語予測が確率分布に変換されているのか?どのように次の単語は選ばれるのか?
9. Temperatureは何をしているのか?
10. この本を読んで変わった、LLMへの解像度
まとめ:確率的に選ぶ前に、文脈表現を作っている
4. じゃあなぜ質問の意図や文脈がわかるの?アテンションの話
5. よく聞くQ・K・Vって何者? 実際にどう動いているのか知りたかった
6. self-attentionがある時とない時では何が変わるか?マルチヘッドにすると何が良いか?
7. nanoGPTだけだと賢くならないのはなぜ?
8. 最終的にどのように次の単語予測が確率分布に変換されているのか?どのように次の単語は選ばれるのか?
9. Temperatureは何をしているのか?
10. この本を読んで変わった、LLMへの解像度
まとめ:確率的に選ぶ前に、文脈表現を作っている
1. 『作ってわかる大規模言語モデルの仕組み』を読んだ理由
本書をよむまでは、Attention Is All You Need[1] の論文を読んだり、Transformer Explainer[2] を眺めてみたり、松尾研究所が開催していた大規模言語モデルの講座[3]を受講してみたりしてましたが、各部分で何をしているかは理解できるものの、なかなかTransformer全ての数式をアーキテクチャ全体で一貫して理解するのが難しかったです。
2026/3/20に本書が発売開始予定だったので、現状AI Agent関連の仕事もしているということもありLLMのことを数式レベルでちゃんと理解しておこうと改めて思ってX(旧:Twitter)を眺めている時に目に入った、株式会社Elithの「作ってわかる大規模言語モデルの仕組み」が良さそうだなと思い目次をみてみると、TransformerやGPTを実装レベルで紹介していて「アテンション機構の仕組み」「Transformerのエンコーダ・デコーダ」などの仕組みを解説していそうだったので手に取りました。
読んでみた感想としては、今まで点で理解していた知識を線で繋げることができるような良い内容でした。
数式でアルゴリズムを紹介している部分もありますが、全体を通して比較的わかりやすく書かれていたので、論文などよりもはるかに理解しやすかったです。ただ、何もバックグラウンドがない人が本書を読んですぐに理解できるかというと、そう簡単ではない気がしました。
前提知識としても以下のようなものが挙げられていたので、ある程度の数学的基礎、機械学習としての基礎は必要かなという印象でした。
前提知識(一部抜粋)
- 機械学習の基礎概念:損失関数、勾配降下法、過学習と言った基本用語を理解していること
- 線形代数の基礎:行列の積、転置、内積などの基本的な演算を知っていること
実際に実装コードもGoogle Colabで実行できるように作られているので、わからない部分が出てきたら、調べつつでも理解できるかもしれません。
本記事では、書籍でも紹介されていたminiGPT/GPT-2モデルをベースとして、大規模自然言語モデルの動きを理解しようと思います。
『GPT-2のアーキテクチャ』
左側:GPT-2全体
左側:GPT-2全体
- Input:入力文、プロンプト
- Input Embedding:トークンを数値ベクトルに変換する部分
- Positional Encoding:語順・位置情報を加える部分
- +:Token Embedding と Position Embedding を足す処理
- Dropout:学習時に一部の値を落として過学習を防ぐ処理
- Transformer Block Layer 1 ... L:Self-Attention、QKV、MLPを含む処理を何層も重ねる部分
- LayerNorm:最終的な内部表現を正規化する部分
- Linear:語彙全体に対するlogitsを出す部分
- Softmax:logitsを確率分布に変換する部分
- Output:次トークン候補、または次トークンの確率分布
右側:1個のTransformer Blockの中身
- Transformer Block Input:前の層から渡された各トークンの内部ベクトル
- LayerNorm:Attentionに入る前の正規化
- Linear:Q/K/Vを作るための線形変換
- Head 1 ... Head H:Multi-Head Attention
- Matmul:QueryとKeyの内積でAttention scoreを計算
- Mask:GPT-2が未来のトークンを見ないようにする処理
- Softmax:Attention scoreを重みに変換
- Dropout:Attention weightへのdropout
- Matmul:Attention weightをValueに掛けて文脈情報を集める
- Linear:複数headの出力をまとめて射影する処理
- Dropout:Attention出力へのdropout
- +:Residual connection。元の入力を足し戻す
- LayerNorm:MLPに入る前の正規化
- Linear → GELU → Linear:MLP / Feed Forward
- Dropout:MLP出力へのdropout
- +:Residual connection。MLP前の表現を足し戻す
- Transformer Block Output:次のTransformer Blockへ渡す内部ベクトル
2. 「確率で次の単語を出してるだけ」って説明できますか?
ある日、飲み会でChatGPTの出力の話や誤差逆伝播法のはなしをしていたのですが、そのときに『ChatGPTは確率的に次の単語を出力している』という話が出ました。
ただ、その時点では「確率的に出力している」という説明が、どこまでを説明できていて、どこから先を説明できていないのかが曖昧なままでした。
特に引っかかったのは、「確率的に出力しているだけなら、なぜあのように文脈に合った回答になるのか」という点です。
単にランダムに単語を選んでいるなら賢くなるはずがありません。つまり、見るべきポイントは「確率的に選ぶこと」そのものではなく、「その確率分布がどのように作られているのか」にあります。
◼︎ Transformer以前の言語モデルの話
Transformerが登場する以前は、文章を扱うモデルはRNNやLSTMが主流でした(現在2026/05/09のG検定を受けるべく勉強しているのですが、その内容に出てきました)
RNNの課題としては、文章を左から右へ順番に読んでいく構造で、長い文章になると最初の方の情報が忘れられてしまうという課題がありました(勾配消失問題)。その課題に対応するべく、LSTM(長・短期記憶)アルゴリズムが考え出されました。
RNNでは、誤差の学習時に逆伝播で勾配(係数・重み)を伝えて誤差を修正するのですが、そのときに $0.5 \times 0.5 \times 0.5 \times \cdots$ のように計算していくと、勾配が指数関数的に小さくなるので、勾配が消失し、結果的にその重みを持つパラメータが消えてしまうので勾配消失が発生します。
LSTMはなぜRNNより勾配消失を起こしにくいのか?:誤差逆伝播の更新式を比較して確認
https://aisinkakura-datascientist.hatenablog.com/entry/2024/12/11/124613
引用元:LSTMはなぜRNNより勾配消失を起こしにくいのか?:誤差逆伝播の更新式を比較して確認
RNNの課題としては、文章を左から右へ順番に読んでいく構造で、長い文章になると最初の方の情報が忘れられてしまうという課題がありました(勾配消失問題)。その課題に対応するべく、LSTM(長・短期記憶)アルゴリズムが考え出されました。
RNNでは、誤差の学習時に逆伝播で勾配(係数・重み)を伝えて誤差を修正するのですが、そのときに $0.5 \times 0.5 \times 0.5 \times \cdots$ のように計算していくと、勾配が指数関数的に小さくなるので、勾配が消失し、結果的にその重みを持つパラメータが消えてしまうので勾配消失が発生します。
LSTMはなぜRNNより勾配消失を起こしにくいのか?:誤差逆伝播の更新式を比較して確認
https://aisinkakura-datascientist.hatenablog.com/entry/2024/12/11/124613
引用元:LSTMはなぜRNNより勾配消失を起こしにくいのか?:誤差逆伝播の更新式を比較して確認
以下では、この疑問を章ごとに分けて整理していきます。
3. 確率的に出力するって、具体的にはどういう計算をしてるの?
「じゃあ具体的にどのように確率的に出力しているのか?」
ここで自分なりに整理すると、ChatGPTのようなLLMは、入力文をトークンという単位に分解し、それぞれを数値ベクトルに変換したうえで、「次に来る可能性が高いトークンの確率分布」を計算しています。最後にsoftmaxによって各トークンの確率が出され、その分布から次のトークンを選びます。
つまり「確率的に出力する」とは、完全にランダムに単語を選んでいるという意味ではなく、文脈をもとに候補ごとの尤もらしさを計算し、その中から選んでいるということです。
ただし、この段階で説明できるのは「どのように次のトークンを選ぶか」までです。なぜその確率分布が文脈に合ったものになるのか、つまりなぜ質問の意図をある程度反映した出力になるのかは、次のSelf-Attentionの仕組みを見る必要があります。
例えば、
「私は朝、コーヒーを」
この続きを予測する場合、候補としては「飲む」「買う」「淹れる」「食べる」などが考えられます。ただし、どれも同じ確率で選ばれるわけではありません。「コーヒー」という単語の意味や、「私は朝、〜を」という文の流れを踏まえると、「飲む」や「淹れる」の方が自然です。
この「自然さ」を作るために、Transformerの中ではいくつかの処理が行われています。
まず、Input Embeddingによって「私」「朝」「コーヒー」のようなトークンが数値ベクトルに変換されます。これにより、モデルは単語を計算できる形で扱えるようになります。
次に、Positional Encodingによって、各トークンが文中のどの位置にあるかという情報が加えられます。単語の並び順が変わると意味も変わるため、単語そのものの意味だけでなく、「どの順番で出てきたか」も重要になります。たとえば「犬が人を噛んだ」と「人が犬を噛んだ」では、使われている単語は同じでも意味が変わります。
Self-Attentionによって、各トークンが文中のどのトークンをどれくらい参照すべきかを計算します。「コーヒーを」の次を予測するなら、「コーヒー」という単語だけでなく、「朝」や「私」といった周辺の文脈も参考にします。これにより、モデルは単語単体ではなく、文脈に応じた意味を作ることができます。
MLPではAttentionで集めた文脈情報をもとに、各トークン位置の内部表現を変換します。ざっくり言うと、「この文脈では、次に来やすい特徴は何か」をより扱いやすい形に加工している部分です。
このように、Embeddingで単語を数値化し、Positional Encodingで語順を加え、Self-Attentionで文脈上重要な単語を参照し、MLPで内部表現をさらに変換したうえで、最後にLinear層とSoftmaxによって次トークンの確率分布が作られます。
そのため、最終的な出力は完全なランダムではありません。たとえば、
- 飲む:45%
- 淹れる:25%
- 買う:15%
- 食べる:1%
のように、文脈に対してもっともらしい候補ほど高い確率になります。ここから確率的に1つを選ぶので、「確率的に出力する」と言っても、文脈を無視してランダムに単語を出しているわけではない、ということです。
こちらの画像は Transformer Explainer というサイトでTransformer の動きを実際に追えるようになっています。ここで見れるように一番左側を入力としたときに、一番右側には単語の選択肢とその確率が出てきます。
4. じゃあなぜ質問の意図や文脈がわかるの?アテンションの話
「確率的に出力するとなぜあのような賢い回答ができるのか?」「self-attentionとは何か?」
その中心にあるのがSelf-Attentionです。
Self-Attentionは、文章中の各トークンが、他のどのトークンをどれくらい参照すべきかを計算する仕組みです。
たとえば「彼はりんごを食べた。それは甘かった」という文では、「それ」が何を指すかを考えるために、前に出てきた「りんご」との関係を見る必要があります。
Self-Attentionがない場合、各単語を局所的または順番に処理するだけになり、離れた単語同士の関係を直接扱いにくくなります。
Self-Attentionがあることで、離れた位置にあるトークン同士でも、どのトークンに注意を払って次の単語を予測するのに使うべきかの関係性を計算できます。
『作ってわかる大規模言語モデルの仕組み』を読んで腑に落ちたのは、次トークンの確率分布が単なる単語の出現頻度ではなく、Transformer内部で文脈情報を何層も変換した結果として得られているという点です。
大量の文章から「この文脈なら次に何が来るか」を学習し続けることで、文法、意味、事実関係、推論らしきパターンがパラメータに圧縮されていきます。
だから「次のトークン予測」だけをしているように見えても、その予測を高精度に行うためには、文脈理解に近い内部表現を作る必要があります。
その文脈表現を作る中核がSelf-Attentionです。
5. よく聞くQ・K・Vって何者? 実際にどう動いているのか知りたかった
Query, Key, Valueは、このSelf-Attentionを実現するための役割分担です。
かなり単純化すると、Queryは「自分が探している情報」、Keyは「各トークンが持っている検索用の特徴」、Valueは「実際に取り出される中身」です。各トークンのQueryと、他のトークンのKeyの類似度を計算することで、「どのトークンをどれくらい見るべきか」という重みが決まります。その重みに応じてValueを足し合わせることで、文脈を反映した新しい表現が作られます。
つまりQKVは、文章内で「今の単語を理解するために、どの単語の情報をどれくらい使うべきか」を計算する仕組みだと言えます。
これにより、単語単体の意味ではなく、文脈に応じた意味を作れるようになります。
同音異義語「例) bank」でも、川岸の話なのか銀行の話なのかを周囲の語から判断できるのは、このような文脈依存の表現を作れるからです。
Transformer Explainer では、青色のQueryの部分からコサイン類似度を計算して、どの単語に注目すべきかをKeyによって引き出しています(図では紫が一番強い”Data”が選ばれている)。そのため、モデルは「visualization を理解するには Data の情報が重要」というように理解できるようになります。
重要なのは、ルールベースで明示的に「Dataを見るべき」とルールを書いたわけではない点です。学習の結果、モデルの重みからそのような参照関係が出てきています。
補足:
- Scaling→内積の値が大きくなりすぎて、softmaxの出力が極端になりすぎるのを防ぐために、 $\sqrt{d_k}$ で割ります。
- Mask→未来の単語を見ると、カンニングになるので、未来の単語をみないようにしている。
最終的にSoftmaxのところでスコアを確率のような重みに変換する処理をしている。
Softmaxは機械学習の分野でよく出てくる「複数の値を合計が1になる確率分布(0.0~1.0の範囲)に変換する活性化関数」です。
6. self-attentionがある時とない時では何が変わるか?マルチヘッドにすると何が良いか?
さらにMulti-Head Attentionでは、このAttentionを複数の視点で同時に行います。
1つのHeadだけだと、ある単語間の関係しか捉えにくいですが、複数のHeadを使うことで、文法的な関係、係り受け、照応関係、意味的な関連などを別々の観点で見られるようになります。
人間が文章を読むときにも、「主語と述語の関係」「指示語が何を指しているか」「話題の流れ」などを同時に見ているので、それに近い複数視点の処理ができるようになるイメージです。
ここまで整理すると、「LLMは確率的に次の単語を出しているだけ」という説明は間違いではないですが、かなり不十分だと感じました。
より正確には、「大量の文章から学習したパラメータを使って、入力文脈をTransformerで文脈表現に変換し、その文脈に対して次に来るトークンの確率分布を計算している」と言うのがより正確ですね。
賢く見える理由は、未だよくわかりませんがself-attention, multi-head attention, Query-Key-Valueの仕組みを重ねた結果精度がよくなるということで、説明可能性はないのかもしれません。この辺りは「何が賢く、正しく見える文章なのか」という評価指標と、「それを達成するためにはこのようなロジックで担保している」という説明が必要そうなので少し難しいかもしれません。
7. nanoGPTだけだと賢くならないのはなぜ?
nanoGPTは、GPT系モデルの仕組みを理解するための最小実装に近いものです。
Self-Attention、Multi-Head Attention、Feed Forward、LayerNorm、Residual connection、次トークン予測といった基本部品は入っています。
そのため、構造としてはGPTらしいモデルを作ることができます。
理由①:モデルサイズが小さいから(パラメータ数が少ない)
モデルサイズ(パラメータ)が小さければ、表現できる文章のパターンや知識量が下がるのだと思います。
パラメータとしては下記のようなものが想定されますが、GPT5.5とかの②モデルはこれが数千億パラメータとかになるので、圧倒的な表現力があります。(ただし、計算に大量の電気と計算資源が必要です)
理由②:学習データの量と質が不足している
パラメータとしては下記のようなものが想定されますが、GPT5.5とかの②モデルはこれが数千億パラメータとかになるので、圧倒的な表現力があります。(ただし、計算に大量の電気と計算資源が必要です)
理由②:学習データの量と質が不足している
nanoGPTは小規模のデータセットでのみ学習を行っているので、世界知識、プログラミング、数学、専門知識、会話の文脈などを扱うには学習不足なんでしょう。
理由③:事前学習だけの回答をしている
事前学習で得られたモデルから、次トークン予測だけでは賢い回答としては不足しているみたいです。ChatGPTのように、質問に答える、指示に従う、わかりやすく整理する、といった振る舞いをさせるには、instruction tuning や RLHF / preference tuning のような追加学習が必要になります。各種プロバイダーはこの部分も頑張って発表しているモデルの出力品質を向上させているのだと思います。
図解GPT-2(視覚化トランスフォーマー言語モデル)
https://jalammar.github.io/illustrated-gpt2/
図解GPT-2(視覚化トランスフォーマー言語モデル)
https://jalammar.github.io/illustrated-gpt2/
8. 最終的にどのように次の単語予測が確率分布に変換されているのか?どのように次の単語は選ばれるのか?
Transformer Explainerで見ると、AttentionやMLPを通ったあと、各トークン位置の内部表現が最終的に語彙全体に対するスコアへ変換されます。このスコアがlogitsです。logitsはまだ確率ではなく、「次に来る候補としてどれくらい強く推されているか」を表す生の点数です。
この図では、入力文 Data visualization empowers users to に対して、次のトークン候補として visualize、create、see、make、easily などが並んでいます。
右側の Logits はモデルが出した生のスコアで、その後 Scaled logits、Top-k、Softmax を通って、最終的な確率分布になります。
流れを整理すると、次のようになります。
- Self-Attentionで、各トークンが文中のどのトークンを参照するかを計算する
- Attention出力とMLPを通じて、文脈を反映した内部ベクトルを作る
ここでいうMLPは Multi-Layer Perceptron の略で、日本語では多層パーセプトロンと呼ばれます。Transformerの文脈では、Self-Attentionで集めた文脈情報を、各トークン位置ごとにさらに変換する小さなニューラルネットワークだと考えるとわかりやすいです。
Self-Attentionは「文中のどのトークンを見るべきか」を計算する役割を持ちます。
一方でMLPは、Attentionで集めた情報をもとに、「その位置のベクトルを次の層に渡しやすい形へ加工する」役割を持ちます。
つまり、Attentionがトークン間の関係を混ぜる処理だとすると、MLPは各トークンの内部表現を非線形に変換して表現力を上げる処理です。
Transformer Explainerの図では、Attentionの右側にMLPがあります。
Attentionで文脈を反映したベクトルが作られ、その後MLPを通ることで、次トークン予測に使いやすい内部表現へさらに更新されます。
このMLPも学習対象であり、重みパラメータを通じて「どの特徴を強めるか」「どの特徴を弱めるか」を学習します。
- 最終層で、そのベクトルを語彙全体のlogitsに変換する
- temperatureでlogitsの鋭さを調整する
- top-kやtop-pで候補を絞る
- softmaxで確率分布に変換する
- その確率分布から次のトークンをサンプリングする
ここで重要なのは、モデルがいきなり単語を選んでいるわけではないという点です。まず全語彙に対して「次に来そうな度合い」をlogitsとして出し、それを確率分布に変換してから、最後に1つのトークンを選びます。
9. Temperatureは何をしているのか?
Temperatureは、logitsをsoftmaxに入れる前に割る値です。図では、see のlogitが -137.12 で、temperatureが 3 なので、scaled logitは -137.12 / 3 = -45.71 になっています。
Temperatureが大きいと、logits同士の差が小さくなります。その結果、softmax後の確率分布は平坦になり、上位以外の候補も選ばれやすくなります。上の図では temperature=3 なので、visualize が28.08%、create が21.72%、see が18.78%となり、see も十分に選ばれる可能性があります。
一方で、Temperatureを小さくすると、logits同士の差が大きくなります。
その結果、softmax後の確率分布は鋭くなり、最も高い候補に確率が集中します。temperature=0.2 の例では、visualize が97.66%、create が2.07%、see はほぼ0%になっています。つまり、temperatureを下げると出力は安定しますが、表現の多様性は下がります。逆にtemperatureを上げると、多様な候補が選ばれやすくなりますが、意図から外れた単語も出やすくなります。
また、今回の図ではSamplingにTop-kが使われており、k=5になっています。これは全語彙から直接選ぶのではなく、確率の高い上位5候補だけを残し、それ以外の候補を除外するという意味です。そのうえで、残った候補にsoftmaxをかけて確率分布を作り、最後にランダムに1つを選びます。
つまり、see が選ばれる場合があるのは、see が最も確率の高い候補だからではありません。Top-kの候補内に残っていて、softmax後に18.78%の確率を持っているため、その確率に従ったサンプリングで選ばれることがある、ということです。
この意味で、「確率的に出力している」とは、完全にランダムに単語を出しているという意味ではありません。Transformerが文脈からlogitsを作り、temperatureやtop-k/top-pによって候補の分布を調整し、softmaxで確率分布に変換したうえで、その分布から次のトークンを選んでいる、という意味です。
10. この本を読んで変わった、LLMへの解像度
この本を読む前は、「ChatGPTは次の単語を確率分布から選んでいる」という理解で止まっていました。しかし実際には、Transformerの各パーツが段階的に役割を持ち、最終的に次トークンの確率分布を作っていると捉える方が正確でした。
Transformer論文のアーキテクチャ図と対応づけると、今回の記事で扱った疑問は次のように整理できます。
Input Embedding / Output Embedding:文章を数値ベクトルに変換する部分
- 「確率的に出力するって、具体的にはどういう計算をしてるの?」
LLMは文字列をそのまま扱うのではなく、まず文章をトークンに分割し、各トークンをEmbeddingによってベクトルに変換します。
Transformerの図では、左下の Input Embedding や右下の Output Embedding にあたる部分です。
ここで初めて、人間の言葉がモデル内部で計算可能な数値表現になります。つまり、「次の単語を確率的に出す」処理の前提には、そもそも単語やサブワードをベクトルとして扱える形に変換する工程があります。
Transformerの図では、左下の Input Embedding や右下の Output Embedding にあたる部分です。
ここで初めて、人間の言葉がモデル内部で計算可能な数値表現になります。つまり、「次の単語を確率的に出す」処理の前提には、そもそも単語やサブワードをベクトルとして扱える形に変換する工程があります。
Positional Encoding:語順の情報を加える部分
Embeddingだけでは、各トークンの意味的な情報は持てても、文中の順番は十分に表現できません。
そのため、TransformerではPositional Encodingを加えて、「どのトークンが何番目にあるか」という位置情報を持たせます。
この記事で触れた「文脈に沿って次の単語を予測する」という話は、単語の意味だけでなく、語順も含めた入力表現が前提になります。たとえば「犬が人を噛んだ」と「人が犬を噛んだ」は、使われている単語は同じでも意味は変わります。
この違いを扱うために、位置情報が必要になります。
そのため、TransformerではPositional Encodingを加えて、「どのトークンが何番目にあるか」という位置情報を持たせます。
この記事で触れた「文脈に沿って次の単語を予測する」という話は、単語の意味だけでなく、語順も含めた入力表現が前提になります。たとえば「犬が人を噛んだ」と「人が犬を噛んだ」は、使われている単語は同じでも意味は変わります。
この違いを扱うために、位置情報が必要になります。
Mask (Masked Multi-Head Attention / Multi-Head Attention):文脈を見る部分
対応する疑問:
- 「self-attentionとは何か?」
- 「Query, Key, Valueってどのように動いていて、それがなぜ賢い回答に役立つのか?」
- 「確率的に出力するとなぜあのような賢い回答ができるのか?」
図では、Mask の部分です。
Self-Attentionでは、各トークンが文中の他のどのトークンをどれくらい参照するかを計算します。その内部でQuery、Key、Valueが使われます。QueryとKeyで「どのトークンを見るべきか」を決め、Valueから実際に取り出す情報を重みに応じて混ぜます。
GPTのような次トークン予測モデルでは、未来のトークンを見てしまうと答えをカンニングすることになるため、Masked Multi-Head Attention によって未来方向の情報を見ないようにします。この仕組みによって、現在までの文脈だけを使って次のトークンを予測できます。
Self-Attentionでは、各トークンが文中の他のどのトークンをどれくらい参照するかを計算します。その内部でQuery、Key、Valueが使われます。QueryとKeyで「どのトークンを見るべきか」を決め、Valueから実際に取り出す情報を重みに応じて混ぜます。
GPTのような次トークン予測モデルでは、未来のトークンを見てしまうと答えをカンニングすることになるため、Masked Multi-Head Attention によって未来方向の情報を見ないようにします。この仕組みによって、現在までの文脈だけを使って次のトークンを予測できます。
Feed Forward / MLP:各トークンの内部表現を加工する部分
対応する疑問:
- 「Attentionだけで賢くなるのか?」
Attentionが「どのトークン同士を関係づけるか」を扱う処理だとすると、Feed Forward / MLPは、Attentionで集めた情報を各トークン位置ごとにさらに変換し、次の層に渡しやすい内部表現へ加工する処理です。
つまり、文脈を集めるだけではなく、その情報をニューラルネットワークで非線形に変換することで、次トークン予測に使いやすい特徴表現を作っています。
Add & Norm:情報を壊さず深い層に伝える部分
Transformerの図に何度も出てくる Add & Norm は、Residual connection と Layer Normalization を表しています。これは、AttentionやFeed Forwardの出力をそのまま積み重ねるのではなく、元の入力を足し戻しながら正規化する処理です。
深い層を重ねると学習が不安定になりやすいため、Add & Normによって情報や勾配を流しやすくしています。この記事の主題である「なぜ文脈を踏まえた確率分布を作れるのか」は、Attentionだけでなく、このように深い層を安定して積み重ねる仕組みにも支えられています。
Linear + Softmax:次トークンの確率分布に変換する部分
対応する疑問:
- 「最終的にどのように次の単語予測が確率分布に変換されているのか?」
- 「どのように次の単語は選ばれるのか?」
- 「temperatureやtop-kは何をしているのか?」
Transformerの図の一番上にある Linear と Softmax の部分です。
AttentionやFeed Forwardを何層も通った最終的な内部ベクトルは、Linear層によって語彙全体に対するlogitsへ変換されます。logitsはまだ確率ではなく、各トークン候補に対する生のスコアです。
その後、temperatureやtop-k/top-pなどで分布を調整し、Softmaxによって合計1の確率分布に変換します。最後に、その確率分布から次のトークンが選ばれます。
AttentionやFeed Forwardを何層も通った最終的な内部ベクトルは、Linear層によって語彙全体に対するlogitsへ変換されます。logitsはまだ確率ではなく、各トークン候補に対する生のスコアです。
その後、temperatureやtop-k/top-pなどで分布を調整し、Softmaxによって合計1の確率分布に変換します。最後に、その確率分布から次のトークンが選ばれます。
まとめ:確率的に選ぶ前に、文脈表現を作っている
この整理を踏まえると、「LLMは確率的に次の単語を出しているだけ」という説明は間違いではありませんが、かなり省略された説明です。
より正確には、入力トークンをEmbeddingし、位置情報を加え、Attentionで文脈関係を計算し、Feed Forwardで内部表現を変換し、Add & Normで深い層を安定させ、最後にLinear + Softmaxで次トークンの確率分布を作っている、という理解になりました。
賢く見える理由は、単に確率的に選んでいるからではなく、その確率分布を作るまでに、文脈を反映するために内部表現を何層にもわたって構成しているからです。
より正確には、入力トークンをEmbeddingし、位置情報を加え、Attentionで文脈関係を計算し、Feed Forwardで内部表現を変換し、Add & Normで深い層を安定させ、最後にLinear + Softmaxで次トークンの確率分布を作っている、という理解になりました。
賢く見える理由は、単に確率的に選んでいるからではなく、その確率分布を作るまでに、文脈を反映するために内部表現を何層にもわたって構成しているからです。
参考文献
- Attention Is All You Need. Vaswani et al., 2017. https://arxiv.org/abs/1706.03762
- Transformer Explainer (Polo Club of Data Science). https://poloclub.github.io/transformer-explainer/
- 大規模言語モデル講座 基礎編 2025 Autumn - 東京大学松尾・岩澤研究室(松尾研)- Matsuo Lab. https://weblab.t.u-tokyo.ac.jp/large-language-model/
最新記事

2026年05月30日
ChatGPTはなぜ確率的に次の単語を出力するだけで頭の良い出力ができるのか説明できなかったので勉強した。
2026年05月21日
『地方には何もない』は間違いだった。千葉支社3年間の軌跡と、これから創る面白い未来
2026年05月15日
小林支社設立2年を振り返る
2026年04月17日
IT企業が旅館を再生?南房総で始まった宿泊業の再設計とは
2026年04月17日
和歌山支社設立から3年を振り返る
2026年04月03日
【AI大規模開発のリアル】AIが劇的に進化する今、エンジニア組織はなぜ「テストとレビュー」に回帰するのか
2026年03月23日
小海支社設立から5年を振り返る
2026年03月18日
一粒でみんな笑顔に!こだわりの詰まったサンベリー農園のイチゴ狩り
2026年02月26日
長野県・小海町が東京にまるまるやってきた!?地方イベント「まち、まるまる体感。」の裏側
2026年02月17日
【授業レポ】「学校の課題をアプリで解決せよ」IT企業が高校生に伝えた、プログラミング的思考と仕事のリアル
過去記事(年月別)
- 2026年05月(3)
- 2026年04月(3)
- 2026年03月(2)
- 2026年02月(2)
- 2026年01月(2)
- 2025年12月(2)
- 2025年11月(3)
- 2025年09月(2)
- 2025年08月(3)
- 2025年07月(4)
- 2025年06月(5)
- 2025年05月(4)
- 2025年04月(5)
- 2025年03月(4)
- 2025年02月(3)
- 2025年01月(4)
- 2024年12月(3)
- 2024年11月(3)
- 2024年10月(4)
- 2024年09月(4)
- 2024年08月(4)
- 2024年07月(4)
- 2024年06月(4)
- 2024年05月(4)
- 2024年04月(2)
- 2024年03月(4)
- 2024年02月(3)
- 2024年01月(3)
- 2023年12月(3)
- 2023年11月(2)
- 2023年10月(3)
- 2023年09月(1)
- 2023年08月(2)
- 2023年07月(3)
- 2023年06月(4)
- 2023年05月(4)
- 2023年04月(4)
- 2023年03月(5)
- 2023年02月(5)
- 2023年01月(4)
- 2022年12月(3)
- 2022年11月(4)
- 2022年10月(4)
- 2022年09月(6)
- 2022年08月(3)
- 2022年07月(4)
- 2022年06月(4)
- 2022年05月(4)
- 2022年04月(8)
- 2022年03月(7)
- 2022年02月(3)
- 2022年01月(5)
- 2021年12月(3)
- 2021年08月(1)
- 2021年06月(2)
- 2021年02月(1)
- 2020年12月(1)
- 2020年02月(1)
- 2020年01月(1)
- 2019年12月(1)
- 2019年11月(1)
- 2018年11月(1)
- 2018年10月(2)
タグ
![Vitalize[ヴァイタライズ]](../images/logo.png)