Block-Causal Attention
Block-Causal Attention 是比 token-level causal 更灵活的 Attention 模式:将序列划分为多个 block,同一 block 内双向可见,不同 block 间保持 causal。
核心机制
通过 mask_ar 定义 block 边界:
mask_ar = [1, 0, 1, 0, 1, 0, 0]
cumsum = [1, 1, 2, 2, 3, 3, 3]
[blk1][blk2][blk 3]mask_ar[i] = 1:从 token i 开始进入新 blockmask_ar[i] = 0:token i 继续前一个 block
Attention 规则:
Query 可以看到自己的 block 和之前所有 block。
特例
Token-level Causal
mask_ar = [1, 1, 1, 1, 1] # 每个 token 一个 block退化为标准 causal attention(下三角矩阵)。
Bidirectional
mask_ar = [0, 0, 0, 0, 0] # 全部在 block 0全连接,无 causal 限制。
应用场景
Prefix-LM
mask_ar = [0, 0, 0, 1, 1, 1]
[prefix][causal]Prefix 内双向交互,后续生成保持 causal。常用于多模态模型。
多模态模型
将 image/text/state token 放在同一个 block 内,它们可以充分交互;action token 逐个生成时保持 causal。
与 Causal Attention 的区别
| Token-level Causal | Block-Causal | |
|---|---|---|
| 粒度 | 每个 token | 每个 block(可包含多个 token) |
| 同组内 | 单向(只能看过去) | 双向(可以互相看) |
| 跨组 | 单向 | 单向 |
相关概念
- [[Attention Mask]]
- [[Causal Attention]]
- [[Prefix-LM]]