Up 「テクスト生成」プロセス 作成: 2023-07-27
更新: 2025-07-30


    ChatGPT の Transformer 脳は,つぎがこれのやっていることのすべてである── 以下,これを<処理>と呼ぶ。
   テクスト入力
    ↓トークン分割
   [ t_1, ‥‥, t_m ]
    ↓対応するトークン点
   [ x_1, ‥‥, x_m ]


┌→ [ x_1, ‥‥, x_m ]
│    │
│   生成終了?── YES ───→ 応答出力
│    │NO   
│    │← 位置エンコーディング加算
│    ↓
│  x_i^(1) = x_i ( i = 1, ‥‥, m )


│  x_i^(ℓ)
│    ├─────┐
│    │   Self-Attention
│    │     ↓
│    │    z_i^(ℓ)
│    │     │← LayerNorm
│    │← 加算 ─┘
│    │
│    ├─────┐
│    │    FFN
│    │     ↓
│    │    z'_i^(ℓ)
│    │     │← LayerNorm
│    │← 加算 ─┘
│    ↓
│  x_i^(ℓ+1)


│  x_i^(NL)
│    ↓← Self-Attention, FFN
│  o_i = x_i^(NL+1)
│    ↓
│   logis
│    ↓
│  [ p_1, ‥‥, p_m ]
│   p_m : 「x_m の次は x_(m+1)」
│    │
└────┘m = m+1

ここで,
・Self-Attention
           x_i
    ┌──────┼──────┐
    ↓線型変換  ↓      ↓
 Q_i = x_i W_Q  K_i = x_i W_K  V_i = x_i W_V
    └──┬───┘      │
       ↓          │
 α_i = sim( Q_i ; K_1, ‥‥, K_m )  │
       │          │
       └───┬──────┘
          z_i = α_i V
           ↓← LayerNorm

  sim( Q_i ; K_1, ‥‥, K_m )
   = softmax( Q_i (K_1)^T/√D, ‥‥ , Q_i (K_m)^T/√D )

・FFN
           x_i
       ↓
z'_i = σ( x_i W_1 + b_1) W_2 + b2
       ↓← LayerNorm

・[ p_1, ‥‥, p_m ]
    logits_i = o_i W_O^T
p_i = softmax( logits_i )


    <処理>の中の
        [ x_1, ‥‥, x_m]
          ↓
        [ x_1, ‥‥, x_m, x_(m+1) ]
          ↓
          ︙
    を見れば,これは「テクスト生成」である。
    そして,[ x_(m+1), ‥‥ ] が,テクスト [ x_1, ‥‥, x_m ] に対する応答テクストになっているる。

    この「テクスト生成」を図に表すと:

       テクスト トークン トークン トークン ‥‥
             ↑    ↑    ↑ ‥‥  
          処理 │ 処理 │ 処理 │ ‥‥  

    ここで「テクスト」「処理」「トークン」は,それぞれ,最初の入力テクスト,<処理>,次のトークン (サブワード)。