[FNet]论文实现:FNet:Mixing Tokens with Fourier Transform

简介: [FNet]论文实现:FNet:Mixing Tokens with Fourier Transform

论文:FNet: Mixing Tokens with Fourier Transforms

作者:James Lee-Thorp, Joshua Ainslie, Ilya Eckstein, Santiago Ontanon

时间:2022

1. 介绍

transformer encode架构可以通过很多种方式进行加速,毫无例外的都是对attention mechanism 进行处理,通过把平方项的复杂度缩小到线性项的复杂度;

FNet没有用什么former后缀就表明,FNet并不是传统意义上transformer架构的优化,并不是在attention mechanism的优化;这里一个替换,利用线性的傅里叶变化替换掉注意力机制,在处理长文本的时候降低少许性能而巨大的提升训练推理速度和内存效率;

2. 架构

架构图如图所示,可以看到非常的清晰:

Discrete Fourier Transform(离散傅里叶变换): 对于 image.png ,有 image.png 如下:

image.png

对于傅里叶变换的方式有两种方法,第一种就是简单的利用矩阵进行计算,有矩阵 image.png

直接对序列乘个矩阵就好,另一种是FFT即the fast fourier transformer,采用最常见的算法是the Cooley–Tukey algorithm,将复杂度转化为 image.png

这里利用离散傅里叶变换,对sequence求一次,对d_model求一次,得到最后的序列形状和原来的序列形状一样;最后得到的结果是一个复数,是无法使用的,我们要将其转化到实数域上来;但是这里要注意的是,是在两次fourier转化后,再进行实域转化;标准的fourier sublayer采用的是直接取实数部分的方式,论文还提到了三种其他的方式进行实域转化:Hadamard, Hartley 和 Discrete Cosine Transforms. 这里Hartley的效果和直接取实域的效果相当,其使用的方法是利用实部减去虚部的方式;

# 利用pytorch计算 2d fourier变换
x = nn.fft.fftn(x)

得到傅里叶变化序列后,经过一次残差连接和正态化,再经过一层前馈神经网络从d_model到隐藏维度,接着经过一次残差连接和正态化,再来一次前馈神经网络从隐藏维度到d_model;这就是一个fourier transformer block;

其他结构与transformer相同;

下面是模型的对比,可以看到FNet mat的mixing layer ops 操作数量是和Linaer的操作数量是一致的,因为原理都差不多,都是相当于左右各乘了一个矩阵;

但是利用FFT可以明显的看到优势;

为什么有这种效果:傅里叶转化有一个混合token的效果,而feed-forward sublayer有逆傅里叶转化的效果,傅里叶转化是把时域转化为频域,而feed-forward sublayer是一个矩阵,类似于inverse fourier transformer可以把频域转化为时域;

3. 结果

从下图中可以发现FNet-Hybrid的效果最接近于BERT

这里FNet-Hybrid意味着最后两层Fourier sublayer被替换成full attention sublayer;

这图说明了对于更大、更慢的模型,BERT和FNet-Hybrid定义了the Pareto efficiency frontier;对于更小、更快的模型,FNet和线性模型定义了效率边界。

再看下图,感觉FNet的效果特别好;

4. 总结

TPU在计算矩阵相较于FFN有优势,而GPU在计算FFN相较于矩阵有优势;

FNet非常适合用于蒸馏,因为关键层没有权重;

FNet没有transformer decode,无法处理,未来需优化;


目录
相关文章
|
3月前
|
机器学习/深度学习 编解码 自然语言处理
【文献学习】An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
本文介绍了如何使用纯Transformer模型进行图像识别,并讨论了模型的结构、训练策略及其在多个图像识别基准上的性能。
72 3
|
3月前
【Bert4keras】解决Key bert/embeddings/word_embeddings not found in checkpoint
在使用bert4keras进行预训练并加载模型时遇到的"bert/embeddings/word_embeddings not found in checkpoint"错误,并提供了通过重新生成权重模型来解决这个问题的方法。
58 3
|
6月前
|
机器学习/深度学习 自然语言处理 ice
[GloVe]论文实现:GloVe: Global Vectors for Word Representation*
[GloVe]论文实现:GloVe: Global Vectors for Word Representation*
42 2
[GloVe]论文实现:GloVe: Global Vectors for Word Representation*
|
6月前
|
机器学习/深度学习 自然语言处理 C++
[Dict2vec]论文实现:Dict2vec : Learning Word Embeddings using Lexical Dictionaries
[Dict2vec]论文实现:Dict2vec : Learning Word Embeddings using Lexical Dictionaries
36 2
[Dict2vec]论文实现:Dict2vec : Learning Word Embeddings using Lexical Dictionaries
|
6月前
|
机器学习/深度学习 数据挖掘 API
[FastText in Text Classification]论文实现:Bag of Tricks for Efficient Text Classification
[FastText in Text Classification]论文实现:Bag of Tricks for Efficient Text Classification
36 2
|
6月前
|
机器学习/深度学习 BI
[RoFormer]论文实现:ROFORMER: ENHANCED TRANSFORMER WITH ROTARY POSITION EMBEDDING
[RoFormer]论文实现:ROFORMER: ENHANCED TRANSFORMER WITH ROTARY POSITION EMBEDDING
56 1
|
6月前
[Transformer-XL]论文实现:Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
[Transformer-XL]论文实现:Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
31 1
|
6月前
|
自然语言处理 文字识别 测试技术
测试CLIP zero-shot learning
CLIP是OpenAI的多模态预训练模型,使用对比学习在大量文本-图像对上训练,便于迁移至各种下游任务,如图像分类、OCR等。它通过分别编码文本和图像并计算相似度来评估匹配度。在图像分类测试中,CLIP能有效识别图像类别。此外,CLIP还可用于图像描述生成、文本搜图和文本生成图片(如AIGC)。近期研究致力于优化CLIP的数据、模型和监督方法。5月更文挑战第11天
70 0
|
机器学习/深度学习 人工智能 自然语言处理
RoFormer: Enhanced Transformer with Rotary Position Embedding论文解读
位置编码最近在transformer架构中显示出了有效性。它为序列中不同位置的元素之间的依赖建模提供了有价值的监督。
382 0
|
机器学习/深度学习 编解码 自然语言处理
BEIT: BERT Pre-Training of Image Transformers论文解读
本文介绍了一种自监督视觉表示模型BEIT,即图像transformer的双向编码器表示。继自然语言处理领域开发的BERT之后
579 0