Flowformer: Linearizing Transformers with Conservation Flows

论文地址:

参考资料:

整体思路以及计算方式

利用网络流的思路计算Attention。

输入:

  • QRn×d,KRm×d,VRm×dQ\in \mathbb R^{n\times d}, K\in \mathbb R^{m\times d}, V\in \mathbb R^{m\times d}

  • Q=ϕ(Q)Rn×dQ=\phi(Q)\in \mathbb R^{n\times d}

  • K=ϕ(K)Rm×dK=\phi(K)\in \mathbb R^{m\times d}

  • Calculate incoming and outgoing flow

    • Qsum=Sum(Q,d=0)RdQ_{sum}=\mathrm{Sum}(Q,d=0) \in \mathbb R^{d}

    • Ksum=Sum(K,d=0)RdK_{sum}=\mathrm{Sum}(K,d=0) \in \mathbb R^{d}

    • dQ=1/(QKsum)Rnd_Q = 1/(Q K_{sum}^{\top})\in \mathbb R^{n}

    • dK=1/(KQsum)Rmd_K = 1/(K Q_{sum}^{\top})\in \mathbb R^{m}

  • conservation refine for source and sink

    • tQ=Sum(KdK,d=0)Rdt_Q= \mathrm{Sum}(K\odot d_K, d=0)\in \mathbb R^{d}

    • tK=Sum(QdQ,d=0)Rdt_K= \mathrm{Sum}(Q\odot d_Q, d=0)\in \mathbb R^{d}

    • sink=QtQRn×dsink= Q \odot t_Q \in \mathbb R^{n\times d}

    • source=KtKRm×dsource = K \odot t_K \in \mathbb R^{m\times d}

  • Competition & Allocation

    • α=Sigmoid(sink)Rn×d\alpha = \mathrm{Sigmoid}(sink) \in \mathbb R^{n\times d}

    • β=Softmax(source)Rm×d\beta= \mathrm{Softmax}(source) \in \mathbb R^{m\times d}

  • dot product

    • Q1=QαRn×dQ_1 = Q\odot \alpha \in \mathbb R^{n\times d}

    • K1=QβRm×dK_1 = Q\odot \beta \in \mathbb R^{m\times d}

    • O=α(Q1(K1V))Rn×dO=\alpha \odot (Q_1(K_1^{\top} V)) \in \mathbb R^{n\times d}

时间复杂度

理论上依然是O((n+m)d2)O((n+m)d^2),但是实际上应该不会太快。

训练以及loss

不变。

代码

实验以及适用场景

测试了各种常见,总体来说性能都有提升。

细节

暂无。

简评

从理论和实验来说都还不错,是一篇不错的工作,但是计算的方式有点生硬,感觉并没有抓住问题的核心。

Last updated