大規模言語モデル
Large Language Model ・ だいきぼげんごもでる
膨大なテキストで次のトークンの予測を学び、その繰り返しで文章を生成する巨大なニューラルネットワーク。
✦ 30秒で試す — 航海存在しない論文を、それらしく書いてしまうのはなぜか返事を書くとき、LLMが1回の計算で決めるのは?予想してみる概要
大規模言語モデル(LLM: Large Language Model)は、インターネット規模の膨大なテキストで訓練され、「ここまでの文章の続きとして、次のトークン(語の断片)が何である確率が高いか」を計算するモデルです。文章を生成するときは、この確率の分布から1トークンを選んで文に足し、伸びた文をもう一度モデルに通して次の1トークンを選ぶ — という1歩を、終わりの記号が出るまで繰り返しています。ChatGPT や Claude の返答が1語ずつ流れてくるのは、この1歩ずつの生成をそのまま見せているからです。
中身はTransformerのデコーダ(前の文脈だけを見て次を予測する部分)を何十層も積み重ねた、巨大なニューラルネットワークです。層の数はモデルによって数十〜百数十層で、たとえば2020年の GPT-3(1750億パラメータ)は96層、2024年の Llama 3.1 405B は126層です。「巨大」なのは層の数よりも、各層の幅とパラメータ(学習で調整される数値)の総数のほうで、数十億から数千億、それ以上に達します。
驚くべきは、「次の1トークンを当てる」という単純な訓練目標だけから、翻訳・要約・プログラミング・推論といった多様な能力が生まれることです。続きを高い精度で当てるには、文法も事実も論理も文脈の意図も、内部に取り込まざるを得ないからです。エンジニアにとって LLM は、API経由で呼び出してアプリケーションに組み込める「自然言語という曖昧な入力を扱える部品」でもあります。
なぜ生まれたか
かつての自然言語処理は、翻訳なら翻訳モデル、感情分析なら感情分析モデルと、タスクごとに人手で正解を付けたデータ(ラベル付きデータ)を集め、専用のモデルを訓練するのが常識でした。ラベル付けは高価で、データの量がそのまま性能の天井になっていました。一方、ラベルのない生のテキストならウェブ上に事実上無尽蔵にあります。「次のトークンを当てる」訓練は、どんな文章も「ここまでを見せて、次の語を当てさせる」問題に作り替えられるので、人手のラベルが要りません。この自己教師あり学習が、データ量の壁を破る鍵になりました。
これを実用の規模にしたのが、全トークンを並列に学習できるTransformerの構造と、GPUクラスタの計算力です。OpenAI の GPT(2018年)、GPT-2(2019年)と規模を上げるごとに性能が伸び、2020年にはモデルの大きさ・データ量・計算量を増やすほど損失が予測可能なかたちで下がる「スケール則」が報告されました。同じ年の GPT-3 は、例をいくつか見せるだけで未知のタスクをこなす「文脈内学習(in-context learning)」を示します。ただしこの段階のモデルは「続きを書く」だけで、質問に素直に答えるとは限りませんでした。2022年の InstructGPT で、指示に従うための追加学習と人間の好みを使った調整(RLHF)が加わり、同年11月の ChatGPT で「対話する汎用の道具」として一気に普及しました。タスクごとの専用モデルを作る時代から、一つの巨大な汎用モデルを皆で使う時代への転換です。
詳細
生成は「次の1トークン」の選択の連鎖
LLM が1トークンを生成する1歩を、順に追ってみます。まず入力の文章をトークンの ID 列に変換します。次にこの列全体をTransformerの層に通すと、最後の位置から「語彙表のすべてのトークンについてのスコア(ロジット)」が出てきます。語彙表の大きさは現在の主要モデルで10万〜20万程度です。このスコアを softmax という変換で合計1の確率分布に直し、そこから1トークンを選びます。選んだトークンを入力の末尾に足し、また最初から同じ計算をします。終わりを表す特別なトークンが選ばれるか、出力の上限に達したら止まります。
ここで大事なのは、モデルが一度に決めているのは「次の1トークンの分布」だけで、文全体の計画を持って書いているわけではない、という点です。長い文章も、1トークンずつの選択を積み重ねた結果にすぎません。前に選んだトークンは取り消せないので、途中で一度おかしな語を選ぶと、モデルはそのおかしな文を前提に「もっともらしい続き」を書き続けます。
温度とサンプリング — 分布からどう1本選ぶか
分布から1トークンを選ぶ方法は1つではありません。いつも最も確率の高いトークンを選ぶのが貪欲法(greedy)で、出力は安定しますが、同じ言い回しの繰り返しに陥りやすくなります。確率に比例してくじを引くのがサンプリングで、ここで効いてくるのが温度(temperature)です。温度 T はスコアを T で割ってから softmax にかける操作で、T を 1 より小さくすると分布が尖って上位の候補に確率が集まり、1 より大きくすると分布が平らになって、低い確率の候補も選ばれやすくなります。T を 0 に近づけると貪欲法と同じになります。
実務では、温度に加えて、確率の高い順に合計 p(たとえば 0.9)に達するまでの候補だけからくじを引く top-p(nucleus sampling)や、上位 k 個に絞る top-k を組み合わせます。事実を答えるタスクや、JSONのように形式が決まった出力には低い温度、アイデア出しや文章の言い換えには高めの温度、というのが基本の使い分けです。なお温度を 0 にしても、サーバ側で複数のリクエストをまとめて計算するときの浮動小数点の計算順の違いなどで、出力が毎回完全に同じになるとは限りません。
下の部品は、小さな例文集から数えた本物の確率で動く「ミニ言語モデル」です。候補の棒を押すか「1本引く」を押して、文が1トークンずつ伸びていく様子と、温度を上げたときに脱線しやすくなる様子を確かめてください。
候補の棒を1本押すと、そのトークンが文の末尾に積まれ、伸びた文から次の候補が計算し直されます。「1本引く」なら確率どおりにくじを引きます。
訓練の三段階 — 予測機をアシスタントに仕立てる
いま使われている対話型の LLM は、大きく三段階で作られます。第一段階の事前学習(pre-training)では、ウェブ・書籍・コードなど数兆トークン規模のテキストで「次のトークン予測」をひたすら学習します。機械学習としては桁外れの規模で、数千台規模のGPUを数か月動かします。この時点のモデル(ベースモデル)は博識ですが、質問を渡しても答えるとは限らず、「質問が並んだ文書の続き」として別の質問を書き始めたりします。
第二段階の指示チューニング(instruction tuning、教師ありファインチューニング)では、「指示と模範回答」のペアを使ったファインチューニングで、指示に答えるという形式を教えます。第三段階の選好学習では、同じ質問への複数の回答に人間が優劣を付け、その好みに沿うようにモデルを調整します。代表的な手法がRLHF(人間のフィードバックによる強化学習)で、好みのデータから直接学ぶ DPO などの手法も使われています。丁寧さ・役立ち方・危険な依頼を断る振る舞いは、主にこの段階で作られます。
この区別は、実務で「モデルに社内知識を覚えさせたい」と考えたときに効いてきます。後段の追加学習は主に振る舞いを変えるもので、新しい事実を確実に覚えさせるのは苦手です。最新の情報や社内文書は、検索して文脈に渡すRAGで補うのが定石です。
作業記憶の上限と、もっともらしい誤り
LLM は訓練後に重みが固定されており、会話を通じて何かを記憶するわけではありません。チャットで話が通じているように見えるのは、アプリが毎回それまでの会話を丸ごと入力に含めて送り直しているからです。一度に入力できる量にはコンテキストウィンドウという上限があり、あふれた分はモデルからは見えなくなります。
もう一つの本質的な限界がハルシネーションです。モデルは「真実を述べる」ようにではなく「もっともらしい続きを選ぶ」ように訓練されているので、知らないことを聞かれても、確率の高い語をつないだ自然な文章を作ってしまいます。存在しない論文や実在しない関数名は、上で見た1トークンずつの選択が、事実の裏付けなしに進んだ結果です。根拠となる資料を文脈に渡す、出典を示させる、人が確かめる工程を置く、といった「誤りうる部品」としての設計が前提になります。
API経由で使う — チャット補完の往復
アプリケーションからは、通常プロバイダのAPIをチャット補完(chat completion)の形式で呼び出します。system(アプリ側が決める役割・制約)、user(ユーザーの発言)、assistant(モデルの過去の応答)という役割付きメッセージの配列をJSONで送り、続きとなる応答を受け取ります。サーバ側は会話の状態を持たないので、会話を続けるにはメッセージ履歴を毎回すべて送り直します。
料金は入力と出力のトークン数に対する従量課金が一般的で、履歴を送り直す構造上、会話が長くなるほど1往復あたりのコストが増えます。生成が終わるのを待たずに1トークンずつ受け取るストリーミングは、多くの API でServer-Sent Eventsを使って実装されており、体感速度を大きく左右します。どんな指示を与えるかで出力の質が大きく変わるため、プロンプトエンジニアリングが LLM を部品として使いこなすための隣接スキルになります。さらに、モデルに外部の関数の呼び出しを組み立てさせるFunction Callingと、その呼び出しと結果の読み取りを繰り返して目標まで進むAIエージェントへと、使い方の形は広がり続けています。
試問
例文集から数えた確率で動くミニ言語モデルが、「今日は」の続きを1トークン(語の断片)ずつ書きます。「1本引く」を押すと、0〜1の乱数が確率の帯のどこに落ちたかで次のトークンが選ばれ、文に足されます。温度 T のスライダーで確率の分布の形を変えられ、「書き直す」で文を最初からやり直せます。
候補の棒を1本押すと、そのトークンが文の末尾に積まれ、伸びた文から次の候補が計算し直されます。「1本引く」なら確率どおりにくじを引きます。
