封面 《天結いキャッスルマイスター》

前言

因为最近的用的网络里面采用了 Metaformer 作为 backbone,因此读一下 Metaformer 的论文,顺便记录一下。

结构

Transformer block 一般由两部分组成,一个是令牌混合器(token mixer),另一个是融合通道信息的(channel mlp)。一个普遍的观点是,attention 机制在 transformer 中共享最大,但是最近的工作表明将 attention 换成 Spatial MLP 后模型的表现仍然良好。基于这个观察 Metaformer 的作者提出了 Metaformer,将 transformer 中的 token mixer 换成其他模块,其认为 transformer 的宏观设计比 token mixer 更为重要。

metaformer 的结构如下,其一共有 4 种 former,分别为 IdentityFormer,RandFormer,ConvFormer,TransFormer。

Metaformer block 的公式总结如下

X=X+TokenMixer(Norm1(X))X=X+σ(Norm2(X)W1)W2X' = X + TokenMixer(Norm_1(X)) \\ X'' = X' + \sigma(Norm_2(X')W_1)W_2

其中 Norm1Norm_1 Norm2Norm_2为正则化,TokenMixer 为 metaformer 的令牌混合器,σ\sigma 为激活函数 W1W_1 W2W_2为 channel MLP 的可学习参数

IdentityFormer

IdentityFormer 中给 IdentityMapping 就是直接进行恒等映射

IdentityMapping(X)=XIdentityMapping(X) = X

RandomFormer

RandomMixing(X)=XWRRandomMixing(X) = XW_R

其中 XRN×CX \in R^{N \times C} 是输入序列长度为 N,通道数为 C,WRRN×NW_R \in R^{N \times N},为一个矩阵,其在随机初始化后冻结不可训练

ConvFormer

卷积采用 mobileNetV2 的结构中翻转可分离卷积的设计,采用 pointwise 卷积和 depthwise 卷积的结构,其公式如下

Convolutions(X)=Convpw2(Convdw(σ(Convpw1(X)))){Convolutions(X)} = {Conv_{pw2}}( {Conv_{dw}}(\sigma ({Conv_{pw1}}(X))))

CAFormer

CAFormer 如上图所示,即 backbone 的部分为 convformer,部分为 transformer。

StarRELU 激活函数

ReLU

在大多 transformer 中使用 ReLU 激活函数,每个 ReLU 消耗 1FLOP 计算单元

ReLU(x)=max(0,x)ReLU(x) = max(0,x)

GELU

而 GPT、Bert 和 ViT 等网络默认使用 GELU 激活函数,其计算公式如下

GELU(x)=xΦ(x)0.5×x(1+tanh(2π(x+0.044715x3)))GELU(x) = x\Phi(x) \approx 0.5 \times x(1 + \tanh(\sqrt{\frac{2}{\pi}}(x + 0.044715x^3)))

其中 Φ(x)\Phi(x) 为高斯分布的累积分布函数 (Cumulative Distribution Function for Gaussian Distribution ,CDFGD),每个计算单元消耗 14FLOPS,tanh 简单视作消耗 6 个 FLOPS,乘加算一个

SquaredReLU

为了简化 GELU,作者发现可以将 CDFGD 替换为 ReLU,, 每个计算单元消耗 2FLOPS

SquaredReLU(x)=xReLU(x)=(ReLU(x))2SquaredReLU(x) = xReLU(x) = (ReLU(x))^2

StarReLU

作者发现 SquaredReLU 的性能在某些任务不太行,其假设输入性能差是输出的分布变化导致,假设输入遵循均值为 0,方差为 1 的高斯分布,即 xN(0,1)x \sim N(0,1),此时我们有

E(x2)=Var(x)=1E((ReLU(x))2)=12E(x2)=0.5E(x4)=12π+z4exp(z22)dz=12π+z3d(exp(z22))=(z312πexp(z22))++3+z212πexp(z22)dz=0+3E(x2)=3E((ReLU(x))4)=12E(x4)=1.5Var((ReLU(x))2)=E((ReLU(x))4)E((ReLU(x))2)2=1.50.52=1.25E(x^2) = Var(x) = 1 \\ E((ReLU(x))^2) = \frac{1}{2}E(x^2) = 0.5 \\ E(x^4) = \frac{1}{\sqrt{2\pi}}\int_{-\infty}^{+\infty} z^4exp(-\frac{z^2}{2})dz \\ = -\frac{1}{\sqrt{2\pi}}\int_{-\infty}^{+\infty} z^3d(exp(-\frac{z^2}{2})) \\ = (-z^3\frac{1}{\sqrt{2\pi}}exp(-\frac{z^2}{2}))|_{-\infty}^{+\infty} + 3\int_{-\infty}^{+\infty} z^2\frac{1}{\sqrt{2\pi}}exp(-\frac{z^2}{2})dz \\ = 0 + 3E(x^2) = 3 \\ E((ReLU(x))^4) = \frac{1}{2}E(x^4) = 1.5 \\ Var((ReLU(x))^2) = E((ReLU(x))^4) - E((ReLU(x))^2)^2 = 1.5 - 0.5^2 = 1.25

为了消除偏差影响,采用减去均值除以方差的形式,公式如下

StarReLU(x)=(ReLU(x))2E((ReLU(x))2)Var((ReLU(x))2)=(ReLU(x))20.51.250.8944(ReLU(x))20.4472StarReLU(x) = \frac{(ReLU(x))^2 - E((ReLU(x))^2)}{\sqrt{Var((ReLU(x))^2)}} = \frac{(ReLU(x))^2 - 0.5}{\sqrt{1.25}} \\ \approx 0.8944(ReLU(x))^2 - 0.4472

作者假定输入成高斯分布,为了适应不同情况,将将其改为可学习的缩放和偏移参数,公式如下,这样只消耗 4 个 FLOPS

StarReLU(x)=s(ReLU(x))2+βStarReLU(x) = s \cdot (ReLU(x))^2 + \beta

总结

本篇论文认为 transformer 的宏观设计比 token mixer 更为重要,在将 token mixer 换成 pooling,identity,conv 等操作后,模型的表现依然良好。并且提出了一种新的激活函数 StarReLU,其消耗的 FLOPS 更少。

笔者在自己的数据集上尝试使用 metaformer,其参数量比 UNETR 少,且效果接近 UNETR。

参考文献

MetaFormer Is Actually What You Need for Vision

MetaFormer Baselines for Vision