前不久入职某大厂了,有点怀念无忧无虑的学生时代。入职后很快收到了第一个优化任务,算法岗的高不确定性确实会让人有一丝焦虑。目前体感来看,现有的深度学习模型性能非常依赖于数据质量,在数据质量足够的前提下,才有模型上的一系列操作。
本文将总结类ViT网络结构Gmlp,论文题为Pay Attention to MLPs
本文为个人总结,如有错误,欢迎指出。本文默认读者具有ViT相关知识
Gmlp是类ViT的结构,其输入仍为若干图像块(即将一张图像切割成若干图像块),输出为若干个向量(token)堆叠组成的矩阵,例如token的维度为 L L L,个数为 N N N,则输出为 N ∗ L N*L N∗L的矩阵。通过池化等操作转换为最终的特征向量。
对比ViT,Gmlp取消了Position Embedding以及Self Attention,由若干个基本构成单元堆叠而成,基本构成单元(unit)的结构如下图所示
设输入矩阵(即图中的Input Embeddedings)为
n
∗
d
n*d
n∗d的矩阵
X
X
X,则Gmlp的unit结构可以简化为(省略了Norm等操作):
Z
=
δ
(
X
U
)
Z
^
=
s
(
Z
)
Y
=
Z
^
V
+
X
U 、 V U、V U、V为可学习的矩阵(就是FC层,维度自己定), δ \delta δ为激活函数, s ( z ) s(z) s(z)为图中的Spatial Gating Unit,其结构可以表示为
f
W
,
b
(
Z
)
=
W
Z
+
b
s
(
Z
)
=
Z
⊙
f
W
,
b
(
Z
)
设
Z
Z
Z为
n
∗
d
n*d
n∗d的矩阵,则
W
W
W为
n
∗
n
n*n
n∗n的矩阵(不会改变输入矩阵的维度),
b
b
b为
n
n
n维向量(
W
Z
+
b
WZ+b
WZ+b表示
W
Z
WZ
WZ的第一行元素与b的第一维元素相加),为了保证训练的稳定性,
W
W
W初始化值接近于0(貌似用[-1,1]的均匀分布初始化),
b
b
b的初始值为1,此时
f
W
,
b
(
Z
)
≈
1
f_{W,b}(Z)\approx1
fW,b(Z)≈1,此时Spatial Gating Unit相当于Identity Mapping。
更进一步的作者发现将
Z
Z
Z沿着channel维度切割成
Z
1
、
Z
2
Z_1、Z_2
Z1、Z2(
Z
1
、
Z
2
Z_1、Z_2
Z1、Z2维度分别为
n
∗
d
1
n*d_1
n∗d1,
n
∗
d
2
n*d_2
n∗d2,
d
1
+
d
2
=
n
d_1+d_2=n
d1+d2=n)两个部分更为有效,此时
s
(
Z
)
s(Z)
s(Z)操作变为
s
(
Z
)
=
Z
1
⊙
f
W
,
b
(
Z
2
)
s(Z)=Z_1\odot f_{W,b}(Z_2)
s(Z)=Z1⊙fW,b(Z2)
Spatial Gating Unit的输出在经过矩阵 V V V调整维度后与unit的输入进行相加。
这里总结几点我认为比较重要的点,首先是脱离Gmlp的大方向上,在看完ViT的结构后,个人一直感觉Self Attention不是其性能的主要来源,gMLP、MLP-Mixer,以及接下来要总结的MetaFormer都验证了这一点。更进一步的,这几个工作都有一个共性,即类ViT结构的模型都会先用FC层混合单个token中的信息,接着用一个特定的操作来混合多个token的信息(MLP-Mixer通过token mixer来混和多个token的信息,MetaFormer通过池化操作,gMLP通过Spatial Gating Unit),这两个操作可看成对CNN中卷积操作的拆解,在CNN中,多个特征图输入到卷积核后,卷积核会糅合多个特征图中的空间(Spatial)和通道(channel)信息。而在类ViT结构中,若将token看成特征图,则其首先利用FC层糅合单个特征图(token)的空间信息,接着糅合多个特征图(token)的信息(通道信息)。此外,类ViT结构中的矩阵操作可以等价于卷积操作(只不过卷积核的分辨率大小等于特征图大小)。综合上述分析,类ViT结构更像是CNN模型的变种,我们似乎发现了一种更为有效的CNN结构。
回到Gmlp上,Spatial Gating Unit形式上很想Attention,但作者引入其的本意并不是挑选哪类特征是重要的,而是混合多个token的信息,不过这种混合的方式比较诡异,应该存在更具解释性的方式。