LLM は入力として C 個のトークン ID 列を受け取り、入力と同じ C 個の(語彙数の次元数を持つ)確率分布を出力します。
C の各行の確率分布は、その位置の次にくるトークンの予想を表します。

説明は以下のシェイプを仮定します。

  1. Embedding レイヤ:トークン ID 列を埋め込みベクトルに変換します
    • Embedding レイヤの重み行列は、語彙数 $V$ 、埋め込みベクトルの次元数 $E$ の行列 $(V, E)$です
  2. Positional Encoding:各トークンの位置情報を埋め込みベクトルに加算します
    • Attention 自体は入力の並び順を区別できない(順列不変)ため、位置情報を別途加算する必要があります
  3. Attention と FFN ( Feed-Forward Network )による変換が繰り返し実行されます
    • Attention と FFN を合わせて Transformer ブロックと呼びます
    • 各サブレイヤ(Attention、FFN)は残差接続と LayerNorm(Add & Norm)とセットで使われます
  4. Linear (線形変換): 各トークンの埋め込みベクトルを語彙サイズと同じ次元数に変換します(出力をスコアと呼びます)
  5. Softmax 関数: スコアから次に出現するトークンの確率分布を生成します

Transformer ブロック( Attention と FFN )を通過するデータは、一貫して同じ形状を維持します。
例では $(C, E)$ になります。
この一貫性により Transforer ブロックによる複数回の処理が可能となります。

Embedding レイヤ

Embedding レイヤ(埋め込み層)は、トークン ID(入力)に対応する重み行列に格納された分散表現ベクトルを出力します。

重み行列

順伝播

  • 入力:トークン ID(整数)、例えば id = 42
  • 出力: W[42]、つまり 42 行目のベクトル(分散表現ベクトルの次元数 $E$ )
  • 実装上は(入力トークンの) one-hot ベクトルとの行列積と数学的に等価ですが、実際は単なるテーブルルックアップ(行の抜き出し)として実装されます

学習との関係

この重み行列 $W$ は学習によって更新されます。
結果として、意味的・文法的に近いトークンが空間上で近くなるよう分散表現が形成されます。

補足:バッチ処理の場合

入力が (バッチサイズ $B$, コンテキスト長 $C$) なら出力は (バッチサイズ, コンテキスト長, $E$ ) のテンソルになります。

Positional Encoding

Self-Attention の計算($Softmax(Q\cdot K^\top/\sqrt{D})\cdot V$)は、トークンの並び順を入れ替えても演算結果が入れ替わるだけで、計算そのものは変わりません(順列不変性)。

NOTE
RNN は $h_t$ が $h_{t-1}$ に依存する再帰構造そのものが「順序」を表現していました。
Attention にはこの再帰構造がないため、「これは何番目のトークンか」という情報を Embedding レイヤの出力に明示的に加算する必要があります。

Embedding レイヤの出力 $x$(shape: $(C, E)$)に、同じ shape の位置埋め込み $PE$ を加算してから Transformer ブロックへ渡します。

