拉格朗月

Synthesizer:transformer中的自注意力机制是否真的有必要?

2021-05-26

Synthesizer模型是谷歌针对Transformer中的self-attention的进一步思考。毋庸置疑,Transformer模型无论是在NLP领域还是在CV领域都取得了巨大的成功,它抛弃了CNN、RNN这类常用的特征抽取模块,采用了self-attention机制来进行特征抽取,取得了很好的效果。但是在这篇文章中,作者提出了质疑:自注意力机制是否是必要的?作者通过大量实验得到了两个结论:(1)一个随机的注意力矩阵可以得到和Transformer接近的结果;(2)通过token之间的交互学习注意力矩阵是有用的,但不是那么重要。

回顾self-attention

既然是对self-attention的进一步探索,那么有必要回顾一下Transformer中的self-attention。下图是论文《Attention is All You need》中多头注意力机制的图示。

Scaled Dot-Product Attention的计算方法公式为:

$$
Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V
$$

对于输入$X \in R^{n \times d}$,$Q,K,V$分别是经过不同的参数矩阵进行线性映射得到的,即$Q=W^Q X,K=W^K X, V=W^V X$。而对于多头注意力机制而言,则是将这个Attention多计算几次,然后将每个head的输出concat起来,从而得到多头注意力的输出。

Synthesizer模型

下图给出了Synthesizer模型与Transformer模型的差异比较,可以看到,Synthesizer相比于Transformer,其主要的不同之处在于Synthesizer没有通过token-token两两计算的方式获得Attention矩阵,而是用其他的结构或者方法来获得这个矩阵。

Dense Synthesizer

假设Synthesizer的一个bolck以$X \in R^{N \times d}$为输入,并且输出$Y \in R^{N \times d}$,其中$N$是token个数,$d$是特征维度。与Transformer一样,为了方便block的堆叠,输入和输出的维度是一样的。

首先用一个参数化的函数来获得注意力权重,该函数将输入的一个token从d维映射到了N维。这样把N个token并排,就可以得到一个$N \times N$的权重矩阵了。

$$B_i = F(X_i)$$

这里将原论文中不影响理解的标记$h,l$去掉了,原论文中$h$表示多头注意力的头,$l$表示层。这个公式是position-wise地应用于每个token,这意味着每个token将共享$F$的参数。作者采用了两层前向网络来表示函数$F$。

$$F = W_2(RELU(W_1(X_i)))$$

其中$W_1 \in R^{d \times d}$,$W_2 \in R^{d \times N}$。通过$F$后,可以得到$B \in R^{N \times N}$,这样$Y$的计算可以通过以下公式得到:

$$Y = softmax(B)G(X)$$

其中$G$是关于$X$的另一个参数化的函数,对应于标准Transformer中的V。这里提到的参数化函数F,也就是替换了标准Transformer中的dot-product attention的结构。

Random Synthesizer

在上面的Dense Synthesizer方法中,模型通过全连接层,针对每个token计算特征的重要度,将d维的特征映射到了N维,最后将每个token组合从而获得注意力权重矩阵。另一个更极端的想法是,直接随机初始化注意力权重矩阵,这样注意力权重矩阵和输入的token就没有直接的联系了。这也是Random的由来。

模型分解

在上面提到的两种模型中,Dense Synthesizer在网络中增加了$d \times N$个参数,而Random Synthesizer在网络中增加了$N \times N$个参数。为了进一步降低模型的参数,同时也为了防止模型的过拟合,作者提出了三种模型分解的方法。

Factorized Dense Synthesizer

对于Dense Synthesizer模型的分解可以用如下公式表示,依旧省略掉原论文中不影响理解的$h,l$下标:

$$
A_i,B_i = F_A(X_i), F_B(X_i)
$$

$F_A$将输入$X_i$,而$F_B$将输入$X_i$映射成b维向量,并且$a \times b=N$。s所以,$A_i \in R^a, B_i \in R^b$。又因为$F_A,F_B$都是position-wise地应用于每个token,所以得到的$A \in R^{N \times a},B \in R^{N \times b}$。原来的输出可以改写为:

$$
Y = softmax(C)G(X)
$$

$$
C = H_A(A) * H_B(B)
$$

这里的$C$就是注意力权重矩阵。函数$H_*$是简单的将一个向量重复k次,比如一个a维向量,重复k次后,变成一个$a \times k$维的向量。在这里,$H_A$将一个a维向量映射成一个$a \times b$维向量, 而$H_B$将一个b维的向量映射成一个$a \times b$维的向量。又因为$a \times b = N$的前提条件,所以可以得到$H_A(A) \in R^{N \times N}, H_B(B) \in R^{N \times N}$,最后将两者进行element-wise乘得到注意力权重矩阵。

Factorized Random Synthesizer

由于Random Synthesizer直接随机化了一个权重注意力矩阵,该矩阵是$R^{N \times N}$的。作者直接通过两个低秩矩阵$R_1, R_2 \in R^{N \times k}$来表示该注意力矩阵,从而达到减少参数量的目的。

$$
Y = softmax(R_1R_2^T)G(X)
$$

在这里参数两从$N^2$下降到了$2*Nk$,并且$k \ll N$。作者给的参考值$k=8$。

混合模式

混合模式可以以不同的权重将各种Synthesizer设计都结合起来。

$$
Y = softmax(\alpha_1 S_1(X) + \alpha_2 S_2(X) + \cdots + \alpha_n S_n(X))G(X)
$$

$\alpha$是可学习的参数,并且$\sum{\alpha_*} = 1$。

Synthesizer实验结果

实验方面,作者在机器翻译、自回归语言建模和GLUE/SuperGLUE上进行了实验。

机器翻译

在上图的机器翻译实验结果中,一个Random模式的Synthesizer竟然就可以达到和Transformer接近的结果,并且在EnFr任务中获得了比标准注意力机制更好的效果。如果采用Random模式和标准注意力机制的混合,则在Random模式上取得了更进一步的效果提升。

文本生成

文本生成和摘要方面,无论是Dense还是Random模式的Synthesizer,效果都差于标准的Transformer。而在对话生成方面,Dense模式的Synthesizer效果竟比Transformer还好。

CLUE/SuperCLUE

CLUE/SuperCLUE主要用于评估模型预训练+FineTune的效果。在这部分实验中,Random(R)和Dense(D)模式下的Synthesizer模型表现都没有太好,效果相比于T5有较大的差距。另一方面,如果将Random和标准Transformer进行混合,在大部分任务上都可以获得优于Transformer的效果。

最后

通过实验可以看到,Random和Dense模式的Synthesizer模型在不少任务中都可以取得不错的结果,有的任务甚至直接超越了标准Transformer的结果。那么,Transformer取得的成功,是因为self-attention的结构,还是因为其庞大的参数呢?另一方面,从CLUE/SuperCLUE实验结果可以看到,Synthesizer模型在迁移学习上的效果并不是很好,这也说明,通过两两token进行交互的self-attention的结构是有必要的,因为这种结构在迁移学习方面可以获得更好的结果。