注意力从哪里来
注意力(attention)是一种让神经网络在每一步都聚焦于输入中最重要部分的方法。这一机制是在 2014 年 9 月,由 Dzmitry Bahdanau、Kyunghyun Cho 和 Yoshua Bengio 为神经机器翻译提出的。[1] 在此之前,翻译模型要把整句源语言压缩成一个固定长度的向量,再交给解码器。注意力机制让解码器可以回头查看源句中的每一个词,并为生成的每个词分别给出不同的权重。[1]
从注意力到自注意力
自注意力把同样的思路用在一个序列内部。解码器不再去看另一句源语言,而是让序列中的每个词元,计算自己应当关注同一段文本中其他每个词元的程度。2017 年的 Transformer 论文让自注意力成为模型中唯一负责在位置之间混合信息的运算。[2]
分步看它怎么算
每个词元会被投影成三个向量:查询(query)、键(key)和值(value)。更新某个词元时,就用它的查询向量与所有词元的键向量做点积(dot product),包括它自己。这些分数先除以键向量维度的平方根进行缩放,再经过 softmax 转换成权重,权重加起来等于 1。新的表示就是所有值向量的加权和。[2]
可以这样理解三者的分工:查询表示一个词在找什么,键表示每个词能提供什么以供匹配,值则是真正被传递的内容。仍以句子里的「它」为例:「它」的查询与「猫」的键匹配得很好,点积结果较大,softmax 会把大部分权重分给「猫」,于是「它」的新表示主要由「猫」的值构成。同样的运算会并行地在序列中每个词元上进行。[2]
为什么叫「自」注意力
「自」指的是序列关注的是它自身,而不是另一个独立的输入。早期翻译模型里的注意力,是解码器去查询编码器的输出;自注意力保留了同样的计算方式,却去掉了第二个输入。
它的好处
自注意力可以在一步之内连接序列中的任意两个位置。当相关的词在文中相隔很远时,这一点尤其有用,因为信息不必逐词传递。这种计算也很容易在 GPU 上并行完成。[2]
换句话说,每个词元的输出都是整段序列信息的加权混合,而且每个位置的混合方式都要重新计算。同一套规则因此既适用于短文本,也适用于长文本。
局限
每个词元都要与其他所有词元比较,因此计算量随序列长度的平方增长。这就是长上下文窗口运行成本高的原因,也是研究者提出了许多高效注意力变体的原因。[2]
注释与来源
- Neural Machine Translation by Jointly Learning to Align and Translatehttps://arxiv.org/abs/1409.0473
- Attention Is All You Needhttps://arxiv.org/abs/1706.03762
引用本页: 注意力与自注意力. TellWorld, https://www.tellworld.net/zh/learn/self-attention. 更新于 2026-11-08