\[x' = x + PE \quad \text{shape: } (C, E)\]
  • 連結(concat)ではなく加算である点に注意(次元数 $E$ を増やさずに位置情報を混ぜ込む)

代表的な方式

方式 学習 仕組み 代表モデル
Sinusoidal しない(数式で決定) $PE_{(pos,2i)}=\sin(pos/10000^{2i/E})$、$PE_{(pos,2i+1)}=\cos(pos/10000^{2i/E})$ を加算 元祖Transformer(Vaswani et al., 2017)
Learned する Embedding レイヤと同様の重み行列 $(C_{\max}, E)$ から位置 $pos$ の行をルックアップして加算 BERT, GPT-2
RoPE(Rotary Position Embedding) しない(数式) 加算ではなく、Attention 計算直前に $Q,K$ を位置に応じて回転 LLaMA, GPT-NeoX 系

NOTE
Sinusoidal は三角関数の加法定理により $PE_{pos+k}$ が $PE_{pos}$ の線形結合で表せるため相対位置を学習しやすく、訓練時より長い系列にもある程度外挿できます。
RoPE は $Q\cdot K^\top$ の内積が2トークンの絶対位置ではなく相対位置($pos_i-pos_j$)にのみ依存するという性質を持ち、近年の主要LLMで採用が進んでいます。

Attention と FFN (Transformer ブロック)

Attention と FFN を合わせて Transformer ブロックと呼びます。 Transformer ブロックを通過するテンソルの形状は一貫しています($(C, E)$)。
そのため Transformer ブロックを複数回適用することができます。

詳細は Attention を参照。

FFN(Feed-Forward Network)

Attention が「トークン同士の関係性(文脈)」を混ぜ合わせる層であるのに対し、FFN は各トークンを独立に(他のトークンを見ずに)変換する層です。Attention ブロックの出力(shape: $(C, E)$)の各行(各トークンのベクトル)に対して、同じ重みを使った同一の変換を並列に適用します。

\[\text{FFN}(x) = \text{activation}(x\cdot W_1+b_1)\cdot W_2+b_2\]
記号 shape 役割
$x$ $(C, E)$ Attention ブロックの出力
$W_1, b_1$ $(E, E_{ff}), (E_{ff},)$ 次元を一度拡張($E_{ff}$ は通常 $E$ の4倍程度)
activation — 非線形変換(元祖Transformerは ReLU、BERT/GPT/ViT は GELU
$W_2, b_2$ $(E_{ff}, E), (E,)$ 元の次元 $E$ に戻す

NOTE
Attention は「トークン間($C$方向)」で情報を混ぜ、FFN は「1トークン内($E$方向)」で情報を加工します。この役割分担を Transformer ブロックの中で交互に繰り返すことで、文脈の混合と非線形な特徴抽出の両方を実現しています。

残差接続(Residual Connection)

Transformer ブロック内の各サブレイヤ(Attention、FFN)は、入力をそのまま出力に足し合わせる残差接続を持ちます。

\[\text{output} = x + \text{Sublayer}(x)\]

NOTE
ResNet(画像認識)と同じ発想です。Sublayer が「何もしない($\text{Sublayer}(x)\approx0$)」ことを学習すれば恒等写像に近づけるため、層を深く積んでも生じやすい勾配消失を緩和できます。

LayerNorm(Layer Normalization)

\[\text{LN}(x) = \frac{x-\mu}{\sqrt{\sigma^2+\epsilon}}\odot\gamma+\beta\]
  • $\mu,\sigma^2$:1トークンの埋め込みベクトル内($E$ 次元方向)で計算した平均・分散
  • $\gamma,\beta$:学習可能なスケール・シフトパラメータ(shape: $(E,)$)

BatchNorm がバッチ方向に統計量を取るのに対し、LayerNorm は特徴量方向($E$ 次元)に統計量を取るため、系列長やバッチサイズが可変な NLP と相性が良く標準的に使われます。

Post-LN と Pre-LN

残差接続と LayerNorm を組み合わせる順序に2つの流儀があります。

  数式 特徴
Post-LN(元祖Transformer) $\text{LN}(x+\text{Sublayer}(x))$ 層を深く積むと学習が不安定になりやすく、学習率のウォームアップが事実上必須
Pre-LN(GPT-2以降の主流) $x+\text{Sublayer}(\text{LN}(x))$ 恒等写像の経路に LayerNorm が挟まらないため勾配が素直に流れ、深い層でも学習が安定しやすい

Linear と Softmax

形状が $(C, E)$ のテンソルは、線形変換によって $(C, V)$ の形状に変換されます。
$V$ はトークンの語彙サイズを表します。

Softmax 関数によって C 個の確率分布が得られます。 各位置の確率分布は、その位置の次にくるトークンの予想を表します。

NOTE
末尾の単語の次にくるトークンは、学習データ的には多くの場合文末トークン(EOS)やパディングトークンになります。
推論時においては、次の新しい文章の始まりの単語を予測する挙動になります。

以下の解釈は Attention にマスクが設定(つまり未来を考慮しない)されている場合に限ります。

C = 5 ( This is a pen .) 
V = 1000
         0     1             999  
This [0.001, 0.021, ......, 0.002]
is   [0.020, 0.001, ......, 0.060]
a    [0.020, 0.001, ......, 0.060]
pen  [0.100, 0.001, ......, 0.001]
.    [0.034, 0.021, ......, 0.071]

This の確率分布 [0.001, 0.021, ......, 0.002] は This の次にくるトークンの確率分布を表します
is の確率分布 [0.020, 0.001, ......, 0.060] は This is の次にくるトークンの確率を表します
a の確率分布 [0.020, 0.001, ......, 0.060] は This is a の次にくるトークンの確率分布を表す
pen の確率分布 [0.100, 0.001, ......, 0.001] は This is a pen の次にくるトークンの確率分布を表します
. の確率分布 [0.034, 0.021, ......, 0.071] は This is a pen . の次にくるトークンの確率分布を表します

※ . の次にくるトークンは、学習データ的には多くの場合文末トークン(EOS)やパディングトークンになります。推論時においては、次の新しい文章の始まりの単語を予測する挙動になります。