一、自注意力已经看见全局,为什么还要 Memory
这篇文章面向正在阅读 FunASR、Paraformer 或流式 ASR 配置的工程师,回答一个具体问题:SAN-M 到底替换了 Transformer 的哪一部分,声音又怎样穿过它。
标准 Transformer 是合理的基线。自注意力为每段输入动态产生权重,能直接连接距离很远的帧,而且训练阶段可以并行。但语音有很强的局部连续性:音素不会在相邻 10 ms 帧之间任意跳变。SAN-M 论文观察到,声学 Encoder 的注意力虽然拥有全局感受野,实际学习到的权重仍常集中在对角线附近。
DFSMN 走的是另一条合理路线。它用跨时间的可学习有限冲激响应滤波器聚合邻近帧,不使用循环反馈,计算随序列长度线性增长;代价是滤波系数由整个训练集共享,不会针对每一句话重新计算。SAN-M 的出发点不是宣布其中一方过时,而是把两种互补的权重放入同一子层。
二、一句定义:在 Attention 的 Value 上增加记忆支路
SAN-M(Memory Equipped Self-Attention)是一种将多头自注意力输出与作用在 Value 投影上的 DFSMN memory 输出相加的时序建模模块。
这里的 M 不是一个额外 Decoder,也不是推理时不断扩张的 KV cache。它是一组训练得到的时间滤波参数。输入长度改变时,参数量不会随之改变。
三、单个 SAN-M Block 的数据流
在常见 FunASR Encoder 中,一个块可概括为 LayerNorm → SAN-M → Residual → LayerNorm → FFN → Residual。因此 SAN-M 改动的是 Transformer Block 的时序混合部分,而不是删除 FFN 或整套 Encoder。
四、DFSMN Memory 怎样读取时间窗口
对时间位置 t,Memory 将当前 Value 与若干过去、未来位置相加。忽略层间投影后,可以写成:
N₁ / N₂控制回看和前瞻的阶数;s₁ / s₂是两侧的 stride,可以隔帧取样以扩大感受野;aᵢ / cⱼ是逐通道可学习系数,因此实现上接近 depthwise temporal convolution;- 多层堆叠后,局部感受野逐层扩大,而不需要 RNN 的串行反馈。
示例:look-back = 2,look-ahead = 1,stride = 1
位置 t 的 Memory 读取:V[t-2], V[t-1], V[t], V[t+1]
M(V[t]) = V[t]
+ a₂ ⊙ V[t-2] + a₁ ⊙ V[t-1]
+ c₁ ⊙ V[t+1]
离线识别可以使用未来帧;严格流式识别必须去掉或限制 look-ahead。
Attention 的权重会随句子变化,因此能跳到与当前声音相关的远处位置;Memory 的系数对不同句子相同,更像模型从整个数据集学到的平均局部声学模板。两者都是“加权求和”,区别在权重从哪里来。
五、SAN-M 在完整 ASR 系统中的位置
原始论文采用 Transformer 风格的 Encoder–Decoder 框架,并允许基础时序子层分别选择 SAN、DFSMN 或 SAN-M。论文在 AISHELL-1 上表现最好的组合是 SAN-M Encoder 加 DFSMN Decoder。今天更常见的 FunASR/Paraformer 用法,则是把多层 SAN-M 当作声学 Encoder。
理解 “SAN-M Paraformer-v2”:SAN-M 是 Encoder,CTC posterior 负责把帧级表示压成 token embedding,双向非自回归 Decoder 再并行预测整句。三者是不同层次的设计选择。
六、与 Transformer 和 Conformer 同轴比较
| 比较轴 | Transformer | SAN-M | Conformer |
|---|---|---|---|
| 全局建模 | Multi-Head Self-Attention | Multi-Head Self-Attention | Multi-Head Self-Attention |
| 局部模块 | 没有显式时序卷积 | DFSMN FIR Memory | GLU + Depthwise Conv |
| 融合顺序 | 只有 Attention | Attention 与 Memory 并行相加 | Attention 后串行接 Conv |
| 局部权重 | 由当前输入动态产生 | 训练后共享的逐通道滤波系数 | 共享卷积核,含门控和非线性 |
| 典型 Block | MHSA → FFN | SAN-M → FFN | ½FFN → MHSA → Conv → ½FFN |
| 流式约束 | 限制 Attention 右侧上下文 | 同时限制 Attention 与 Memory 前瞻 | 限制 Attention 并改用因果卷积 |
这张表描述结构,不直接推出准确率或速度赢家。真实结果还取决于降采样、层数、隐藏维度、训练数据、解码头、量化和推理引擎。
七、原始论文实际证明了什么
在 170 小时 AISHELL-1 实验中,作者报告 43M 参数的 SAN-M Encoder + DFSMN Decoder 在开发集/测试集得到 5.74%/6.46% CER;46M 参数的 SAN Encoder + SAN Decoder 基线为 6.58%/7.33%。测试集相对下降约 11.8%,且两者都没有外部语言模型。
在作者的 20,000 小时中文工业数据上,63M 的较深较窄 SAN-M 系统相对 59M SAN 基线,将 common/far-field CER 从 9.8%/15.0% 降到 8.3%/12.5%。这是作者报告的专有数据结果,外部读者无法仅凭论文完整复现数据分布。
证据边界:这些数字说明 SAN-M 在论文给定的中文 ASR 设置中优于其同代基线;它们不能证明 SAN-M 在任意语言、任意训练规模或现代 Conformer checkpoint 上必然更好。
八、工程边界:名称不能替代上下文预算
全局注意力仍可能是二次复杂度
加入 Memory 不会自动消除全局 self-attention 的 O(T²) 时间和显存成本。长音频仍需要降采样、分块、局部 Attention 或专门的缓存策略。
Memory 的前瞻决定最低算法延迟
离线模型可以读取未来帧;流式系统必须明确 look-ahead、chunk size、缓存长度和 partial 提交策略。只看到配置里的 SANMEncoder 不能推断端到端延迟。
Encoder 好坏不等于完整识别系统好坏
删除、插入、热词、时间戳和静音误识别还受到 CTC/CIF、Decoder、VAD、语言模型与后处理影响。比较时应固定解码方式,再测 WER/CER、RTF、首字延迟、显存和噪声集。
SAN-M 的 Memory 是不是等同于卷积?
计算形式很接近逐通道一维卷积,但 DFSMN 还强调时间阶数、stride、跨层残差和无循环的长上下文堆叠。把它视为“FIR 风格的 depthwise temporal filter”有助于理解,但不要据此假定所有实现与某个 Conv1D API 完全等价。
九、一手资料
- Z. Gao et al. SAN-M: Memory Equipped Self-Attention for End-to-End Speech Recognition.
- ModelScope FunASR. SAN-M 官方开源实现.
- Z. Gao et al. Streaming Chunk-Aware Multihead Attention for Online End-to-End Speech Recognition.
- K. An et al. Paraformer-v2: An Improved Non-autoregressive Transformer for Noise-robust Speech Recognition.
评论加载中...