世界を動かす技術を、日本語で。

LLMを理解するために必要な数学

概要

この記事は、Large Language Model(LLM)がどのように動作するかを、AIの専門知識がない技術者向けに解説。 高校数学レベルの知識(ベクトル・行列)があれば理解可能。 主に推論フェーズ(学習済みAIの利用)に必要な数学を中心に説明。 LLM内部の「高次元空間」の使い方や意味、行列による射影について解説。 次回はニューラルネットワーク層の詳細へと続く。

LLMの「高次元空間」入門

  • LLM の理解に必要な数学は、高校で習う ベクトル・行列 程度
  • 本記事では 推論 (既存AIの利用)に必要な知識に限定し、 学習プロセス は次回以降で解説予定

ベクトルと高次元空間

  • ソフトウェアエンジニアが使う「ベクトル」は 数値の配列 を指す
  • 数学的には、ベクトルは n次元空間 での「距離と方向」または「点」を表現
  • 2次元例:(2,−3)は「右に2、下に3」の点、3次元例:(5,1,−7)は「右に5、上に1、奥に7」の点
  • 次元が増えても 概念は同じ、ただし視覚化は困難
  • LLMでは、 ロジットベクトル が「次トークンの確率」を多次元空間で表現

Vocab Space(語彙空間)

  • LLMのロジットは、 各トークンごとに1つの数値 を持つベクトル
    • 例:GPT-2は 50,257個のトークン → ロジットベクトルは50,257次元
    • 例:トークンID464は"The"、ロジットベクトルの464番目が"The"の出現確率
  • このベクトル空間を vocab space (語彙空間)と呼ぶ
  • ロジットベクトルは「 乱雑な空間」であり、同じ確率分布を複数のベクトルで表現可能
  • softmax関数 で正規化することで、「 確率分布」となり、全ての値が0〜1の範囲かつ合計1
    • 例:(1,2,3)と(−9,−8,−7)はsoftmax後に同じ分布(約0.09,0.24,0.66)になる
    • (1,2,5)は同じ順位だが、3つ目のトークンの確率がより高い分布(約0.02,0.05,0.94)になる
  • 正規化後の空間では、 one-hotベクトル (1つだけ1で他は0)も重要な役割

Embedding Space(埋め込み空間)

  • 埋め込み空間 は「意味」を表現する高次元空間
    • 例:「domestic cat」「lion」「tiger」は近く、「dog」「wolf」は別のクラスタ
    • 用途に応じて、様々な意味空間が構築可能
      • 動物学用(分類群ごと)、日常用途(ペット/野生動物ごと)など
      • 品詞(動詞・名詞・形容詞)のクラスタリングも可能
  • 埋め込み空間では、 ベクトルの長さ よりも「方向」が重視されることが多い
    • 例:(1,2)と(8,16)は同じ方向なので、実質的に同じ意味とみなす場合も

行列による射影(プロジェクション)

  • 行列 はベクトルを積み重ねたもの
    • 例:(2,−3)と(5,1)を並べて2×2行列に
  • 行列のサイズは「行×列」で表記(例:2×3行列)
  • 行列の積は 幾何学的変換 (回転・射影)を実現
    • 例:2次元回転行列[cosθ−sinθ; sinθcosθ]で点群をθ度回転
  • 機械学習では 行ベクトルを縦に積む (row-major)形式が主流
    • 計算時は X·R (点群×変換行列)の形で射影
  • 3次元→2次元のような 次元削減 も行列で可能
    • 例:n×3行列(3次元点群)×3×2行列→n×2行列(2次元射影)
  • d1×d2行列 はd1次元空間→d2次元空間への射影
    • 例:50,257×768行列で50,257次元→768次元への射影
  • 射影は「 情報の喪失」を伴う場合がある
    • 例:3次元→2次元射影で元の奥行き情報は復元不可能

まとめ

  • LLM内部では、 ベクトル・行列 を使って多次元空間間の射影や意味表現を実現
  • 「語彙空間」「埋め込み空間」など、用途に応じた高次元空間を使い分け
  • 行列積は「空間間の変換」として直感的に理解できる
  • 次回はこの仕組みを使った ニューラルネットワーク層 の動作にフォーカス予定

Hackerたちの意見

まあ、要するに - 基本的な線形代数、基本的な確率、解析(expみたいな関数)、勾配。ある時、これらの概念をみんながインタラクティブに体験できるように、ステップバイステップの入門を作ろうとしたことがあるんだ。PyTorchでどう表現するかも見られるようにね。

でも、これは本当に「理解」しているってことなのか、それともただ公式を書けるだけなのか…?

これは_大きな_言語モデルについてではないよ。これは単語ベクトルやトークン埋め込みのための数学を説明している。多くの人がここで混乱しているのがわかる。彼らはLLMが次の単語を統計的に予測するためだけにこれをやっていると思っているけど、それは2020年以前の話。彼らは1.8兆以上のパラメータを持つトランスフォーマーネットワークを無視している。埋め込みはその巨大な機械の入力に過ぎない。あの兆単位のパラメータの中で何が起こっているのかは、正確にはわからないんだ。

え、つまりそれは高次元の行列の掛け算じゃないってこと?

でも、LLMを理解するためにはこの数学が必要だよね。理解を深めるために必要な数学ではないけど。

でも、私たちはやってるよ。次のトークンを予測するために一連の数学的関数が使われてるんだ。魔法じゃないけど、そう見えるよね。みんなまるで中世に戻ったみたいで、マーリンが帽子からウサギを消したみたいに振る舞ってる。

著者が言ってた「Build a Large Language Model (from Scratch)」って本読んだ人いる?カーパシーの動画を見た後、もっと深く掘り下げるための良い資料を探してるんだ。

いい感じだよ。今、取り組んでるところ。

うん、ほんとにいいね。

LLMの仕組みをざっくり理解したいなら、[1]は見る価値あるかな?

こちらが本で使われているコードだよ - https://github.com/rasbt/LLMs-from-scratch

これはLLMの一部として行われる計算の技術的な詳細だよ。最も低レベルのMLライブラリを書いている人以外には全く意味がない(つまりほとんどの人にとって)。これではLLMが実際にどう機能しているかを理解するのには役立たない。まるでICE車の仕組みを説明するのにガソリンの化学的特性から始めるようなものだ。確かにそれが全ての基礎だけど、車がどう動くかを説明するのはそこから始めるべきじゃない。

Hacker Newsで議論の続きを見る