最近读论文、看文章发现了两件有意思的事情,今天有时间分享闲聊一下,其一是各种MLP的论文频出,从各个方面对Transformer进行“围攻”,这让人有种“大道至简”的感觉;其二是“XXX is all you need”的标题文章和论文层出,让人有种“通货膨胀”的感觉。
在Google大佬们一篇《Attention is all you need》引领了一波潮流之后,Transformer的在各大榜单上的席卷之势也带起了一大波创造热潮,Attention和Transformer成了标题中的常客。而如今,MLP is all you need 的东风又由Google吹起,仿佛一个轮回。Transformer吊打一切之后,大道至简的MLP又对Transformer来了一顿猛锤。
![v2-fe705a8527989bab639b5d3e753e1f2f_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/f06702e5a0607322ad0615847b81c3db.png)
目前的诸多机器学习相关的问题,诸如推荐问题中的序列处理,时间序列的预测,文本分类等问题都会涉及到Attention函数的使用,Attention已经成为了这些问题在建模时的最为核心的模块。它可以无视输入和输出之间的距离而对它们之间的相关性进行建模。
2017 年,Google 机器翻译团队发表的《Attention is All You Need》中,完全抛弃了RNN和CNN等网络结构,仅仅采用Attention机制来进行机器翻译任务,并取得了很好的效果,注意力机制也成了一个研究热点。在炼丹笔记《Attention函数手册》一文中,我们介绍了各种权重函数,A(Q,K)的计算方式包括Concat策略、Minus、Add、Dot Product、Bilinear Dot、Scaled-dot Product、Content-Based等,f(·)的两种计算方式,Softmax函数和TopN Softmax等。
![v2-e3d03a2af933a3cb193b8156cd727e20_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/beaf147bc3b9f7e0709bc946bbfba5e7.png)
Attention是神经网络中的一种机制。模型可以通过选择性地关注给定的数据集来学习做出预测。Attention的个数是通过学习权重来量化的,输出则通常是一个加权平均值。
![v2-e4831161d23241d003ac2bd6dbe5cc51_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/7ab58563844d03d42983b1c6fe82cb0c.png)
Self-Attention是一种注意机制,模型利用对同一样本观测到的其他部分来对数据样本的剩下部分进行预测。从概念上讲,它感觉非常类似于non-local的方式。还要注意的是,Self-attention是置换不变的;换句话说,它是对集合的一种操作。
![v2-125cd07fcb176ce4635c9ee281a2d71c_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/63afca1e39d9ce6e6cfd3f3e3fd38ad4.png)
关于attention和self-attention存在非常多的形式,我们之前常见的Transformer是依赖于scaled-dot-product的形式,也就是:给定query矩阵Q, key矩阵K以及value矩阵V,那么我们的输出就是值向量的加权和,其中,分配给每个值槽的权重由Quey与相应Key的点积确定。
而multi-head self-attention是Transformer的核心组成部分,和简单的attention不同之处在于,Multihead机制将输入拆分为许多小的chunks,然后并行计算每个子空间的scaled dot product,最后我们将所有的attention输出进行拼接。
![v2-37824f21610be584b75536f8037dd466_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/4f8aad2cc4786e017e09708c029013aa.png)
![v2-9915c6f2f3b945c85ef4bf71fe299cc6_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/460f419b9d039b6625d76aa5aa4c1b31.jpeg)
Transformer,很多时候我们也称之为"vanilla Transformer", 它有一个encoder-decoder的结构,decoder的Transformer可以在语言建模的时候获得非常好的效果。
从2020年,Transformer开始在CV领域大放异彩:图像分类,目标检测,语义分割,图像生成等。而从深度学习暴发以来,CNN一直是CV领域的主流模型,而且取得了很好的效果,相比之下Transformer却独霸NLP领域,Transformer在CV领域的探索正是研究界想把Transformer在NLP领域的成功借鉴到CV领域。
在《霸榜各大CV任务榜单,Swin Transformer横空出世》一文中,我们探讨了将Transformer从NLP转移到CV的策略,之前计算机视觉相关的任务主要被CNN所统治。
![v2-c92f09d891adc9e3d8a8673ebd0b272a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/5eaaca7e96884197833aba472c3444e7.jpeg)
- 从AlexNet及其在ImageNet图像分类挑战方面的革命性表现,CNN架构已经通过更大的规模,更广泛的连接,以及更复杂的卷积形式而逐渐壮大。
自然语言处理(NLP)中网络体系结构的演变走了一条不同的道路,今天流行的体系结构取而代之的是Transformer。
- Transformer是为序列建模和转换任务而设计的,因为它关注数据中的长期依赖性建模。它在语言领域的巨大成功促使研究人员研究它对计算机视觉的适应性,最近它在某些任务上显示了不错的结果,特别是图像分类和联合视觉语言建模。
Swin Transformer,它可以作为计算机视觉的通用backbone。将Transformer从语言转到视觉的过程中所面临的挑战来自于两个领域之间的差异,例如视觉实体的规模变化很大,图像中的像素与文本中的单词相比分辨率很高。为了解决这些差异,文章提出了一个层次化的Transformer,其表示是用移位窗口计算的。
![v2-d06c685fe8c756b0817e8f2c6523b553_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/e575e072a699a3f8a5e20ead1705fd3a.png)
没错,兜兜转转又回来了,我们陆续的经历了:
- Attention is all you need
- Transformer is all you need
- Attention is not all you need
- MLP-Mixer: An all-MLP Architecture for Vision
- CNN is better than Transformer
- Pay Attention to MLPs
![v2-77fbd3847a746ec0b2de9db8af622c98_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/790f29d2cad66ace6f938b04c66f4b0d.png)
![v2-ecdd2f4ec33e08866b4b1ca7a719d36e_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/3928ed1018a000cf976af49c0195d7ae.png)
我们发现,从模型结构上MLP-Mixer和ViT非常类似,每个Mixer结构由两个MLP blocks构成,其中红色框部分是token-mixing MLP,绿色框部分是channel-mixing MLP。差别主要体现在Layers的不同,ViT采用的是Transformer layer,而MLP-Mixer采用的是mixer-layer,只包括两个MLP。
![v2-eb579765c2a3a3f17bd9739a38299b8d_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/c734055880ebeb68750db8f43542fe89.jpeg)
MLP-Mixer用Mixer的MLP来替代ViT的Transformer,减少了特征提取的自由度,并且巧妙的可以交替进行patch内与Channel之间信息交流,省去了Transformer复杂的结构,变的更加简洁。
![v2-158d423ab09e6c0389bbaa00468c198e_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/d9146d9e6c9dab39fd5e25686ee994bf.png)
![v2-00f9505a75e8522246a4953838166c66_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/bb4c154cc578e975836a1b0c84e22f37.jpeg)
谷歌原 ViT 团队提出了一种不使用卷积或自注意力的 MLP-Mixer 架构,并且在设计上非常简单,在 ImageNet 数据集上也实现了媲美 CNN 和 ViT 的性能。而《Pay Attention to MLPs》所给我们带来的gMLP算是MLP-Mixer的增强版,整个模型具有空间门控单元(Spatial Gating Unit, SGU)的 gMLP 架构,由堆叠的具有相同的结构和大小的 L 块组成。
![v2-583d26fd8f5e73089adc07caced57b77_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/4494b1ebb480aacde4dc55a4c7dfe1b5.jpeg)
![v2-827ac803349564ca975b43a6b1c47ece_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/56fd84511a4d641a63cfb1f0de915d5f.png)
潮流兜兜转转,一会儿流行这个骚操作,不一会儿又流行反向操作。
MLP->CNN->Attention->Transformer->MLP
那么我们要不要紧跟这个潮流走向呢?不跟会不会被淘汰?
这里比较赞同苏剑林的观点,“没必要投入多少精力进去,平时大致关注一下就行了。抛开前面说的优雅性问题不说,这些工作的实用性本身就值得商榷。像将Attention换成MLP的改进,最大的优点无非就是提速,没错,是会快一点,但理论复杂度还是O(n**2),这说明其实没有本质改进,况且提速的同时通常还会降低一点性能。”
而怎么才能关注推荐搜索、深度学习领域的潮流走向呢?
![v2-f34eabadc0d5d126a479a1df6cf9e146_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/974fe4d02ba2c5782fda77b68e34bf2c.png)