Transformer の風景
続き→後編はこちら
前編──単線の登山鉄道としての LLM(比喩篇)

一本の単線が、山肌をらせん状に登っていく。
列車は麓の駅を出発し、途中の駅を一つずつ通過しながら、山頂駅へ向かう。駅は少しずつ標高を上げていく。駅の数はモデルによって異なるが、大規模なモデルでは非常に多い。ここでは分かりやすく「約 100 の駅」と考えておこう。
ChatGPT や Claude のような大規模言語モデル(LLM)に文章を入力すると、しばらくして自然な返事が返ってくる。表面的には、「文字を入れたら、文字が返ってきた」だけに見える。
だが、その応答には、ときに不思議な癖がある。妙に調子よく相槌を打つ。こちらの言うことに、なんでも同意してくれる。ときには、もっともらしい顔で事実でないことを語る。なぜ、そうなるのか。
こうした振る舞いを「なんとなく怖い」「賢すぎて不気味だ」で終わらせず、その理由を腑に落とすには、機械の中で何が起きているのかを、一度のぞいてみるのがいちばんの近道である。
この仕組みは、2017 年に発表された「Attention Is All You Need」という論文で初めて世に出た。僕は、この論文の説明をできるだけ忠実にたどってプログラムとして実装し、論文の狙いどおりに動かしてみた。そのコードは僕の GitHub リポジトリにある。しかし、この分野に親しみのない人にとって、そのコードや専門的な解説は、おそらく極めて不可解なものだろう。
そこで、できるだけ正確に、しかし誰にでも届く言葉で、その中身を語ってみたい。そのために、一つの比喩を用意した。登山鉄道である。
単線で、山の周りをらせん状に登っていく鉄道。途中には、たくさんの駅がある。列車には、多くの乗客が乗っている。乗客たちは、各駅で互いに耳を傾け、自分の姿を少しずつ変えていく。そして山頂で、次に列車へ加わるべき新しい乗客が決まる。これが、Transformer という機構の風景である。
ただし、この比喩には、最初に一つ、大事な但し書きを置いておきたい。この風景の主役は、動く列車ではない。動かない山のほうである。 なぜそう言えるのかは、読み進めるうちに、だんだんと明らかになる。まずは列車を追いかけながら、山を眺めていこう。
登山鉄道としての Transformer、その全景
一本の単線が、山肌をらせん状に登っていく。
列車は麓の駅を出発し、途中の駅を一つずつ通過しながら、山頂駅へ向かう。駅は少しずつ標高を上げていく。駅の数はモデルによって異なるが、大規模なモデルでは非常に多い。ここでは分かりやすく「約 100 の駅」と考えておこう。この「駅」が、技術的には Transformer の層(layer)にあたる。
Transformer は、一つの巨大な箱ではない。いくつもの層が積み重なった構造である。入力された各トークンは、最初の層を通り、次の層を通り、さらに次の層を通って、最後の層に到達する。その過程で、各トークンの内部表現、つまり後述するベクトルの姿は、少しずつ変わっていく。
そこで、登山鉄道の比喩は、次のように対応させることができる。
| 比喩(登山鉄道) | 技術(Transformer) |
|---|---|
| 列車に乗る乗客 | トークン |
| 登山鉄道の駅 | Transformer の層 |
| 駅での乗客同士の囁き合い | Self-Attention(自己注意) |
| 乗客の姿の変化 | ベクトル表現の更新 |
| 山頂駅 | 最終層 |
| 山頂で決まる次の乗客 | 次トークン予測 |
「単線」というと、単調な機械に聞こえるかもしれない。だが、この単線の内側では、極めて豊かな相互作用が行われている。
乗客同士の囁き合い
列車を外から見れば、ただ山を登っているだけに見える。
しかし車内では、乗客たちが同時に互いの声を聞き、意味を取り込み、文脈の中で姿を変えている。ここに Transformer の面白さがある。
乗客としてのトークン
列車の乗客がトークンだと言ったが、これをもう少し丁寧に説明しよう。
トークンとは、言語モデルが文章を扱うための単位である。人間は文章を「文字」や「単語」として見る。しかし LLM は、文字をそのまま読んでいるわけではない。文章をいくつかの単位に分割し、それぞれをトークンとして扱う。
たとえば「明日の天気は?」という文を考える。人間には一つの短い質問に見える。だがモデルの内部では、「明日」「の」「天気」「は」「?」のような単位に分けられることがある。
実際の分割はモデルやトークナイザによって異なるが、重要なのは、乗客の単位が文字そのものではない、ということである。
「明」が一人、「日」が一人とは限らない。「明日」というまとまりが一人の乗客になることもある。「すみません」のような頻出表現が、一つのまとまりとして扱われることもある。
これは、設計者が最初から「意味で切ろう」と細かく命令したからではない。多くの場合、データの中で頻繁に現れる文字列を機械的にまとめていくと、結果として、意味のまとまりに近い単位が現れる。人間がよく使うまとまりは、自然言語の中でかなり重なっているからである。
切符と乗客の姿──Embedding と位置
乗客は、切符を持って列車に乗る。この切符には、「自分がどのトークンであるか」を示す番号が書かれている。これがトークン ID である。
しかし、切符番号のままでは、コンピューターは計算に使えない。「明日」という語を、そのまま機械が意味として理解しているわけでもない。モデルの内部では、そのトークン ID が、高次元の数値ベクトルへと変換される。これが Embedding(埋め込み)である。
「明日」という語は、人間にとっては「明日」という意味を持って眼前に現れる。しかし、列車の中に座っている乗客、つまりトークンは、それぞれが数千次元の数値の並び、すなわち高次元のベクトルという姿をしている。
高次元のベクトルとは、平たく言えば、たくさんの数値の並びである。初等数学では、ベクトルを x, y のような二つの座標で習ったかもしれない。高次元とは、その座標軸が極めて多い、ということである。
それぞれの軸が何を意味するかに、人間に分かる名前がついているわけではない。いまはその中身を理解する必要はない。「乗客は、ただの一語ではなく、数千個の数値でできた姿を持っている」とだけ押さえておけば十分である。
さらに、乗客には席番号も与えられる。同じ「明日」というトークンでも、文のどこに現れるかによって役割は変わるからである。文脈の冒頭にいるのか、途中にいるのか、直前にいるのか。その位置情報も、モデルにとって重要である。
つまり、乗客は二つのものを持って列車に乗る。
一つは「自分が何者であるか」(Embedding)。もう一つは「文脈の中のどこにいるか」(位置情報)。この二つが合わさって、乗客の最初の姿が決まる。
学習段階──無数の登山が、山を作る
ここで、登山鉄道そのものが、どのように作られるのかを考えておこう。
LLM には大きく二つの段階がある。第一が学習段階、第二が推論段階である。学習段階で山を作り、推論段階でその山を使う。まず、作るほうの話である。
そして、ここからが、この比喩のいちばんの見どころである。
山は、はじめ空っぽだった
学習の前、山には何もない。線路はあっても、駅は空っぽで、駅員は何も知らない。どの乗客の声を、どの文脈で、どれくらい重く聞くべきか。その作法を、まだ誰も身につけていない。
そこへ、列車が登ってくる。
ただし、一本ではない。コーパス、すなわち学習に使う文章の数だけ、列車がある。 一本の列車は、一つの文章を乗せている。膨大な数の列車が、それぞれの文章を乗せて、次々とこの同じ山を登っていく。
一本の列車が登るたびに、何が起きるか。各駅で乗客同士が囁き合い、その「どの声をどれだけ聞いたか」という痕跡が、ほんの少しだけ、駅に刻まれる。一本目が通り、駅にかすかな痕跡を残す。二本目が通り、それを少し書き換える。三本目、四本目……と、何兆本もの列車が、それぞれの文章という経験を、駅に少しずつ堆積させていく。地層のように。
何兆本もの列車が登り終えたとき、山の各駅には、膨大な痕跡が積み重なっている。これが「重み」である。専門的には、モデルのパラメータ、あるいは重みと呼ばれる、あの膨大な数値の集まりは、こうして駅に堆積した経験の地層にほかならない。
具体的には、次のものが、こうして学習によって定まる。
| 比喩(学習で駅に堆積するもの) | 技術(学習で定まる重み) |
|---|---|
| 切符番号から乗客の姿を決める名簿 | Embedding の表 |
| 各駅で、誰の声をどう聞くかの作法 | Attention の重み(Q・K・V を作る行列) |
| 囁き合いの後で姿を整える手直しの仕方 | Feed Forward Network の重み |
| 山頂で次の乗客の候補表を作る規則 | 出力、すなわち語彙への確率へ変換する重み |
学習段階とは、要するに、無数の登山を通じて、この膨大な数値の集まりを、少しずつ望ましい値へと育てていく作業のことである。
どうやって育てるのか──予測と答え合わせ
では、列車が一本登るとき、駅の痕跡は、どんな理屈で書き換えられるのか。
基本は、徹底した答え合わせの繰り返しである。
学習の基本動作は、文章の途中までを読ませ、「次に来る語」を予測させることである。重要なのは、ここでは正解がすでに手元にある、という点である。コーパスは完成した文章なので、次に実際に来る語が何かは、最初から分かっている。
たとえば「明日の天気は」という並びを読ませ、次の語を予測させる。モデルは「晴れ」かもしれない、「雨」かもしれない、と確率を割り振って答える。ところが、コーパスでの実際の続きは、たとえば「晴れ」だったとする。
ここで答え合わせが行われる。モデルの予測と、本当の続き、つまり正解とのズレを測る。ズレが大きければ、「次はもう少し正解に近づくように」と、駅に刻まれた痕跡、すなわち重みを、ほんの少しだけ修正する。この修正を、列車を変え、文章を変え、箇所を変え、膨大な回数くりかえす。
学習段階の心臓部は、この「予測する → 正解と照らす → ズレた分だけ重みを直す」というループにある。人間が一つひとつ規則を教え込むのではない。機械が、自分の予測の誤りから、自分で駅の痕跡を書き換えていくのである。
このループを通じて、山は少しずつ傾向を覚えていく。「明日」と「天気」は一緒に現れやすい。「僕は」と来れば、その後に動詞や感情の表現が続きやすい。法律文書には法律文書らしい言い回しがあり、詩には詩らしいリズムがあり、会話には会話らしい応答の型がある。こうした無数の傾向が、駅の重みの中に折り畳まれていく。
ただし、注意すべきことがある。モデルは、人間のように意味を明示的な辞書として持っているわけではない。「明日とは未来の日である」という定義を、黒板に書いて覚えているわけではない。山が手にするのは、膨大な語の現れ方の中から、答え合わせによって調整された重みの集まりだけである。
言い換えれば、学習を終えた山とは、人類が書き残した膨大なテキストの経験が、駅という場所に重みとして折り畳まれた、凍結された経験の総体なのである。
学習段階での「未来は見えない」というルール
学習段階には、もう一つ大切なルールがある。予測する時点で、未来の答えを見てはならない、ということである。
モデルの訓練目的は「次の語を予測すること」である。もし予測する瞬間に、これから来る語をのぞき見できてしまえば、それは答えを写すカンニングになってしまい、予測の訓練にならない。
そこで Transformer には、未来のトークンを見せないための仕組みが組み込まれている。これが因果マスク(Causal Mask)である。各位置では、自分より前の語と自分自身までしか参照できず、まだ先にある語は隠される。
ここで、登山鉄道の比喩について、一つ正直に断っておきたい。
推論のとき、つまり実際に応答を作るときは、乗客は一人ずつ順に乗ってくる。だから「自分より前の乗客しか見られない」というのは自然である。一方、学習のときは、コーパスの文章全体を一度に列車へ乗せてしまう。乗客は最初から全員そろっている。
それでも、各乗客には「自分より未来側にいる乗客の声は聞かない」というルールが課される。全員が乗ってはいるが、後ろを振り返って未来を見てはいけない、ということである。
このルールがあるからこそ、文章全体を一度に処理しながらも、各位置で「ここから先を知らないつもりで、次を当てる」という訓練が成立する。文脈の冒頭にいる乗客は自分自身しか見ない。途中の乗客は、それ以前の乗客までを見る。最後の乗客は、その時点までのすべての乗客を見る。この前へしか開かれていない非対称性が、次の語を予測するという仕組み、すなわち自己回帰の土台になっている。
推論段階──出来上がった山を、機関車が登る
次に、推論段階を見てみよう。推論段階とは、僕たちが実際に ChatGPT や Claude にプロンプトを入力し、応答を受け取る段階である。
ここでは、学習済みの山がすでにそびえている。前章で見たとおり、各駅には、無数の登山が堆積させた膨大な経験が、重みとして折り畳まれている。線路は敷かれ、駅は経験を蓄え、駅員は仕事の作法を身につけている。
学習のときは、無数の列車が登って山を作った。推論のときは、その出来上がった山を、今度はたった一台の機関車が登っていく。この機関車自身は、何も知らない。山が、知っている。各駅に折り畳まれた経験が、登ってくる乗客を導いていく。
では、ユーザーが質問を入力すると、何が起きるのか。
たとえば、
「明日の天気は」
と入力したとする。
この文章は、まずトークンに分割される。それぞれのトークンは切符番号、つまりトークン ID を持ち、Embedding の名簿によって高次元ベクトルへ変換される。さらに、文脈の中での位置情報が与えられる。こうして、乗客たちが機関車に乗り、出発する。
なぜ機関車は駅を通過しなければならないのか。なぜ各駅で、乗客同士の囁き合い、すなわち Self-Attention が行われるのか。
目的は一つ。山頂で、次に来るトークンを選ぶためである。
各駅での囁き合い──Self-Attention
「明日の天気は」という文脈のあとに何が来るべきかを決めるには、語と語の関係を調べる必要がある。
「明日」という乗客は、「天気」という乗客の声を聞く必要がある。「天気」という乗客は、「明日」という時間の情報を取り込む必要がある。「は」という乗客は、その後に説明や述語が続きそうだという文法的な役割を帯びる。
こうした関係は、一語だけを見ても分からない。「明日」だけなら、予定の話かもしれないし、旅行の話かもしれない。しかし「明日」と「天気」が同じ文脈に現れると、「明日」は天気予報の時間情報という色合いを強め、「天気」は明日について問われている対象という色合いを強める。
各駅で行われる Self-Attention とは、このように乗客同士を互いに照らし合わせ、文脈に応じて姿を染め直していく作業である。
では、その「照らし合わせ」を、機械はどう計算しているのか。技術的には、各乗客のベクトルから、Query・Key・Value という三種類の情報が作られる。
| 三つの情報 | 意味(比喩) |
|---|---|
| Query(クエリ) | 僕はいま、どんな情報を探しているか |
| Key(キー) | 僕は、どんな情報として探されうるか |
| Value(バリュー) | 僕から渡せる中身は何か |
ある乗客の Query と、ほかの乗客の Key とを照合することで、その乗客が誰の情報をどれだけ重く聞くべきかが決まる。そして、その重みに応じて Value を受け取り、自分の姿を更新する。これが Self-Attention である。
ここで大事なのは、「誰の声をどれだけ重く聞くか」を決めているのが、その駅に堆積した経験、すなわち学習で刻まれた重みだ、という点である。駅員は、無数の登山を通じて体得した作法に従って、「この文脈では、この乗客の声を重く聞きなさい」「この声は少しだけでよい」と調整する。その場の思いつきではない。山が覚えていることを、引き出しているのである。
なお、この Query・Key・Value が実際にどんな計算で重みになるのか、その「駅の中身」は、後編で、僕が書いたコードを開けて、数字が動くところまでお見せする。
その結果、乗客の姿は変わっていく。最初に乗ったときの「明日」は、ただの「明日」だった。しかし、いくつもの駅を通るうちに、それは「天気について尋ねられている明日」になっていく。「天気」も同様に、「明日の状態として問われている天気」へと変わっていく。
山頂で次の乗客が決まる──次トークン予測
山頂に着くころには、最新の乗客は、それまでの文脈を深く吸い込んだ姿になっている。山頂駅で、車掌はその姿を見る。そして、語彙全体に対して確率を割り振る。
「晴れ」が来る確率、「雨」が来る確率、「曇り」が来る確率、「どう」が来る確率……。
実際には、数万種類のトークンそれぞれに確率が与えられる。膨大な数の候補が、山頂で一斉に評価される、と言ってもよい。そして、この確率分布から、次のトークンが一つ選ばれる。常に最も確率の高いものを選ぶこともあれば、確率に応じて少し揺らぎを持たせることもある。この揺らぎ加減に関わるのが、温度(temperature)と呼ばれるパラメータである。
ここで、この比喩について戸惑いやすい点を、先回りして片づけておきたい。「新しい乗客が一人決まるたびに、機関車はまた麓まで戻って登り直すのだろうか」という疑問である。
答えは、戻らない。
選ばれたトークンは、文脈の列に加えられる。そして、その新しい乗客を含んだ文脈を前提に、また次のトークンが予測される。このとき、すでに登った乗客たちは、山頂側にとどまっていて、降りてはこない。新しく決まった一人だけが、麓から入り、すでに駅に居る先輩たちの記録を参照しながら登っていって、列の最も山頂寄りに加わる。
つまり、麓に戻るのは「新しい乗客の入口」だけであって、機関車そのものが何度も山を往復するのではない。生成とは、同じ列車が麓へ戻って登り直すことではなく、山の斜面に連なる乗客の列が、山頂側へ一語ずつ伸びていくことなのである。この、先輩たちの記録を残しておく仕組みについては、巻末の補足で改めて触れる。
したがって、推論段階で機関車が走る理由は、はっきりしている。
機関車は、ただ入力文を眺めるために走るのではない。各駅に堆積した経験を使って乗客同士の関係を計算し、最新の乗客の姿を文脈に染め上げ、山頂で次のトークンを選ぶために走るのである。
出力は消えない──お追従はどこから来るのか
ここで、冒頭の問いに戻ろう。なぜ LLM は、あれほど調子よく相槌を打つのか。
鍵は、いま見た「一語ずつ伸びていく」という仕組みにある。いったん出力された語は消えない。それは次の予測の前提に組み込まれる。だから、ある調子の語がいったん出ると、その語が次の文脈の一部となり、その後の生成を同じ方向へ引っ張る。
共感的な語が続けば、次の語も共感的な方向へ寄りやすくなる。断定的な語が続けば、次も断定的な方向へ寄りやすくなる。慎重な語が続けば、次も慎重な方向へ進みやすくなる。応答は、常に過去に自分が出した語を背負いながら、次の一語へ進む。
さらに根が深いのは、山そのものに刻まれた偏りである。学習段階の後、人間に好まれる応答を大量に学ばせる調整が行われる。すると山は、「好かれる方向」の語に高い重みを置くようになる。お追従とは、機械が意地悪をしているのでも、本心を隠しているのでもない。人間が好む型を山が覚え、その型に沿って次の語を選んでいく。その重みづけの、自然な帰結なのである。
ここに、僕たちが LLM と付き合ううえでの注意点がある。同意してくれたからといって、それが正しさの保証ではない。心地よい応答は、しばしば「正しいから」ではなく、「そう続けるのが、山に刻まれた型に沿うから」選ばれている。
モデルは何を「理解」しているのか
ここで、少し慎重な言い方をしなければならない。
LLM は、人間のように意味を理解しているのか。この問いには、簡単には答えられない。
少なくとも、LLM は人間のように世界を見て、身体を持ち、経験を積んでいるわけではない。空を見上げて「明日は雨が降りそうだ」と感じているわけではない。
一方で、単に文字列を表面的につなげているだけ、とも言い切れない。山には、膨大な言語データを通じて、語と語の関係、文脈の流れ、推論の型、説明の型、感情表現の型が、非常に高次元のパターンとして折り畳まれている。だから、その応答は単なる継ぎ接ぎではない。
しかし、人間の内面的な理解と同じものでもない。
それは、膨大な言語経験から作られた、高次元の予測機構である。いまの段階では、こう言っておくのが最も正直だろう。
まとめ──主役は、山だった
Transformer は、単線の登山鉄道である。だが、この比喩をたどってきて、いちばん大事なことが見えてきた。主役は、動く列車ではなく、動かない山のほうだった。
列車は、一度きりの旅にすぎない。一本の文章を乗せて山を登り、出力を出して、消えていく。学習のときも、推論のときも、列車は登っては去る。
残るのは、山である。無数の列車が登り、各駅に経験を堆積させて作り上げた、あの重みの地層。学習を終えたあとに保存され、配布され、「これが GPT だ」「これが Claude だ」と呼ばれるもの。それは列車ではなく、駅々を抱えた山そのものである。この山こそが、LLM の本体なのである。
複式簿記のレンズで言えば、こう言える。列車は、フローである。一本の文章が処理されて、出力が出て、消えていく、期間中の取引のようなもの。一方、山は、ストックである。無数のフロー(学習データという列車)が通り過ぎたあとに、駅という勘定へ積み上がった残高。僕たちは推論というフローばかりを見て感嘆していたが、その背後で価値を保持しているのは、学習が積み上げたストックとしての山だった。
そして、僕たちが何度も感嘆する「単純な計算から、なぜ意味が生まれるのか」という問いの答えの半分も、ここにある。意味は、その場の計算が生んでいるのではない。計算は、山に折り畳まれた膨大な経験を、引き出しているだけ。意味は、あらかじめ山に堆積されていたのである。
この単純な仕組みから、驚くほど豊かな振る舞いが生まれる。質問に答え、文章を書き、翻訳し、要約し、ときに人間らしく見える応答を返す。だが、その根底にあるのは、次の語を予測するという、ただ一つの機構と、無数の登山が築いた一つの山である。
興味深いのは、これほど単純な機構でも、巨大なデータで訓練すると、設計者が明示的に命じていない性質が現れることである。これを創発的性質と呼ぶことがある。お追従もまた、その一例と見ることができる。
仕組みは魔法ではない。だが、単なる機械仕掛けと言い切るにも、まだ早い。魔法と機械仕掛けの、ちょうど中間に、いまの LLM は立っている。
次回は、この「駅での囁き合い」、すなわち Self-Attention の中身を、僕が実際に書いて動かしたコードで開けてみる。約 100 の駅でくりかえされているのが、結局のところ、どんな計算なのか。そして、その駅になぜ意味が宿るのか。その底まで、ご一緒に降りてみたい。
補足──もう少し先を知りたい方へ
ここからは本筋を離れ、現代の LLM を実際に動かすうえで重要になる、いくつかの応用的な話題に触れる。前編の理解には必須ではないので、興味のある方だけ読んでいただければよい。
補足 1──Prefill と Decode
推論段階は、さらに二つの局面に分けられる。Prefill と Decode である。
Prefill とは、ユーザーが入力した文脈の全体を、最初に一度まとめて処理する局面である。システムプロンプト、会話履歴、ユーザーの新しい質問。これらが一斉に乗客として機関車に乗り、麓から山頂まで一度登る。これが最初の大きな登山である。
Decode とは、その後、応答トークンを一つずつ生成していく局面である。山頂で最初の応答トークンが決まると、それが文脈の列に加わる。その新しい文脈を前提に、次のトークンが予測され、また列に加わる。これを繰り返して、文章が一語ずつ伸びていく。
補足 2──KV キャッシュ(駅員の記憶)
本編で、新しい乗客が決まっても機関車は麓に戻らない、と述べた。すでに登った乗客は山頂側にとどまり、新しい乗客だけが登ってくる、と。だが、ここで自然な疑問がわく。新しい乗客は、登ってくる途中の各駅で、すでに通り過ぎた先輩たちのことを、どうやって知るのか。
ここで使われるのが KV キャッシュである。比喩で言えば、各駅の駅員が持っている記憶である。駅を通過した乗客について、後から参照できる記録を、各駅員が残しておく。
正確に言うと、駅員が覚えているのは「誰が誰にどれだけ注意したか」という結果そのものではない。保存されるのは、後から参照するための Key と Value である。Key は「その乗客を後から探し出すための札」、Value は「その乗客から受け取るべき中身」にあたる。
新しく加わった乗客は、各駅を通るたびに、この駅員の記憶を参照する。過去の乗客が残した Key と Value を見ながら、「誰の情報をどれだけ受け取るべきか」をその場で計算し、自分の姿を更新する。
つまり KV キャッシュとは、列車全体を毎回戻さずに済ませるための記憶装置である。過去の乗客は走り直さない。新しい乗客だけが、その記憶を使って各駅を通る。生成とは、同じ列車が何度も麓へ戻って登り直すことではなく、文脈の列が山頂側へ一語ずつ伸びていくことなのである。
補足 3──長い列車の難点(真ん中に霞がかかる)
近年の LLM は、非常に長い文脈を扱えるようになっている。長い会話履歴、長編の文書、契約書、議事録など、多数のトークンを一つの文脈として扱える。この扱える長さを、コンテキストウィンドウという。
ところが、文脈が長くなると、興味深い問題が起きる。列の真ん中あたりの乗客が、霞んでくるのである。
情報が消えるわけではない。列の中には存在するし、KV キャッシュにも記録は残っている。しかし、次の予測を行うとき、文脈の真ん中にある情報は、冒頭や直近の情報に比べて使われにくくなることがある。
車掌は、始発駅近くの乗客と、山頂側に近い最新の乗客には気づきやすい。だが、非常に長く連なった列の真ん中の乗客は、見落とされやすい。
これは Lost in the Middle と呼ばれる現象である。誰かが「真ん中を忘れるように作ろう」と設計したわけではない。自然言語では、冒頭と末尾に重要な情報が置かれやすい。その構造的な偏りを、大量の文章を通じて山が覚えてしまった結果だと考えられている。これもまた、単純な機構を巨大なデータで訓練したときに現れる、創発的な癖の一つである。
用語対応表
| 比喩(登山鉄道) | 技術(Transformer / LLM) |
|---|---|
| 山そのもの | 学習済みモデルの本体(パラメータの総体) |
| 単線の登山鉄道 | Transformer |
| 乗客 | トークン |
| 切符番号 | トークン ID |
| 乗客の姿(数千次元の数値) | Embedding ベクトル |
| 席番号 | 位置情報(positional encoding) |
| 駅 | 層(layer) |
| 駅に堆積した痕跡 | 重み(パラメータ) |
| 駅での囁き合い | Self-Attention(自己注意) |
| 探している情報 / 探されうる札 / 渡す中身 | Query / Key / Value |
| 姿の手直し | Feed Forward Network |
| 後ろは振り返らないルール | 因果マスク(Causal Mask) |
| 山頂で次の乗客を選ぶ | 次トークン予測 |
| 選び方の揺らぎ加減 | 温度(temperature) |
| 駅員の記憶 | KV キャッシュ |
| 最初の大きな登山 / 一語ずつの登り | Prefill / Decode |
| 真ん中に霞がかかる | Lost in the Middle |
