Hyena Hierarchy: Towards Larger Convolutional Language Models
论文地址:
整体思路以及计算方式
整体还是Toeplitz的思路,这里理一下如何计算。
首先是基本操作f:
f(X1,X2,T)=X1⊙(TX2) 其中T是Toeplitz matrix。
然后是Hyena的计算方式:
假设Hyena的循环次数为m,输入为X∈Rn×d;
第一步得到初始输入和每次循环中使用的X1,即f的输入1;
U=XW∈Rn×(m+1)×d;
V=Conv1d(U)∈XW∈Rn×(m+1)×d;
kernel size为3,这一步的作用是进行local token mixing;
将V按照第二个维度拆分为m+1个向量:
V1,…,Vm,X0∈Rn×d;
第二步利用一个网络计算每一步的Toeplitz matrix:
T1,…,Tm∈Rn×n;
for i in 1,…,m:
Xi=f(Vi,Xi−1,Ti)
return Xm;
时间复杂度
O(nmdlogn+nd2)。
代码
简评
非常有意思的工作:
local token mixing看起来比较关键;