先这样答
核心目的是让匹配过程与内容提取解耦。Q 和 K 负责做相似度匹配。Q 代表当前词要找什么信息。K 代表其他词能提供什么信息。两者点乘计算出注意力权重。V 携带实际提取出的语义内容。网络根据 Q 和 K 算出的权重去对 V 进行加权求和。这种设计把找什么和取什么彻底分开了。
拆开矩阵能让同一批词使用不同的关注模式提取不同的信息。词与词之间的匹配关系和词本身包含的信息是两回事。如果不拆分,网络只能做单矩阵自乘。单矩阵自乘强迫匹配逻辑和内容表达绑定在一起。这会导致模型的表达力受限。同一个词可以作为查询目标。它也可以作为提供查询的上下文。拆分矩阵让它在这两种状态下呈现不同的特征。
这是字节一面穿插的底层八股。当前词可以通过 Q 改变查询条件。上下文词可以通过 K 暴露不同的匹配特征。网络最终通过 V 传递出最合适的语义内容。多头机制进一步利用了这种拆分。网络在不同的头里并行使用多组矩阵。每组头能分别学习完全不同的关注模式。
面试官会怎么追问
-
「既然拆分能提高表达力,那为什么还要引入多头注意力机制?」 单组矩阵只能学习一种关注模式。多头机制把特征维度切分成多份。每组头拥有独立的参数矩阵。这让模型能同时学习多种不同的关注模式。
-
「你提到不拆分会导致表达力受限,具体是怎么受限的?」 不拆分意味着用同一个矩阵计算相似度。这等价于单矩阵自乘。单矩阵自乘算出的相似度矩阵必然是对称的。自然语言里的词汇依赖关系通常是不对称的。
-
「Q 和 K 都是做相似度匹配,能不能把 Q 和 K 合并成一个矩阵?」 合并会导致查询端和上下文端使用相同的特征空间。同一个词寻找其他词的标准和它响应其他词寻找的标准不同。合并会强制这两个标准一致。保留独立的 Q 和 K 能维持这种不对称的匹配关系。
回答的坑
- 混淆矩阵的物理意义,把 Q 和 K 描述成提取内容的矩阵。
- 解释不拆分缺陷时偏离事实底稿,生搬硬套非线性激活函数等无关概念。
同系列的题