はじめに
この記事はAIの前提知識がない初学者向けの記事です。
TransformerのアーキテクチャやAttentionに関してはあえて省略して説明をしています。
今日、ChatGPTをはじめとするLLM (大規模言語モデル) は、多くの人が日常的に使うツールとして定着しました。しかし、『LLMの中で何が起きているか』という仕組みまでは、まだ広く知られていないのが実情です。
💡 そもそもLLM(大規模言語モデル)とは?
Large Language Modelの略で、大量の文章をもとに構築された、人間のように自然な会話や文章作成ができるAIのことです。
この記事では、数式やAI/機械学習の前提知識がなくても読めることを目指し、「LLMがどうやって文章を理解し、生成しているのか」 を順に解説します。最後に、解説をもとに「ハルシネーション」「コンテキスト長」などのトピックにも触れます。
対象読者:
- AIの活用を目指す営業・コンサルタント方
- AI・機械学習の知見を広げたいエンジニア・技術職の方
第1部: ベクトル化の仕組み
なぜ単語を数字にする必要があるのか
コンピュータは「猫」や「犬」という文字の意味をそのまま理解することはできず、プログラム上からの計算(足し算・掛け算)を専門としています。
その上で、コンピュータが計算ができるのは数字だけです。そこでLLMは、単語(正確には「トークン」という単位)を 大量の数字の並び(ベクトル) に変換してから処理します。
"猫" → [0.21, -0.53, 0.88, 0.12, ...] (たとえば数千個の数字の並び)
"犬" → [0.19, -0.48, 0.91, 0.15, ...]
"車" → [-0.72, 0.33, -0.05, 0.60, ...]
この文字からベクトルへの変換を Embedding(埋め込み) と呼びます。
Embeddingされたベクトルの意味
Embeddingのおもしろい性質は、意味的に似ている単語ほど、ベクトル空間上で近い位置に配置されることです。
たとえば「猫」と「犬」はどちらも「ペット」という文脈で使われることが多いため、ベクトル空間上では近くに配置されます。一方「車」は意味的に離れているため、遠くに配置されます。
また、人間が書いた文章を学んでいるため、人間の単語理解と近い形になっています。
どういうことかというと、たとえば「女王」「王子」「男」「女」をベクトル化すると以下のような形になるといわれています。
上の図は「男」から「女」へ向かうベクトルを「王」のベクトルに足し合わせると、空間上で「女王」の近くに到達することを示しています。
つまりは$\overrightarrow{\text{王}} - \overrightarrow{\text{男}} + \overrightarrow{\text{女}} \approx \overrightarrow{\text{女王}}$という意味です。
このベクトルは人間が手作業で決めているわけではなく、大量の文章を学習する過程で「一緒に使われやすい単語同士が近くなるように」自動的に調整されています。
コラム(トークンとは)
LLMは厳密には「単語」ではなく「トークン」という単位で処理をしています。日本語の場合、1つの単語が複数のトークンに分割されることもあります。
第2部: デコーダの仕組み
ChatGPTなどに使われている主流のモデルは、Transformerの中でも「デコーダ」と呼ばれる文章生成の部品をベースにしています。
ここではデコーダについて説明します。
LLMがやっていること
有名な話ですが、LLMがやっていることは 「与えられた文章の続きに、どの単語が来る確率が一番高いかを予測する」 というシンプルなことです。
「今日はいい」の次に来る単語の確率:
天気: 45%
日: 20%
気分: 10%
...
この確率計算と単語の選択を行う部品がデコーダです。
文章の生成
文章を生成する際には、選んだ単語を入力の末尾に追加し、また次の単語を予測する。という作業を繰り返します。
1. "今日はいい" → 次を予測 → "天気"
2. "今日はいい天気" → 次を予測 → "です"
3. "今日はいい天気です" → 次を予測 → "。"
4. 終了トークンが予測されたら生成を止める
コラム
今回の記事では、わかりやすさを優先するために省略しましたが、LLMのベースである「Transformer」という技術には、他にも以下のような仕組みが使われています。もし興味が湧いたら、ぜひ調べてみてください!
- Positional Encoding(位置エンコーディング)
- Attention(アテンション)
第3部: 言葉の基本を学ぶ「事前学習」
訓練(学習)とは
- AIが賢くなるプロセスのことを、機械学習の世界では 「訓練」 または 「学習」 と呼びます。
- LLMにおける学習とは、プログラムに大量の文章データを読み込ませて、言葉のパターンを学ばせる作業のことです。
Causal Masking: 未来を見せない制約
LLMが次の単語を予測する訓練をするうえで、非常に重要な「カンニング防止」の仕組みがあります。それが、 Causal Masking(因果的マスキング) です。
文章を予測する際に、モデルは「それまでに登場した単語」だけを見て次の単語を当てなければなりません。まだ見せていないはずの「未来の単語」を先読みすることを防ぐための、目隠し(マスク)のような役割を果たしています。
予測対象から先の単語を見えなくする仕組み・技術のことをCausal Maskingといいます。
学習データは、ただの大量のテキスト
LLMの学習には、ネット上の大量の文章を使います。「猫が魚を食べた」という一文があれば、それ自体が問題と答えのセットになります。
入力: "猫が魚を"
正解: "食べた"(実際にその文章で次に来ていた単語)
さらに、Causal Maskingを使い、1つの文章から複数の問題と答えを同時に取り出せます。
"猫" の次 → 正解は "が"
"猫が" の次 → 正解は "魚"
"猫が魚" の次 → 正解は "を"
"猫が魚を" の次 → 正解は "食べた"
パラメータの更新
では、クイズを解いたLLMは、どうやって賢くなっていくのでしょうか?
LLMには、単語同士のつながりや、次にどの単語を予測するかをコントロールするための 「つまみ(ダイヤル)」 が、数千億個という途方もない数で並んでいます。このつまみひとつひとつのことを、 「パラメータ」 と呼びます。
- クイズを解く: LLMが次の単語を予測する
- 答え合わせをする:正解の単語と、AIの予測を比較する
- つまみを調整する: 予測と答えの差分から、次に同じクイズが出たときに正解できるように、関連する「つまみ(パラメータ)」を回して微調整する
この「クイズを解いて、つまみを微調整する」一連の作業のことを、AIの世界では 「パラメータの更新(学習)」 と呼びます。
これを何億回も繰り返す
1回の更新でモデルはほんの少ししか賢くなりません。これを、
- 数兆単語分のテキストに対して
- 大量の文章をまとめて処理しながら
- 何十万〜何百万回
繰り返すことで、「次の単語を当てる」というシンプルな練習の積み重ねが、結果的に文法・知識・推論のような複雑な振る舞いを獲得していきます。
このような大量の計算を並列で行うためのパーツとして、GPUやAI用のメモリ需要が急増しています。
第4部: 追加の学習
ここまで、LLMが「次の単語を予測する能力」を身につける仕組み(事前学習)について解説してきました。
しかし、おそらく皆さんの中には「次の単語を当てるだけで、ユーザーの質問にちゃんと答えられるの?」と疑問に思った方も多いはずです。
実はその感覚は正しく、ただ続きを予測するだけでは、チャットAIとしてうまく会話できません。
ユーザーの質問は、モデルからどう見えているか
ここまでの説明で「デコーダは入力された文章の続きを予測しているだけ」とわかりました。では、ChatGPTにユーザーが「空はなぜ青いの?」と打ち込んだとき、デコーダに実際に渡されている入力は何なのでしょうか。
実は、ユーザーが打った文章だけがそのまま渡されているわけではありません。裏側では、以下のような役割ごとのタグで囲まれた1つの長い文章に組み立て直されてから、デコーダに入力されています(実際のタグの記法はモデルによって異なりますが、イメージとしては以下の通りです)。
<system>
あなたは親切で正確なアシスタントです。
</system>
<user>
空はなぜ青いの?
</user>
<assistant>
ポイントは、この<system>〜<assistant>まで全部をひとまとめにした1つの長い文字列が、「続きを予測する対象の入力」としてデコーダにそのまま渡されている、ということです。デコーダ自身は「これはシステム指示で、これはユーザーの発言で」という特別な理解をしているわけではなく、あくまで「このトークン列の次に来る、もっともらしいトークンは何か」を計算しているだけです。
デコーダは<assistant>というタグの直後から、トークンを1つずつ生成していきます。後述するSFT・RLHFという追加の訓練によって、「<assistant>の直後には、丁寧で有用な回答が続くものだ」というパターンが強く学習されているため、この位置から生成を始めると、質問への回答らしい文章が出力される、というわけです。
会話が続くとき
複数回のやり取りがある会話でも、仕組みは同じです。それまでの会話全部を、毎回まるごと1つの文章として入力し直しています。
<system>あなたは親切で正確なアシスタントです。</system>
<user>空はなぜ青いの?</user>
<assistant>レイリー散乱という現象によって...</assistant>
<user>じゃあ夕焼けはなぜ赤いの?</user>
<assistant>
2回目の質問「じゃあ夕焼けはなぜ赤いの?」に答える際も、1回目のやり取り全体を含めた文章全体が、改めてデコーダに入力し直されています。LLMには「会話を記憶している」ような専用の記憶領域があるわけではなく、毎回、それまでの会話ログをまるごと読み直して続きを予測しているだけです。
これは後述する「コンテキスト長」の制約(一度に入力できる文章量に上限がある)や、「会話が長くなるほど処理が遅くなる・AIの回答が悪くなる」という現象に直結します。
応答の精度と品質を磨き上げる「2つの追加学習」
ステップ1: Instruction Tuning(SFT)
まず行われるのが SFT(Supervised Fine-Tuning, 教師ありファインチューニング) と呼ばれる工程です。
やっていることは事前学習と同じ「次の単語を予測する」訓練ですが、異なるのが学習に使用するデータです。事前学習では「Web上の雑多な文章」を使いましたが、SFTでは人間が作成した 「質問とその模範的な回答」のペア を大量に使います。
指示: "空はなぜ青いの?"
模範回答: "空が青く見えるのは、太陽光が大気中の分子に
散乱される際、波長の短い青い光がより強く散乱される
ためです(レイリー散乱と呼ばれる現象です)。"
こうしたペアを数万〜数十万件用意し、「指示の後には、この形式・この丁寧さで回答が続くものだ」というパターンを、学習させます。先ほど説明した「役割タグ」(<user>、<assistant>など)も、このSFTの段階で「<assistant>の直後には模範解答のような文章が来る」という形で学習されます。
これによって、モデルは「質問形式の入力に対して、質問を続けるのではなく、回答を返す」という基本の型を獲得します。
ステップ2: RLHF — 人間の"好み"でさらに磨き込む
SFTだけでも「質問に対して答えを回答する」モデルはできますが、実際に使ってみると、回答の質にはまだムラがあります。「文法的には正しいが、微妙に的外れ」「正確だが、無駄に冗長」「攻撃的・不適切な内容を含む」といった問題が残ります。
そこで行われるのが RLHF(Reinforcement Learning from Human Feedback, 人間のフィードバックを用いた学習) です。
この学習では3つのステップがあります。
① 複数の回答候補を生成する
同じ質問に対して、モデルにいくつかの異なる回答を生成させます。
質問: "空はなぜ青いの?"
回答A: "レイリー散乱という現象で、青い光が強く散乱されるためです。"
回答B: "わかりません。専門家に聞いてください。"
回答C: "空は青いです。それが真実です。以上です。"
② 人間が回答に順位をつける(報酬モデルの学習)
人間の評価者が、これらの回答を「どちらがより良い回答か」で比較・順位付けします。人間が評価した大量のデータを使って、 「回答の良さを点数化する別のモデル」(報酬モデル, Reward Model) を訓練します。報酬モデルは、ある回答を入力すると「人間ならこれくらいの点数をつけるだろう」というスコアを出力します。
③ 報酬モデルのスコアを使って、本体のモデルを再調整する
ここからがLLMの学習部分です。LLM本体に回答を生成させ、その回答を報酬モデルに採点させます。スコアが高くなるような回答を生成しやすいように、LLM本体のパラメータを更新します。
LLMが回答を生成
↓
報酬モデルが採点(例: 78点)
↓
「もっと高得点な回答を出しやすくなるように」パラメータを調整
↓
これを繰り返す
このプロセスを経ることで、LLMはただ文章を続けるだけのプログラムから、「結論ファースト」などの人間が好むわかりやすくて丁寧な回答を出力できるようになります。
コラム:ChatGPTのRLHF
ChatGPTを使っていると、2つの回答を並べて「どちらがお好みですか?」と選ばされることがあります。
あれがまさに、RLHFの一種にあたります。
また、最近は、報酬モデルを介さずに直接好みを学習させる手法(DPOなど)も主流になってきています
第5部: 実務で知っておきたいこと
ここまでの仕組みを理解していると、LLMを使う上でよく遭遇する現象が「なぜ起きるのか」が自然に説明できるようになります。
なぜハルシネーションが起きるのか
ハルシネーション(Hallucination)とは、AIが事実とは異なる「もっともらしい嘘」を、さも真実であるかのように話し始める現象のことです。
先述の通り、LLMは頭の中で「これが本当に正しい事実か」を確認しているわけではありません。やっているのはあくまで、「確率的にもっともらしい単語」を選んで並べているだけです。
そのため、学習データに存在しない未知の情報を聞かれても、確率の高そうな単語を綺麗に並べて、それらしい文章を作り上げてしまいます。その結果、自信満々に間違った情報を答えてしまうのです。
実際、一部のAI開発者の間では 「ハルシネーションはAIのバグではなく、機能である」 とも言われています。「確率的にそれっぽい文章を紡ぐ力」があるからこそ、小説を書いたりアイデアを出したりする「創造性」が生まれているからです。
なぜプロンプト(聞き方)で結果が変わるのか
LLMの生成は「直前までの文章の続きとして、もっともらしい単語を選ぶ」プロセスです。つまり質問の仕方自体が、次に来る単語の方向性を誘導していることになります。
役割設定(「あなたは〜の専門家です」)、具体例の提示、出力フォーマットの指定などが効果を持つのは、「この続きとしてどんな文章がもっともらしいか」の前提条件を変えているからです。
なぜ会話の途中の内容を忘れるのか(コンテキスト長)
先述の通り、LLMは会話全体を記憶しているわけではなく、毎回、それまでの会話全部を入力として与え直しています。この「一度に入力できる文章量の上限」をコンテキスト長と呼びます。
上限を超えると、古い部分の会話が切り捨てられたり圧縮されるため、以前話した内容を「忘れた」ように見える現象が起きます。重要な情報は、会話の中で都度リマインドする、あるいは要約して渡す、といった工夫が有効です。
さらに、 Context Rot といって、会話(コンテキスト)が長くなると、モデルのパフォーマンスが劣化することが報告されています。このため、適切に会話を切り替えるなど、コンテキストを適切なサイズに保つことが必要です。
Context Rotの仕組みや具体的な挙動は突き詰めると非常に深いテーマのため、詳しく知りたい方は、記事の末尾にある参考記事を参照してみてください!
まとめ
- LLMは単語をベクトルに変換し、次に来る単語の確率を予測することで文章の生成を行う
- Causal Maskingにより未来を覗き見ずに学習・生成を行う
- ハルシネーション、コンテキスト長、プロンプトの効き方、計算コストなど、実務で遭遇する現象の多くは、この基本的な仕組みから説明できることであり、AIを賢く使うために必須の知識である
ではまた!

