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 ] に対する応答テクストになっているる。
この「テクスト生成」を図に表すと:
テクスト トークン トークン トークン ‥‥
↑ ↑ ↑ ‥‥
処理 │ 処理 │ 処理 │ ‥‥
ここで「テクスト」「処理」「トークン」は,それぞれ,最初の入力テクスト,<処理>,次のトークン (サブワード)。
|