源码地址:https://github.com/sail-sg/metaformer
1. 动机&贡献
为什么transformer能够在vision上取得好的效果?其核心在于MetaFormer的结构,那么本文在这个认知的基础上去探索了MetaFormer结构的下限。 在MetaFormer结构上使用了两个很普通的token mixer 均取得了很棒的分类效果。
本文的一些结论如下:
- MetaFormer结构保证了其模型的下限,即将mixer 换成了identityFormer,其在ImageNet-1K上的top-1 acc依然达到80.4%;
- MetaFormer结构中使用任何token mixer均能拿到不错的结果。直接使用RandFormer,即随机生成的加权矩阵,在ImageNet-1K的top-1 acc达到81.4%
- MetaFormer结构能够很容易达到SOTA的效果。这里作者给了两种mixer的形式
- ConvFormer, 使用MobileNet中的depthwise conv block,就能够超越ConvNeXt
- CAFormer,将ConvFormer的后两个stage的token mixer换成标准的self-attention,就能刷新目前ImageNet-1K top-1的性能;
2. 方法
2.1 MetaFormer
其中第2个式子就是带有skip-connection的FFN结构,第1个式子就是attention的结构,注意这里均采用的pre-norm的形式。
2.2 探索的4种MetaFormer结构
- IdentityFormer
即直接连接,不进行spatial的融合。 - RandFormer
其中是随机初始化并进行freeze的矩阵 - ConvFormer
其中 是pointwise 卷积,即逐点的FC层, 是depthwise的卷积, 是非线性激活函数,注意在depthwise卷积之后没有使用激活函数。 - CAFormer
在ConvFormer的后两个stage换成全局attention。
除此之外还有三个修改:
- 激活函数: StarReLU, 能够大大降低FLOPs的同时达到GELU的性能,
- scaling branch output, skip-connection 连接处的连接方式, 包括LayerScale ()和ResScale (), 最终选择的是ResScale。
- Disabling biases, MetaFormers种卷积层,全连接层以及归一化层的bias都关闭,并不影响指标,甚至还能有所改善。
3. 结论
- MetaFormer结构保证了模型结构的下限,但更好的tokenMixer能带来更高的性能;
- 激活函数可以均替换为 StarReLU, skip-connection可以模型ResScale,bias可以默认关闭;
- 思考:对于下游任务,应该更多的考虑什么样的结构能够保证指标,如果采用MetaFormer结构是不是有比cross attention更好的结构,或者说使用MetaFormer的结构替换以前的FPN结构能获得更好的性能