自注意力是让模型在处理一句话时,先判断每个词应该多关注句子里的哪些词,再把这些信息融合起来的一种机制。它不按固定顺序一个词一个词往后读,而是让所有词互相打分:关联越强,权重越大,最后每个词得到的新表示都混入了它最需要的那部分上下文。
先看一个例子
“小明把钥匙放在桌子上,他随后出门了。”里的“他”指谁?人一眼就能看出来是小明。自注意力做的就是类似的事:当模型处理“他”时,会给“小明”一个更高的权重,给“桌子”“钥匙”更低的权重,于是“他”的表示里就带上了“小明”的信息。权重不是人工写死的规则,而是模型在训练中从大量文本里学出来的。
它在算什么
具体过程可以拆成三步:先把每个词变成一个向量;再算词与词之间的匹配分数;最后按分数加权,把其他词的信息汇总进来。分数高的词影响大,分数低的词几乎可以忽略。这里的关键是“并行”:一句话里的所有词可以同时完成这一步,而不是等前一个词处理完才处理下一个,这也是它能处理长文本、训练效率较高的原因。
和循环、卷积有什么不同
循环结构按顺序读句子,离得远的词信息容易在传递中变弱;卷积结构一次只看固定窗口内的词,窗口外的关系要靠堆叠多层才能间接建立。自注意力没有固定窗口,也不依赖顺序传递,远距离的词可以直接建立联系。但它也不是万能的:它需要额外的位置信息来知道词的先后顺序,否则“猫追狗”和“狗追猫”在它眼里会变得难以区分。
自注意力的边界
自注意力只负责“哪些信息更重要”,不负责记住事实、做逻辑推理或保证输出正确。它看到的范围也受上下文长度限制,超出窗口的内容无法直接参与计算;计算量还会随着句子变长而快速上升,长文本的成本明显高于短文本。把它当成信息筛选器,而不是知识库或推理引擎,会更准确。
几个容易搞错的说法
第一,自注意力不是“理解”本身,权重高只代表模型学到的统计关联强,不等于它真的明白了语义。第二,注意力权重不能直接当成解释:某个词权重高,不一定就是模型做出某个回答的唯一原因。第三,自注意力不等于整个Transformer,Transformer里还有前馈网络、位置编码、归一化等部件,缺了它们,单靠注意力也撑不起一个完整模型。