Up 重み行列 W_Q, W_K, W_V 作成: 2025-05-20
更新: 2025-05-26


    重み行列 W_Q, W_K, W_V は,Self-Attenshon で使われる。
    Self-Attenshon は,複数レイアーの形を以て,繰り返される。
    そして各レイヤーが自分専用の W_Q, W_K, W_V をもつ。

    ということで,重み行列は,レイヤー数 × 3 個が格納されることになる。


  • Multi-Head Attention の場合
      例えば Multi-Head Attention の 12レイヤーだと,
        layer_0:
        W_Q^(0) : D × d_Q
        W_K^(0) : D × d_K
        W_V^(0): D × d_V
        layer_1:
        W_Q^(1) : D × d_Q
        W_K^(1) : D × d_K
        W_V^(1) : D × d_V
        ...
        layer_11:
        W_Q^(11) : D × d_Q
        W_K^(11) : D × d_K
        W_V^(11) : D × d_V
      ここで,d_K = d_Q。また d_V は,通常は d_Q と同じか,それに近い値が使われることが多い。

    本テクストは,Single-Head で論を進めているので,重み行列はすべて D × D 行列。

  • 「格納」の実際
    PyTorch や TensorFlow では nn.ModuleList のような形で管理される。
    たとえば PyTorch の nn.Linear で定義する場合:
      self.W_Q = nn.Linear(D_model, d_Q)
      self.W_K = nn.Linear(D_model, d_K)
      self.W_V = nn.Linear(D_model, d_V)
      self.W_O = nn.Linear(d_V, D_model)
    (d_* は,Multi-Head 並列処理のために D を区切った長さ)
    これを各レイヤーに持たせて,レイヤーごとに別のインスタンスとして保持。


  • 重さ行列の初期設定
    重み行列の初期値は,ランダムに設定される (ランダム初期化)。


    Transformer の「学習によるトークンベクトルの成長」の中身は,トークンベクトルと重み行列の更新である。