Cross-Attention:今天真正弄懂
先记住:一句话定义 + 一句记忆口诀
一句话定义:Cross-Attention(交叉注意力)是一种让“序列 A”拿着自己的需求,去“序列 B”里动态检索并提取相关信息的机制。
生活类比: 你在做一道菜(模态 A,比如音频),手里有一张“缺料清单”(Query)。你跑到调料仓库(模态 B,比如视频)里,对照着清单去货架标签(Key)上逐个比对,找到最匹配的调料实物(Value)拿回来用。你的产出依然是一道菜,但融入了仓库里的精华。
核心公式: $$\text{Attention}(Q_A, K_B, V_B) = \text{softmax}\left(\frac{Q_A K_B^T}{\sqrt{d_k}}\right) V_B$$
符号逐个拆解: - $Q_A$(Query,查询向量):来自模态 A(或序列 A),代表“我想找什么”。 - $K_B$(Key,键向量):来自模态 B(或序列 B),代表“我这里有什么索引标签”。 - $V_B$(Value,值向量):同样来自模态 B,代表“我这里的具体内容信息”。 - $d_k$:Query 和 Key 的特征维度,除以 $\sqrt{d_k}$ 是为了防止点积数值过大导致 softmax 梯度消失。 - $\text{softmax}(\dots)$:计算 $Q_A$ 和所有 $K_B$ 的匹配度,生成归一化的权重得分(加起来为 1)。 - 输出结果:形状与 $Q_A$ 的时间序列长度完全一致,但内容已经融合了模态 B 的特征。
解决的问题与“没有它会怎样”: - 解决的问题:两个序列长度不同、模态不同(比如 100 帧的视频和 1600 帧的音频),如何精细对齐。 - 没有它会怎样:只能把音频和视频粗暴地做全连接拼起来(Concat)或者按元素相加。这要求两边强行等长,不仅丢失模态间的时序动态对应,还会引入大量无关噪声。
在音视频理解与说话人日志中的实际用法: 1. 音视频发声人定位(Active Speaker Detection):音频特征作为 $Q_A$,候选人脸图像特征作为 $K_B, V_B$。音频拿着当前声音去匹配画面中哪张脸的唇动最符合,输出该人脸的视觉增强表征。 2. 说话人日志(Speaker Diarization / TS-VAD):预设的说话人声纹 profile(或目标说话人 Query)作为 $Q_A$,混合音频的时序特征作为 $K_B, V_B$。模型通过 Cross-Attention 查询“当前说话人在混合音频的哪些时刻开过口”。 3. 想深入实操多模态:在 *Hugging Face Multimodal Tasks* 中可以看视频与音频的实际预处理与联合推理流程;而理解跨模态特征在投影前如何先对齐,可以参考 *Lil’Log:对比学习* 的思路。
Q 和 K、V 来自不同模态还是相同模态?
Cross-Attention 的计算结果,形状和谁保持一致?
公式里为什么除以 $\sqrt{d_k}$?
1. 发展流程: - 过去(2015 前后):直接 Concat/Sum 融合,或使用带有简单对齐向量的 RNN。处理长时序极易遗忘,不同模态强行对齐效果差。 - 演进(Transformer 诞生):Seq2Seq 机器翻译中 Decoder 查询 Encoder 隐状态,这是 Cross-Attention 的雏形。 - 现状(多模态时代):成为所有音视频模型、多模态大模型(如 Flamingo、Whisper 解码器、Perceiver IO)的标准跨模态融合算子。
2. 与相近概念的区别(一分钟厘清): - Self-Attention vs Cross-Attention: - Self-Attention:$Q, K, V$ 全都来自同一序列内部(自己看自己,建立内部依赖)。 - Cross-Attention:$Q$ 来自源 A,$K, V$ 来自源 B(A 看 B,实现跨序列/跨模态融合)。 - Cross-Attention vs Feature Concat: - Concat 是静态、无差别的堆叠;Cross-Attention 是动态权重检索,保留了主序列的时序骨架。
3. 当前局限与未来作用: - 当前局限(客观事实):计算复杂度为 $O(L_A \times L_B)$。如果长音频(几千步)直接与高帧率长视频做 Cross-Attention,显存和算力开销巨大;且单向 Cross-Attention 只由 $Q$ 模态主导输出结构,存在模态偏置。 - 未来作用(技术推测):随着超长音视频分析需求增加,利用固定数量的可学习 Query(如 Perceiver/Q-Former 架构)做两阶段降维检索,会比全局 Cross-Attention 更普及。
- 为什么 Cross-Attention 的输出序列长度取决于 Q 而不是 K、V?
- 如果音频特征维度是 512,视频特征维度是 768,能直接做 Cross-Attention 吗?该怎么处理?
- 在说话人日志中,把说话人声纹设为 Q 和设为 K/V,分别代表什么物理含义?