👌

行列を使って理解する!Transformer の長い文章対応技術

に公開

前回は、イメージで説明したので、今回は、実際の行列で説明をしてみますね

Transformer ベースの大規模言語モデル(LLM)は、どうやって長い文章を処理するのか?
今回は 高校生向け に「行列」を使って分かりやすく解説します!


1. Transformer の基本構造をざっくり理解しよう

Transformer は「単語同士の関係(Attention)」を考えて、文章を処理するモデルです。
このとき 行列の計算 を使います。

(1) 文章を行列にする

例えば、文章「AI はすごい!」を Transformer に入力するとき、単語ごとに数値に変換します。

AI → [0.5, 0.3, 0.8]  
は → [0.2, 0.7, 0.1]  
すごい → [0.9, 0.4, 0.6]  

これらを 行列 にすると、

a = ( \begin{bmatrix} 0.5 & 0.3 & 0.8 \ 0.2 & 0.7 & 0.1 \ 0.9 & 0.4 & 0.6 \end{bmatrix} )

このような 「単語 × 特徴量」 の行列を作ります。

(2) Attention とは?

Attention(注意機構)は「どの単語が、どの単語にどれくらい影響するか?」を考える仕組みです。

行列を使って、

  • 「単語同士の関連度」 を計算 → 行列の掛け算
  • 「重要な情報を強調」 → 行列のスケーリング

を行います。

例:Attention の計算(簡略版)

  1. 単語の行列 a重み行列 w を掛ける。
  2. Attention 行列を計算(a × w)

これによって「どの単語がどの単語と関連が強いか」が分かります。


2. 長い文章に対応するための工夫

(1) 位置情報を工夫する(RoPE & ALiBi)

普通の行列計算では「単語の順番」を考えません。
しかし 文章の順番は重要!

✅ RoPE(Rotary Position Embedding)

RoPE では 行列を「回転」させる ことで、順番を考慮します。

例えば、

( \begin{bmatrix} 1 & 0 \ 0 & 1 \end{bmatrix} )

この行列を少しずつ回転させて、位置情報を表現します。

✅ ALiBi(Attention Linear Biases)

ALiBi では、遠くの単語ほど影響が弱くなるように「減衰係数」をつけます。

( \begin{bmatrix} 1 & 0.8 & 0.5 \ 0.8 & 1 & 0.7 \ 0.5 & 0.7 & 1 \end{bmatrix} )

のように、距離に応じて値が変わる行列を作ります。


(2) Sparse Attention で計算を効率化

普通の Attention は すべての単語を比較するため、計算量が O(N²) と爆発 します。

💡 解決策 → Sparse Attention

Sliding Window Attention

「近くの単語だけ見る」ことで、行列のサイズを減らします。

例えば、

( \begin{bmatrix} 1 & 1 & 0 & 0 \ 1 & 1 & 1 & 0 \ 0 & 1 & 1 & 1 \ 0 & 0 & 1 & 1 \end{bmatrix} )

のように「一部の単語だけ関連付ける」ようにします。

FlashAttention

行列を 一気に計算せず、ブロックごとに処理 することでメモリ使用量を抑えます。


(3) 記憶を持たせる(Memory Augmented)

普通の Transformer は 長い文章の前半をすぐ忘れてしまう という問題があります。

💡 解決策 → Memory Augmented Transformers

RMT(Residual Memory Transformer)

単語の行列に 「メモリ行列」 を追加して、

( \begin{bmatrix} 0.5 & 0.3 & 0.8 \ 0.2 & 0.7 & 0.1 \ 0.9 & 0.4 & 0.6 \ 0.6 & 0.2 & 0.5 \end{bmatrix} )

のように「重要な情報を蓄積する」ことで、長い文章を保持します。


(4) 分散処理で効率化(FSDP & MoE)

LLM は巨大な計算が必要なので、 複数のコンピュータ(GPU)で分担する 必要があります。

FSDP(Fully Sharded Data Parallel)

行列を 複数の GPU に分割して並列処理 します。

例えば、

GPU1 → ( \begin{bmatrix} 0.5 & 0.3 \end{bmatrix} )
GPU2 → ( \begin{bmatrix} 0.8 & 0.2 \end{bmatrix} )

のように分けて計算します。

MoE(Mixture of Experts)

行列の一部だけ計算することで、不要な処理を減らします。

例えば、

全体の行列 →   [A, B, C, D, E]
使う部分だけ → [A, C, E]

のように、必要な部分だけ処理して計算量を減らします。


まとめ

行列の計算を工夫することで、LLM は長い文章を処理できる!

位置情報を考慮する(RoPE, ALiBi)
計算を効率化する(Sparse Attention, FlashAttention)
記憶を持たせる(RMT, Attention Sink Token)
計算リソースを最適化(FSDP, MoE)

行列の視点から見ると、Transformer の進化が 「いかに計算量を減らしながら、長い文章を覚えるか」 に集中していることが分かります!

今後の LLM の進化にも注目しましょう!🎯

Discussion