Fast-FNet: 通过高效傅立叶层加速Transformer编码器模型

 

在FNet中,注意层被离散傅里叶变换(DFT)取代,以加速处理,同时保持模型特征,仍然产生准确的结果。在FNet中,仅DFT运算的实部输出用于确保每个编码器块中的前馈层结构不变。DFT层的输出可以具体地表示为以下形式:

FNet架构仅使用DFT输出的实部

Fast-FNet的一个重要部分是利用FT的对称性(FT的共轭对称性)降低DFT输出的维数。

对于一个M×N维度的输入x,其DFT为:

当输入序列对于所有m和n是实值时,DFT输出在两个维度上是共轭对称的 

产出矩阵现在满足:

由于共轭对称特性:

将导致FNet中的DFT层的输出序列产生具有几乎相同的一半的序列的结果 

因为X_{u,v}对于v=0v=N/2是不相等的。

因此相同的信息被两次馈送到模型,从而产生冗余。

>>> 论文提出的Fast-FNet模型消除了这种冗余并减小了模型大小。

Fast-FNet的结构

DFT输出序列的实部被切为两半,并且仅第一相同的一半 (0\leq k< N/2) 用于随后的运算,携带相同信息的另一半被丢弃。

模型的隐维数由H降为H/2。

对于X_k,将序列长度保持在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的维数。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞大圣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值