Is Attention Better Than Matrix Decomposition
Is Attention Better Than Matrix Decomposition?
论文地址:
参考资料:
整体思路以及计算方式
思路是利用矩阵分解代替Attention。
假设X∈Rd×n可以分解为如下形式:
X=X+E=DC+E 这些变量满足如下条件(E表示噪声):
XEDC∈Rd×n∈Rd×n∈Rd×r∈Rr×n 使用流程为通过某种方式计算D,C,最后输出DC。
作者给出了两种方式计算D,C:
Soft VQ
for k=1,…,K:
C←Softmax(T1cosine(D,X))
D←XC⊤diag(C1n)−1
return X=DC
NMF with MU
for k=1,…,K:
Cij←Cij(D⊤DC)ij(D⊤X)ij
Dij←Dij(DCC⊤)ij(XC⊤)ij
return X=DC
时间复杂度
Soft VQ时间复杂度:
C←Softmax(T1cosine(D,X)),所以时间复杂度为O(nrd)
cosine(D,X)需要计算D⊤X,即r×d,d×n→r×n,所以时间复杂度为O(nrd)
Softmax:r×n→r×n,所以时间复杂度为所以时间复杂度为O(nr)
总时间复杂度为O(nrd)
D←XC⊤diag(C1n)−1:
diag(C1n)−1:r×n,n×1→r×1→r×r,时间复杂度为O(nr)
XC⊤:d×n,n×r→d×r,时间复杂度为O(nrd)
C⊤diag(C1n)−1:d×r,r×r→r×r,时间复杂度为O(dr2)
所以时间复杂度为O(nrd+dr2)
循环K次,时间复杂度为O(K(nrd+dr2))
X=DC:d×r,r×n→d×n,时间复杂度为O(nrd)
总时间复杂度为O((K+1)nrd+Kdr2)
NMF with MU时间复杂度:
Cij←Cij(D⊤DC)ij(D⊤X)ij
D⊤X:r×d,d×n→r×n,时间复杂度为O(nrd)
D⊤DC
先计算DC,再计算D⊤DC
DC:d×r,r×n→d×n,时间复杂度为O(nrd)
D⊤DC:r×d,d×n→r×n,时间复杂度为O(nrd)
先计算D⊤D,再计算D⊤DC
D⊤D:r×d,d×r→r×r,时间复杂度为O(dr2)
再计算D⊤DC:r×r,r×n→r×n,时间复杂度为O(nrd)
一般r<n,所以选择第二种算法,时间复杂度为O(nrd+dr2)
两次element wise乘法/除法:r×n→r×n→r×n,时间复杂度为O(nr)
循环K次,时间复杂度为O(K(nrd+dr2))
X=DC:d×r,r×n→d×n,时间复杂度为O(nrd)
总时间复杂度为O((K+1)nrd+Kdr2)
注意r,K一般不会很大(远小于n),所以该方法的时间复杂度关于序列长度大概能到线性。
训练以及loss
没有区别。
代码
实验以及适用场景
目前只适用于Encoder结构,不适用于Decoder结构;实验主要是基于CV的,能达到和Attention相当的结果。
细节
在进行循环的时候不计算梯度,只有最后一次操作计算梯度。
简评
优点:
缺点:
没法直接应用到Decoder结构中,即无法训练lm;
总结