42 分钟
大模型内核:从经典机器学习到对齐与前沿

注意力机制:Q、K、V 与缩放点积注意力

从 RNN 的两大硬伤(串行、长程衰减)出发,讲清自注意力如何让任意两个词直接交互,用「查询—键—值」的检索直觉彻底讲透 Q/K/V,以及缩放点积注意力公式每一项的含义

  • 理解自注意力要解决 RNN 的什么问题
  • 用检索类比彻底理解 Query、Key、Value 三者角色
  • 看懂缩放点积注意力公式:相似度→缩放→Softmax→加权求和
  • 理解为什么要除以根号 dk,以及注意力权重的含义

先回到 RNN 的两个硬伤

上一模块看到,RNN 必须一个词一个词串行算,无法并行;句首信息要经过很多步才能传到句尾,沿途衰减。注意力机制换了个根本思路:处理某个词时,让它直接「看」句子里所有其他词,按相关程度聚合信息,任意两词之间的路径长度都是 1。

用「检索」理解 Q、K、V

自注意力最容易被符号吓住,其实它就是一次软检索。每个词会被投影成三个向量:

Q/K/V:一次数据库检索的三个角色

Query 查询

我现在这个词,想找什么样的相关信息(我在问什么)

Key 键

每个词对外的「标签/索引」,供别人匹配(我能提供什么)

Value 值

每个词真正要被聚合走的内容

当前词拿自己的 Query,去和所有词(包括自己)的 Key 算相似度,相似度越高说明越该关注;把相似度归一化成权重,再对所有词的 Value 做加权平均,就得到当前词融合了全局上下文的新表示。

缩放点积注意力四步

Attention(Q,K,V) = softmax(QKᵀ/√dk)·V

① 算相似度:Q·Kᵀ

查询与每个键做点积,得到相关性原始分数

② 缩放:除以 √dk

dk 是键向量维度,防止维度过大点积过大

③ Softmax 归一化

分数变成和为1的注意力权重(0~1),越相关权重越大

④ 加权求和:权重 × V

按权重聚合所有值,得到输出

ℹ️为什么要除以 √dk

点积结果的方差会随维度 dk 增大而增大。维度一大,点积数值拉开得很极端,Softmax 会接近 one-hot:某个权重≈1、其余≈0,梯度几乎为零、训练僵住。除以 √dk 把数值尺度拉回稳定区间,让 Softmax 保持平滑、梯度可学。这是一个很小但不能省的细节。

💡Q·K 的点积,stage11 从向量讲起

这里第一步「Q 与每个 K 做点积打分」,本质就是两个向量对应分量相乘再求和。stage11〈向量与张量:模型世界的通用语言〉从「一支带方向的箭」讲起点积,手算了 a·b=Σaᵢbᵢ,归一化后就是余弦相似度——和 RAG 里向量检索、全连接层打分用的是同一个运算。

自注意力「自」在哪里

一般注意力可以发生在两个序列之间(如查询来自解码器、键值来自编码器,即交叉注意力);自注意力(Self-Attention)的 Q、K、V 来自同一个序列,也就是一句话内部的词彼此打量、互相融合。经过一层自注意力,每个词的向量都已经混入了与其相关的上下文,多义词由此能根据语境确定含义——比如「苹果」到底是水果还是公司,取决于它关注了哪些词。

一层自注意力的数据流(序列长度不变,信息被混合)

输入序列每个词 → 各自线性投影出 Q,K,V

所有 Q 与所有 K 两两打分

Softmax 得注意力权重矩阵

矩阵第 i 行=第 i 个词对所有词的关注分布

权重对 V 加权,输出上下文感知的新序列

🐍两大优势,一次解决

其一是路径短:任意两词直接交互,长程依赖不再需要沿时间一步步传;其二是可并行:所有词的 Q/K/V 是矩阵乘法,能一次性整体计算,不像 RNN 必须等上一步。这两点正是 Transformer 能扩展到超大模型的底层原因。

选择题

在自注意力中,某个词最终的输出向量是怎么得到的?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

从线性回归到神经网络,本质都一样:定义一个带参数的函数 fθ(x),用损失函数衡量它和真实答案的差距,再沿梯度方向更新参数。监督、无监督、强化学习的区别,只在「训练信号从哪里来」。先把这套统一视角立住,后面遇到的任何模型都是它的具体实例,就不会被层出不穷的名词淹没。