Transformer 内部構造ガイド入力から出力までを図・形状・コードで追う

サンプル実施

短い文を入力すると、全体図 と同じ順番で各処理ブロックを通り、その実際の入力と出力を1ステップずつ確認できます。Tensor の形がどこで変わり、どこで変わらないのか、 Attention の重み行列がなぜ正方形だったり長方形だったりするのかを、 自分が入れた文で追えます。

入力文

短い文を入れて「実行」を押すと、全体図の各ブロックを通る実際の値を順に確認できます。 最大 24 トークンまで。

例文:
モデル設定(形状の変化を確かめる)

Dff は D の 4 倍(現在 64)、Dk は D / H(現在 8)に追従します。seed を変えると重みが変わり、 すべての値が変わります。

Encoder 入力(S = 4)I have a pen
Decoder 入力(T = 1)<s>
次に選ばれるトークンdog (確率 0.3384)

重みが未学習のため、貪欲法では同じトークンが繰り返し選ばれます。これは不具合ではなく、 学習していないモデルに起きる当然の結果です。ここで見るべきなのは選ばれた語ではなく、T が 1 つ増えて系列が伸び、Decoder 側の形が変わることです。 数トークン生成すると、マスク付き自己注意の重み行列に三角形(上三角が 0)が現れます。

Transformerの基本構造 原典TransformerのEncoderとDecoderの処理フロー。各処理ブロックから詳細ページへ移動できます。 Transformerの基本構造 原典のEncoder–Decoder構成 ── ブロックをクリックすると詳細解説へ移動します Encoder:入力を文脈表現へ変換 Decoder:次のトークンを予測 N回反復 N回反復 入力トークン 例:「私は猫が好き」 入力埋め込み Token Embedding 位置情報 Positional Encoding + マルチヘッド自己注意 Multi-Head Self-Attention 残差接続 + LayerNorm Add & Norm 位置ごとの全結合処理 Feed-Forward Network 残差接続 + LayerNorm Add & Norm Encoder出力 文脈を含む各トークンの表現 残差経路 右シフトした出力トークン 先頭に開始記号を追加 出力埋め込み Token Embedding 位置情報 Positional Encoding + マスク付き自己注意 未来のトークンを参照しない 残差接続 + LayerNorm Add & Norm Encoder–Decoder Attention Encoder出力を参照(Cross Attention) 残差接続 + LayerNorm Add & Norm 位置ごとの全結合処理 Feed-Forward Network 残差接続 + LayerNorm Add & Norm Key・Valueを渡す DecoderのQueryで検索 出力ヘッド Linear 語彙数へ変換 Softmax 確率へ変換 次トークンの確率 選択後、再び入力 実線=主処理  破線=残差接続  紫線=Encoder出力の参照  ※ GPT・Llama系の生成LLMは、主にDecoder-only構成です。

図のブロックを選ぶと、そのステップへ移動します。現在のステップが青枠で強調されます。

ステップ 1 / 30Encoder

入力トークン

例:「私は猫が好き」

文字列を Tokenizer がトークンへ分割し、語彙表を引いて整数IDに変換します。ここまでは Transformer 本体の外側の処理です。

この処理の詳細ページを読む →

入力

textstrstr

入力した生の文字列

I have a pen

出力

input_ids[B, S]= [1, 4]int64

各位置のトークンID(値の大小に意味はない)

  • Iid 10
  • haveid 15
  • aid 7
  • penid 33

英数字の並びを1トークン、記号や日本語の1文字を1トークンとして扱います。実運用の Tokenizer はサブワードに分割するため、分割単位も Token ID も異なります。