在FNet中,注意层被离散傅里叶变换(DFT)取代,以加速处理,同时保持模型特征,仍然产生准确的结果。在FNet中,仅DFT运算的实部输出用于确保每个编码器块中的前馈层结构不变。DFT层的输出可以具体地表示为以下形式:
FNet架构仅使用DFT输出的实部
Fast-FNet的一个重要部分是利用FT的对称性(FT的共轭对称性)降低DFT输出的维数。
对于一个M×N维度的输入x,其DFT为:
当输入序列对于所有m和n是实值时,DFT输出在两个维度上是共轭对称的
产出矩阵现在满足:
由于共轭对称特性:
将导致FNet中的DFT层的输出序列产生具有几乎相同的一半的序列的结果
因为对于和是不相等的。
因此相同的信息被两次馈送到模型,从而产生冗余。
>>> 论文提出的Fast-FNet模型消除了这种冗余并减小了模型大小。
Fast-FNet的结构
DFT输出序列的实部被切为两半,并且仅第一相同的一半 用于随后的运算,携带相同信息的另一半被丢弃。
模型的隐维数由H降为H/2。
对于,将序列长度保持在2的幂,以便于随后的计算是必要的。
第一个 encoder block 由 reduced embeddings(用于残差)和 initial embeddings(用于傅立叶层)馈送。(解决了 Add and Normalize 层不能处理两个不同的输入尺寸的问题)
傅立叶层被改变为加速后的版本,其中输出是DFT的前半部分。
在每个 encoder block 结束之前,输出被零填充以保持隐藏维度稳定。
对于所有剩余的编码器块,取出添加的零以获得残差,而零填充版本用作DFT输入。(由于编码器块的输出隐藏维度将是H/2,出于连续性原因,下一编码器块的输入大小也应当等于原始隐藏维度)
论文中提出的两种 Dimension Reduction 方法:
1.Pooling 池化
First pooling method :the max pooling
Second pooling method:the mean pooling
2.使用一个 Dense 神经网络层
可学习权重矩阵W_proj将输入矩阵X的每个数据点从N维空间投影到K维空间,其中K是N的一半,因此输出矩阵Y具有M×K的维数。