纠正一个关键混淆:W_Q / W_K / W_V 是矩阵(变换),不是向量。向量是被加工的"料",矩阵是"加工机"。
| 向量 vector | 一串数,代表空间里一个点 / 箭头。例:x = [2, 3] |
| 矩阵 matrix | 一个变换(加工机),把一个向量映成另一个向量。例:q = x · W |
在 attention 里:x(词向量)是料;W_Q, W_K, W_V 是三台不同的加工机;q, k, v 是加工出来的三个新向量。
设 x = [2, 3] , W_Q =
| 1 0 |
| 0 2 |
q₁ = 2×1 + 3×0 = 2 (x 点乘 W_Q 第 1 列 [1,0])
q₂ = 2×0 + 3×2 = 6 (x 点乘 W_Q 第 2 列 [0,2])
q = [2, 6]
几何含义:这台 W_Q 把"竖直方向拉伸 2 倍"。x=[2,3] → q=[2,6]:横坐标不变(2→2),纵坐标翻倍(3→6)。
同一个 x = [2, 3],换成 W_K =
| 0 -1 |
| 1 0 |(这台做"旋转 90°"):
k₁ = 2×0 + 3×1 = 3
k₂ = 2×(-1) + 3×0 = -2
k = [3, -2]
同一个 x,经 W_Q 变 [2,6],经 W_K 变 [3,-2]——方向完全不同。
朴素版打分 xᵢ·xⱼ 天然对称、且 xᵢ·xᵢ 最大。换成 Q/K/V 后,打分是 qᵢ·kⱼ = (xᵢW_Q)·(xⱼW_K)。因为 W_Q ≠ W_K 是两台不同的机器,先加工再点积的结果通常 qᵢ·kⱼ ≠ qⱼ·kᵢ——不对称,也不再天然最爱自己。
512×64 这种"矮胖"矩阵——它同时做降维(512→64)和上面说的"变换方向"。降维的意义(多头、效率)在 Multi-head 课再说。