如果你已经知道 "Transformer 很厉害",但一直没搞懂那个
Q、K、V到底在算什么,这篇文章就是为你写的。我会先用一个生活化的类比把直觉建立起来,再逐步落到公式和代码层面,最后讲清楚它为什么能统治当今的 AI。
在注意力机制出现之前,处理序列(比如一句话、一段语音)主要靠两类模型:
人的做法完全不同。读一句话时,我们会自动把注意力分配给相关的词—— 读 "它" 时,我们会回头去看 "书"。"注意力机制" 的思想就是把这个能力数学化:让模型在生成或理解每个词时,主动去 "关注" 序列中所有其他位置,并给它们分配不同的权重。
这个思想最早来自机器翻译(Bahdanau 2014 的 attention),但真正让它封神的,是 2017 年那篇著名的论文 Attention Is All You Need—— 它用注意力机制彻底取代了 RNN 和 CNN,提出了 Transformer。今天 GPT、BERT、以及几乎所有大模型的心脏,都是它。
自注意力机制的一切,都围绕三个向量展开。用一个 "图书馆查资料" 的类比来理解最直观:
整个过程是:
一句话总结:注意力 = 按相关性对信息做加权求和。 相关性高的给大权重,相关性低的给小权重,权重会随着训练被学出来。
Transformer 用的具体形式叫缩放点积注意力(Scaled Dot-Product Attention),公式长这样:
Attention(Q, K, V) = softmax( Q·Kᵀ / √d_k ) · V逐项拆开看,一点都不神秘:
第一步:Q·Kᵀ 计算相似度。 两个向量做点积,结果越大说明方向越接近,也就是 "越相关"。Q 是 n×d_k 的矩阵(n 是序列长度),K 转置后是 d_k×n,相乘得到 n×n 的矩阵 —— 第 i 行第 j 列就表示 "第 i 个词对第 j 个词的注意力分数"。这一步让序列里任意两个位置都能直接建立联系,这正是解决长距离依赖的关键。
第二步:÷√d_k 缩放。 为什么除?因为向量维度 d_k 越大,点积结果越容易偏大,会让 softmax 进入 "饱和区"(某个值接近 1,其他全接近 0),梯度消失、学不动。除以 √d_k 相当于把数值拉回一个合适的尺度。这是一个工程上的稳定化技巧,但极其重要。
第三步:softmax 归一化成权重。 把一行分数变成 "和为 1 的概率分布",即所有位置的注意力权重。softmax 天然是 "竞争性" 的 —— 最大的分数会获得压倒性的权重,模型因此学会了 "聚焦"。
第四步:·V 加权求和。 用这些权重对所有位置的 V 加权求和,得到每个位置的新表示。被关注得多的词,其信息会被更多地 "吸收" 进来。
普通注意力里,Q 来自解码器、K/V 来自编码器(跨句子对齐)。而自注意力(Self-Attention)的 Q、K、V 全都来自同一个序列本身—— 所以叫 "自己注意自己"。
它的意义是:让每个词在编码时,看到整句话里所有词,并决定该向谁 "借" 信息。
举个经典例子,处理句子:
"The animal didn't cross the street because it was too tired."
当模型处理 "it" 这个词时,自注意力会计算它和句子里所有词的相似度,学出来的权重会集中在 "animal" 上 —— 模型就这样明白了 "it" 指代的是动物。这就是自注意力机制 "读懂指代关系" 的直观体现。
实现上,每个输入向量 x 会通过三个可学习的权重矩阵 Wq、Wk、Wv,分别投影出 Q、K、V:
Q = X·Wq
K = X·Wk
V = X·Wv这三个矩阵就是模型要训练的参数。通过训练,模型学会了 "什么样的词该关注什么样的词"。
单套 Q/K/V 只能捕捉一种 "关注模式"。但真实语言里关系是多样的 —— 有时看语法、有时看语义、有时看指代。于是有了多头注意力(Multi-Head Attention):
类比:一个人读书可能只看一遍,而多头相当于请了 8 个各有所长的读者同时读,再把他们的批注汇总。这让模型表达关系的能力大大增强,也是 Transformer 强大表现力的关键来源。
自注意力有一个 "致命" 特性:它对位置不敏感(排列不变性)。把句子里的词随便打乱顺序,注意力计算结果一模一样 —— 因为 Q・Kᵀ 只关心词之间的内容相似度,不关心谁在前谁在后。但语言是有顺序的,"我打你" 和 "你打我" 意思完全相反。
解决办法就是位置编码(Positional Encoding):在把词喂进模型前,给每个位置的向量加上一个位置信号,让模型知道 "我是第几个词"。
Transformer 原版用的是正弦 / 余弦函数生成的位置编码(不同频率的波),其优点是可以泛化到比训练时更长的序列。后来也常用可学习的位置编码(让模型自己学位置向量),以及更精细的相对位置编码(关注两个词的 "相对距离" 而非绝对位置,如 RoPE,GPT 系列等都在用)。
自注意力最直接的代价是计算复杂度 O (n²):序列里每两个位置都要算一次相关性。句子短还好,但处理一篇长文档(n = 几万)或一张高分辨率图时,n² 会爆炸。
近年的优化方向主要有:
这也是为什么现在大模型都强调 "上下文长度"—— 上下文越长,n² 的负担越重,工程难度越大。
自注意力 + Transformer 的爆发路径非常清晰:
注意力机制真正厉害的地方在于:它提供了一种通用的、内容驱动的信息混合方式—— 不关心数据是文字、图像还是声音,只要你能把输入切成一堆 "token" 并定义它们的特征向量,自注意力就能帮它们互相交流信息。这正是它能跨领域通吃的根本原因。
自注意力机制 = 让序列中的每个元素,根据内容相关性,自主决定该从其他元素那里 "听" 多少信息 —— 通过可学习的 Q/K/V 投影和加权求和实现,再配合多头并行、位置编码与 softmax 归一化,构成 Transformer 的强大内核。
它从 "人类如何阅读" 中获得灵感,用一套优雅的数学把 "全局关联 + 并行计算" 做到了极致,成为当代 AI 最核心的基石之一。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。