本文主要是介绍学习笔记【mlp与self-attention】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
mlp与self-attention
- mlp是针对一维向量的,参数是固定的,输入的形状是固定的。能够对全局的每一个元素进行感知
- self-attention实质上是一种更通用的mlp。是针对序列的,参数是可以根据输入进行调整的,能够确保序列中的每一个token能够感知其他token。
- 二者都能够进行全局感知
相关工作
(1)MLP-Mixer
- 概要:通过不断堆积Mixer层(与transformer类似)实现,能够达到比肩CNN和transformer的效果
- Mixer层:先进行row-wise MLP,再进行colom-wise MLP。不改变输入的尺寸
这里的row-wise MLP相当于transformer block中的FFN;colum-wise MLP在实现上是对输入进行转置然后执行row-wise MLP
(2)External Attention
- 概要:从理论上证明,对self-attention的公式进行变换得到MLP的实现形式
- 推导:
传统的self-attention公式:
在cv领域有时会直接使用原始特征作为QKV,即不对原始特征进行矩阵变换,则self-attention可以变换为如下形式
但是这种简化需要先对输入的序列的token之间进行注意。文章提出通过一个可训练的记忆矩阵实现attention计算
- 总结:MLP的本质也是attention,不过是external attention,即需要额外开辟一块全局存储,用于计算token之间attention的权重,以及加权之后的value。
小结
-
这两篇文章本质上是一样的,External Attention中输入和 W k T W_k^T WkT相乘实质上是执行row-wise MLP;之后进行Norm,这里文章中提出这里的Norm不仅要对行进行归一化,也要对列进行归一化,相当于执行了colum-wise MLP;之后与 W v W_v Wv相乘相当于再执行了了一次row-wise MLP。因此一层External Attention相当于1.5个Mixer
-
little idea:用transformer实现External Attention。
在序列中加入若干unused token表示全局特征,通过设计attention mask控制各个token可以看到的tokens,使得其他token都只能关注那些unused tokens(包含全局信息)
在transformer中加入全局信息 -
总结:MLP实质上是一种有全局记忆的attention
笔记参考:MLP竟然也是Attention
这篇关于学习笔记【mlp与self-attention】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!