x_i^(ℓ)
├───────┐
│ Self-Attention
│ ↓
│ z_i^(ℓ)
│ │← LayerNorm
│← Residual ─┘
│
├───────┐
│ FFN
│ ↓
│ z'_i^(ℓ)
│ │← LayerNorm
│← Residual ─┘
↓
x_i^(ℓ+1)
LayerNorm は,トークンベクトルの移動ベクトル
に対し,y の成分を正規化する処理。
Self-Attention では z_i = ( z_i1, ‥‥ , z_iD ) に読み換え
FFN では z_i = ( z'_i1, ‥‥ , z'_iD ) に読み換え
- 数式表現
LayerNorm( y )=γ⋅ (y−μ)/σ + β
μ:y_1, ‥‥, y_D に対する成分の平均
σ:同様に成分の標準偏差
γ:スケーリング係数 (学習される)
β:バイアス係数 (学習される)
- LayerNorm の理由(技術的理由)
・学習安定性の確保
Self-Attention や FFN を通ると,出力ベクトルのスケール(大きさ)が暴れやすい。
出力ベクトルごとにスケールが異なる──ある者は小さく,ある者は巨大になる。)
このため,全ての出力ベクトルを一定のスケール・分布に揃えることで,勾配爆発や消失を防ぐ
・構造の繰り返しにおける分布の恒常性
Transformer は層構造で深く積み重ねられる。
各層ごとに「出力の分布」が変わると,学習の収束が著しく悪くなる。
・実験的にも,LayerNorm を通さない Transformer は,
初期層での重みの選び方に大きく依存
計算不安定・過学習しやすい
といった課題が生じる
|