Up Self-Attention 作成: 2025-05-17
更新: 2025-05-24


    各レイヤーに,Self-Attention と呼ばれるプロセスがある。

    記号法:
      レイヤーの表記「^(ℓ)」は煩瑣になるので,ここでは省略する。

    Self-Attention は,入力の
      LEN(S) × D 行列
      X = ( x_ij )
    に対し,以下の処理をする。


    1. Query, Key, Value の生成

    入力 X(S) に,3 種類の重み行列
       D×D行列
       W_Q, W_K, W_V
    を掛けて、Q(uery),K(ey), V(alue) を生成する:
      LEN(S)×D 行列
      Q = X(S) W_Q
      K = X(S) W_K
      V = X(S) ·W_V

    i 行で見ると:
      Q_i = x_i W_Q : x_i (語彙_i ) に重み_Q 付け
      K_i = x_i W_K : x_i に重み_K 付け
      V_i = x_i W_V : x_i に重み_V 付け


    Q, K, V は,Query, Key, Value と呼んで,つぎのように意味づけられている:
      Q_i = x_i W_Q :語彙_i が発する問い
      K_i = x_i W_K :語彙_i が持つ情報の特徴
      V_i = x_i W_V :語彙_i が S の他の語彙_j に与える意味

    2. Multi-Head Attention

    Q, K, V は LEN(S)×D 行列であるが,Transformer の実装では,計算を並列処理 (ヘッド数 : H ) で効率化するために,W_Q, W_K, W_V を D / H 列のブロック H 個に,等分する:
      D × D/H 行列
      (W_Q)_1, ‥‥, W_Q)_H
      (W_K)_1, ‥‥, W_K)_H
      (W_V)_1, ‥‥, W_V)_H

    即ち,重み付け計算は,つぎのようになる:
      LEN(S) × D/H 行列
      (Q)_k = X(S) (W_Q)_k
      (K)_k = X(S) (W_K)_k
      (V)_k = X(S) (W_V)_k
          k = 1, ‥‥, H
    そしてこれを,後でまとめて,
      Q = X(S) W_Q
      K = X(S) W_K)
      V = X(S) W_V
    にする。

    この方法を,「Multi-Head Attention」と謂う。
    しかし「最後は同じ」ということで,ここでは「Single-Head」で論を進める。


    3. Attention スコアの計算

    Q と K の内積をとってスコア行列を作る。

    3.1 Attention スコア A(未正規化)
      LEN(S) × LEN(S) 行列
      A = ( A_ij ) = Q・K^T

    ここで「・」の意味は,
     「A_ij は,Q の i 行ベクトルと K^T の j 列ベクトルの内積」
    そしてその2つのベクトルは,それぞれ
      Q_i : 重み_Q づけられた x_i (語彙_i )
      K_j : 重み_K づけられた x_j (語彙_j )


    A_ij = Q_i・K_j は,つぎの意味が込められている::
      Q_i :「x_i は何を求めているか・何を知りたいか」
      K_j :「x_j はどんな意味を持っているか・何を提供できるか」
      Q_i・K_j :「x_i にとって x_j がどれほど重要か」

    なぜ,「x_i にとって x_j がどれほど重要か」の表現が「Q_i・K_j」なのか?
    内積は,ベクトルの向きの違いを定量化するのに使われる。
    そこで Q_i・K_j に,Q_i に込めた意味と K_j に込めた意味の引き合う力の強さ,あるいは距離の近さ,の表現を見込むというわけである。


    3.2 A の 正規化 (softmax)

    内積は,ベクトルの大きさの2つの値と,向きの違いの値の積である。
    よって,2つのベクトルの「近さ」の表現に内積を使うときは,ベクトルの大きさの調整 (スケーリング) が必要になる。

    Self-Attention では,さらに A の 正規化へと進む。

    A から行列 α= (α_ij ) をつぎのように導く:
      α_ij = softmax_j( A_ij / √D )  
    ここで, √D が「スケーリング因子」に相当。


    α_ij は,A_ij = Q_i・K_j の「x_i にとって x_j がどれほど重要か」をさらに精巧にしたもの,ということになる。
    そうすると,翻って,Q_i と K_j による「x_i にとって x_j がどれほど重要か」の表現は,α_ij に限るとは言えない。
    もっといいものがあり得る。

    こんな場合,「いいもの」を課題化していることを示すのに,記号 sim (similarity, 類似度) が使われる。
    そしてTransformer は,
       sim( Q_i, K_j ) = α_ij
    としているわけである。
    実際これは,式がシンプルで計算が簡明になる。


    (α_ij ) は,特に,
      Σ_k α_ik = 1 ( Σ_k は,1から LEN(S) まで)

    α_ij は,一昔前の読み方だと「遷移」である:
      「語彙_i のつぎに語彙_j がくる確率」
    しかし α_ij の内容は,ずっと複雑 (不可視) になっている。
    そこで,つぎのような表現になっている:
      「語彙_i は語彙_j をどれだけ参照するか」

    この読み方によれば,( α_ij ) は「注意分布」である:
    また,α_ij に
      「語彙_i が語彙_j を引く力」
    の見方をすれば,( α_ij ) は「引力分布」になる。


    4. Self-Attention 層の出力

    Self-Attention は,つぎの行列を出力とする:
      LEN(S)×D 行列
      Z = ( z_ij ) = α V

    Self-Attention 層の入力から出力までを図にまとめると:
            X(S) = E(S) + P(LEN(S))
                ↓
         ┌──────┬─────┐
     線形変換│W_Q    │W_K   │W_V
         ↓      ↓     ↓
         Q      K      V
         └──┬───┘     │
            ↓         │
          ( Q_i · K_j )        │
         正規化↓         │
            α         │
            └────┬────┘
                 ↓
                Z =α V <


    α_j は
      Σ_k α_ik = 1 ( Σ_k は,1から LEN(S) まで)
    なので,
      Z_i = ( Σ_k α_ik v_k1, ‥‥ Σ_k α_ik v_kD )
    は, つぎがこれの意味になる:
     「トークンID_i に対する V_1, ‥‥, V_LEN(S) の加重平均」


    こうして,Q, K, V の3つが入ったベクトルが出力される。
    最終的に「V_1, ‥‥, V_LEN(S) の加重平均」だからといって,Value が中心なわけではない。
    言語の実現はシンタクスとセマンティクスの構造の実現である。
    したがって Self-Attention の出力に対して考えるべきは,「シンタクスとセマンティクスの重合」なのである。

    Transformer がしようとしていることの捉え:
      「語彙の syntactical & semantical distribution」を定めるという形で,「言語=シンタクス・セマンティクスを構造とする空間」を実現。


    Self_Attention の出力は,つぎのように表現されている:
    表現1
    「出力ベクトル Z_i は、
    • 自分(Q_i)が
    • S の他のすべての語(K_j)の特徴を見て
    • S のどの語から、どの程度、意味 (V_j )を取り込むかを判断し
    • 文脈的な意味ベクトルとして再定義されたもの。」

    表現2
    「トークンベクトルは、全体を見て自分の意味を組み直す。」

    しかし,
      「Q, K, V, Z の意味は,これだ」
      「これを理解しなければならない」
    と定めたら,ここで躓いて先に進めなくなる。
    ベクトルに「シンタクスとセマンティクスの重合」の契機を植えつけるという,土台わけのわからぬ話なのだから,「不明・不可視も理由のあること」と思うのもありだろう。