LoRA Study — Part 01

Transformer Weight Matrices

LoRAが触る"重み"とは、モデルの中のどこの何なのか
Attention
FFN
全体構造
Embed(入力) Layer 1 Layer 2 Layer N 出力
各Layerの内部構造
x Attention FFN Layer(x)
Layer(x) = FFN( Attention(x) )
I
重みと fine-tuning
モデルの「知識」はどこに宿っているか
understood

重み行列

モデルは数十億個の数値の塊。この数値は行列の形で整理されており、役割ごとに行列がある。モデルの「知識」や「能力」は、行列の中の数値そのものに宿っている。

パラメータ 関数の形を決める
重み行列 = 関数の形を決めるパラメータ
understood

fine-tuning

学習データに対する出力と正解のズレを計算し、そのズレを小さくする方向に行列の数値を少しずつ書き換える操作を何千回も繰り返すこと。

W₀ ΔW W₀ + ΔW
W₀: 元の行列 / ΔW: 変化の総量 / W₀+ΔW: 最終状態
Step 1
入力を3つの役割に変換 — 同じ x に異なる行列を掛ける
Q = x × Wq 何を探すか
K = x × Wk 何を持つか
V = x × Wv 何を渡すか
Step 2
注目度を計算 — softmax( Q × Kᵀ / √d )
Step 3
中身を集める — 注目度 × V(重み付き平均)
Step 4
出力変換 + 残差接続 — x + (注目度 × V) × Wo
II
Self-Attention
どのトークンがどのトークンに注目するかを決める仕組み
attention

Wq (Query)

「自分は何を探しているか」を定義する変換。問い合わせ側の役割を担い、Kとの内積で関連度スコアを算出する。

Q = x × Wq LoRA推奨
attention

Wk (Key)

「自分は何を持っているか」のマッチング用ラベルへの変換。Qとの方向の一致度で注目度が決まる。

K = x × Wk 内積スコア
attention

Wv (Value)

注目されたときに相手に渡す中身への変換。xそのものではなく「渡す用途に特化した学習済みの変換」を通したもの。

V = x × Wv LoRA推奨
attention

Wo (Output)

Attention結果を「元のxと同じ空間」に戻す変換。残差接続(x + ...)で足し算するには同じ空間にいる必要がある。

残差接続 空間の統一
残差接続 = 元の情報を丸ごと保持 + 新しい情報を足す
III
Feed-Forward Network
各トークンを個別に変換する(隣のトークンを見ない)
ffn

W1 (Expand)

次元を拡大し、活性化関数で非線形変換を施す。非線形性がないと行列を何層重ねても1つの行列と同じになり、層を重ねる意味がなくなる。

次元拡大 活性化関数
ffn

W2 (Contract)

拡大された次元を元のサイズに戻す。W1で広げた空間での非線形変換結果を、Attentionと合流可能な形に圧縮する。

次元圧縮 残差接続

Self-Attention

Attention(x) = x + softmax(QKᵀ / √d) · V · Wo
Q, K で注目度を決め、V から中身を集め、Wo で空間を戻す

Feed-Forward Network

FFN(x) = x + activation(x · W₁) · W₂
W₁ で拡大 → 非線形変換 → W₂ で圧縮

1層分のまとめ

Layer(x) = FFN( Attention(x) )
Attention でトークン間の関係を扱い、FFN で各トークンを個別に変換する。この Layer を N 回繰り返す。
行列 所属 役割 LoRA
Wk Attention マッチング用ラベルに変換
Wo Attention 結果を元の空間に戻す 適用可能
W1 FFN 次元を拡大 適用可能
W2 FFN 次元を元に戻す 適用可能
LoRA論文 (Hu et al., 2021) では Wq と Wv への適用が最も効果的と報告