Zhangzhe's Blog

The projection of my life.

0%

Linformer: Self-Attention with Linear Complexity

URL

https://arxiv.org/pdf/2006.04768.pdf

TL;DR

  • 本方法—— Linformer 使用矩阵的低秩来降低原始 TransformerMulti-HEAD Attention 计算的时空复杂度

  • 不同 Transformer 结构的复杂度

linformer

Algorithm

原始 Transformer 使用的 Multi-HEAD Attention

headi=Attention(QWiQ,KWiK,VWiV)=softmax[QWiQ(KWiK)Tdk]VWiVhead_i = Attention(QW_i^Q,KW_i^K,VW_i^V)=softmax[\frac{QW_i^Q(KW_i^K)^T}{\sqrt d_k}]VW_i^V

其中: K,Q,VRn×dm   WiQ,WiKRdm×dkK,Q,V \in \mathbb R^{n\times d_m} \ \ \ W_i^Q,W_i^K\in \mathbb R^{d_m\times d_k}

所以: softmax[QWiQ(KWiK)Tdk]Rn×nsoftmax[\frac{QW_i^Q(KW_i^K)^T}{\sqrt d_k}] \in \mathbb {R} ^{n\times n}n 表示序列长度,所以原始 Transformer 使用的 Multi-HEAD Attention 的时空复杂度为 O(n2)O(n^2)

LinformerMulti-HEAD Attention 的修改

  • KWiK,VWiVRn×dkKW_i^K, VW_i^V\in \mathbb R^{n\times d_k} 投影到 EiKWiK,FiVWiVRk×dkE_iKW_i^K, F_iVW_i^V\in \mathbb R^{k\times d_k} ,其中 k 是一个常数,时空复杂度变成了 O(n)O(n) ,其中,E、F 都是可学习的投影矩阵, E,FRk×nE,F \in \mathbb R^{k\times n}

  • headiˉ=Attention(QWiQ,EiKWiK,FiVWiV)=softmax[QWiQ(EiKWiK)Tdk]FiVWiV\bar{head_i} = Attention(QW_i^Q,E_iKW_i^K, F_iVW_i^V)=softmax[\frac{QW_i^Q(E_iKW_i^K)^T}{\sqrt d_k}]F_iVW_i^V

  • 投影矩阵 E、F 可共享参数,分为:

    • Headwise sharing: Ei=E,  Fi=F,  for each layerE_i=E,\ \ F_i=F, \ \ for\ each\ layer
    • Key-value sharing: Ei=E=Fi,  for each layerE_i=E = F_i, \ \ for\ each\ layer
    • Layerwise sharing: E,F,  layer sharingE, F, \ \ layer\ sharing

理论依据与结果

  • 特征值的长尾分布

linformer2

  • 效果(与 BERT-base 对比)

linformer3

Thoughts

  • 文中提到不使用奇异值分解来得到低秩矩阵的原因是:奇异值分解会引入额外的计算量,并且无法共享参数

  • 代码被打包为了 linformerpip 包,可以在 torch 框架下直接使用