每个进入 Transformer 的单词(token)首先会被转换成一个向量:高维空间中的一个点。在每一层,注意力机制不会硬性地分配“这个对应那个”,而是计算所有 token 对之间的软关联。

其结构如下:

 

\text{Attention}(Q,K,V) = \text{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V

每个部分都巧妙地完成了一些工作:

- Q(查询)表示每个 token 正在寻找的内容。
- K(键)表示每个 token 提供的内容。
- V(值)是实际传递的信息。

这个注意力方程并没有显示这些 Q、K、V 的实际来源,但权重矩阵就隐藏在 Q、K 和 V 的定义中。在进行任何点积运算之前,每个 token 的表示 h_i^{(l)} 会被线性投影到三个不同的空间:

 

Q_i = h_i^{(l)} W_Q,\quad K_i = h_i^{(l)} W_K,\quad V_i = h_i^{(l)} W_V

这些矩阵 W_Q、W_K、W_V 都是可训练的参数,就像前馈部分中的权重一样。它们决定了 token 的哪些特征将用于查询、被识别为键以及携带值信息。每个注意力头都有自己的 W_Q、W_K、W_V 集合,因此不同的注意力头可以专注于不同的关系(语法、共指、位置线索等)。

投影完成后,点积 QK^{\top} 会计算该层所有标记之间的成对兼容性。softmax 将这些分数转换为注意力权重,然后与 V 进行加权求和,得到新的特征混合。


让我们来揭秘一下数学是如何让“桃子”这样的词在层层叠叠的空间中穿梭的。每个词条都以一个嵌入向量 e \in ℛ^d 开始。当 Transformer 读取一个句子时,这个向量不会保持不变,它会被注意力模块和前馈模块逐层转换。

1. 上下文通过注意力模块输入

对于给定的 l 层:

 

h_i^{(l+1)} = \sum_{j} \text{softmax}_j\!\left(\frac{Q_i K_j^{\top}}{\sqrt{d_k}}\right)V_j

这个和会遍历同一序列中的所有词条 j,softmax 权重决定了“桃子”在多大程度上会听取“熟了”、“树”或“颜色”的意见。

2. 前馈网络指出空间中的新方向

经过加权混合后,模型应用线性映射和非线性(前馈网络):

 

h_i^{(l+1)} = W_2\,\sigma(W_1 h_i^{(l+1)} + b_1) + b_2

矩阵 W_1、W_2 和激活函数 \sigma 将向量扭转到略微新的方向。每一层都会进行小幅旋转或拉伸。因此在数十层中,相同的标记会在嵌入空间中描绘出一条平滑的曲线,这条曲线承载着它不断变化的含义。

3. 意义的几何学

如果你冻结网络并测量不同句子中“桃子”向量之间的余弦相似度,你会看到:

- 上下文重叠时(“桃子派”、“新鲜桃子”)相似度较高,
- 语义不同时(“桃子连衣裙”、“你是个桃子”)相似度较低。

从数学上讲,上下文会细化向量在不同语义子空间上的投影:

- 乘以 QK^{\top} 决定谁与谁对话。
- 与 V 的加权求和传递信息。
- 线性变换不断弯曲每个标记的路径。

这些操作跨越多层,塑造了想象中的海洋:一个动态场,每个单词的向量都会随着相邻单词的引力而移动。

4. 回到训练过程

在预训练过程中,损失函数的梯度会反向流动,经过以下过程:

- 它们调整 W_Q、W_K、W_V,使正确的标记关注正确的其他标记。
- 它们调整前馈权重,使转换后的混合特征能够更好地预测下一个单词。

之前提到的 Hessian 矩阵描述了所有 W 矩阵(包括注意力和前馈部分)所构成的那个巨大空间的曲率。

 

Logo

更多推荐