返回目录
公开知识笔记 · 不进入目录

交叉注意力与自注意力

公开知识笔记

交叉注意力与自注意力

一句话理解:自注意力让同一组token彼此交流;标准交叉注意力让一组token主动查询另一组token。A3Net的代码更接近“把两组token拼起来后做无mask自注意力”。

1. 共同的注意力公式

Attention⁡(Q,K,V)=softmax⁡(QK⊤dk)V\operatorname{Attention}(Q,K,V)=\operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V

直觉上,QQ是“我想找什么”,KK是“我有什么标签”,VV是“真正要取回的内容”。QK⊤QK^\top计算匹配程度,softmax把同一查询对应的分数变成权重。

2. 自注意力

若Q,K,VQ,K,V都来自同一组token XX:

Q=XWQ,K=XWK,V=XWVQ=XW_Q,\quad K=XW_K,\quad V=XW_V

这就是self-attention。无mask时,每个token都能查看同组的全部token。

3. 标准交叉注意力

假设有药物原子token DD和副作用token SS。若药物查询副作用:

Q=DWQ,K=SWK,V=SWVQ=DW_Q,\quad K=SW_K,\quad V=SW_V

此时药物只从副作用中读取信息。还可以反向再做一次,让副作用查询药物。两组输入在结构上保持分开。

4. 拼接后自注意力

另一种做法是先拼接:

X=[D;S]X=[D;S]

再对XX做self-attention。这样注意力矩阵同时包含四块:

查询→键 药物原子 副作用
药物原子 药物内部交互 药物→副作用交互
副作用 副作用→药物交互 副作用内部交互

它确实包含跨组交互,但也包含组内交互,所以不等同于严格的双流cross-attention。

5. A3Net代码为何值得警惕

A3Net将一个PyG训练batch中所有药物的原子与994个副作用拼成二维token序列,并送入未设置mask的Transformer。于是训练batch包含10种药物时,不同药物的原子也能彼此注意;测试batch为1时,这种跨药物上下文消失。

这会带来两个问题:

  1. 同一药物的输出可能随同批其他药物变化;
  2. 训练与推理时可见上下文不同,形成分布差异。

若设计目标是“每种药物独立地与副作用交互”,应按药物分别构造序列,或使用attention mask隔离不同药物。

6. 为什么softmax不能在推导中随便省略

softmax不只是把数值缩放一下,它会把一行分数非线性归一化,改变相对权重。省略softmax后的矩阵展开可以帮助看见四个交互块,却不能当作与真实注意力严格等价的计算。

相关概念

相关论文

  • A3Net精读笔记(A3Net)