self-attention原理和改进方向

1. self-attention原理介绍

self-attention的概念起源自seq2seq机器翻译模型中的attention,基本思想都是计算不同部分的权重后进行加权求和,最后的效果是对attend的不同部分予以不同程度的关注,不同是seq2seq的attention是将decoder的一个状态去对比encoder的所有状态,而self-attention可以在encoder和decoder中均可使用,其计算的是同一集合内元素的相互关联。Sequence to Sequence (seq2seq) and Attention很好对二者都有非常好的介绍。

关于self-attention的介绍这里就不详细展开了,重点部分:
self-attention原理和改进方向_第1张图片
可以看到self-attention的基本计算基本都是矩阵计算,其最大的优点是不包含任何RNN、CNN结构,可以解决序列的长程依赖问题,同时矩阵计算可以因为并行化而非常快速。
其缺点也很明显:
1、由于没有任何部分处理序列信息,因此需要额外的positional encoding模块;
2、attention矩阵维度与输入序列长度 t t t O ( t 2 ) O(t^2) O(t2)关系,如果序列较长非常消耗内存,目前的transformer最多能处理512长度的序列;
3、虽然可以对长程依赖有效处理,但是对短程的上下文信息反而处理的不好,这会引出后续很多改进工作

推荐几篇非常好的介绍:

形象化解释:The Illustrated Transformer
哈佛代码介绍:The Annotated Transformer
论文解读:Attention Is All You Need - The Transformer
positional encoding解释:Transformer architecture: positional encoding

看到知乎上一个有意思的讨论:self-attention和全连接有什么区别?
全连接:可以看做特征映射,其权重表示的是特征的重要度
self-attention:并不是一种映射,其权重表示的是序列每个实体的重要度

2. self-attention改进方向

1)增强局部上下文信息

Modeling Localness for Self-Attention Networks

self-attention原理和改进方向_第2张图片

构建局部上下文信息:当“Bush”对齐到“held”时,我们希望自注意力模型能同时将更多注意力放到其邻近的词“a talk”上。这样,模型能捕获短语“held a talk”。本文将局部上下文建模设计为一种可学习的高斯偏差矩阵 G G G,其中心位置和宽度可以被学习,最终该偏差矩阵与原attention矩阵相加得到修正attention矩阵: A t t ^ = s o f t m a x ( A t t + G ) \hat{Att}=softmax(Att+G) Att^=softmax(Att+G)

Convolutional Self-Attention Networks

self-attention原理和改进方向_第3张图片

本文将局部上下文的拟合构建为类卷积形式的计算,其中1D卷积将原序列长度的attention限制在一个1D卷积核内,而2D卷积则是扩展了head维度后将attention限制在一个2D卷积核内,这种方法可以不增加模型参数

可以参考腾讯AI LAB论文解析

2)降低与序列长度的平方依赖处理更长序列

Longformer: The Long-Document Transformer

self-attention原理和改进方向_第4张图片

1、使用固定窗口的稀疏卷积,堆叠多层同样可以达到全注意力的感受野。同时,增加空洞可以扩大感受野
2、在不同的head中使用不同的窗口和空洞可以让不同的head学习不同大小的局部信息。在底层使用小窗口,而在顶层使用大窗口
3、在特定的token上使用全注意力,这些token可以根据不同任务选择出来的

Linformer: Self-Attention with Linear Complexity

1、论文核心贡献是发现self attention矩阵 P P P是低秩矩阵,从而可以通过SVD构建另一个维度小的低秩矩阵 P ˉ \bar{P} Pˉ来近似,这个构建的矩阵仅选取前 k k k大的奇异值对应的奇异向量
2、对矩阵进行SVD仍然是耗时操作,因此可以进一步对 K K K V V V引入两个线性变换 E , F : k × T E,F:k\times T E,F:k×T来计算逼近 P ˉ \bar{P} Pˉ
A t t e n t i o n ( Q W Q , E K W K , F V W V ) = s o f t m a x ( Q W Q ( E K W K ) T d ) ⏟ P ˉ : T × k ⋅ F V W V ⏟ k × d Attention(QW_Q, EKW_K,FVW_V) = \underbrace{softmax(\frac{QW_Q(EKW_K)^T}{\sqrt{d}})}_{\bar{P}:T\times k}\cdot \underbrace{FVW_V}_{k\times d} Attention(QWQ,EKWK,FVWV)=Pˉ:T×k softmax(d QWQ(EKWK)T)k×d FVWV
这里时间和空间复杂度都变成了线性 O ( T k ) O(Tk) O(Tk),如果选择 k ≪ T k\ll T kT的话,时间和空间要求就会非常低
3、一些关于 E , F E,F E,F的空间映射技巧可以使用,比如在head里、layer间共享权重,或者在不同的head、layer使用不同的 k k k,甚至可以将简单的线性映射替换为pooling、conv等操作

Rethinking Attention with Performers(Masked Language Modeling for Proteins via Linearly Scalable Long-Context Transformers)

由于self attention矩阵的维度是 O ( t 2 ) O(t^2) O(t2)的,因此如果不显式的计算就可以避免这个限制。这个想法很大胆但是实现起来确实不容易。文章通过正交随机投影和核方法将原最终输出的计算(1)变换为(2)
Y = D − 1 A V , A = e x p ( Q K T d ) , D = d i a g ( A 1 t ) ( 1 ) Y = D ^ − 1 ( Q ′ ( ( K ′ ) T V ) ) , D ^ = d i a g ( Q ′ ( ( K ′ ) T 1 t ) ) , Q ′ = D Q ϕ ( Q T ) T , K ′ = D K ϕ ( K T ) T ( 2 ) Y=D^{-1}AV, \quad A=exp(\frac{QK^T}{\sqrt{d}}),D=diag(A\bold{1}_t) \qquad(1)\\ Y=\hat{D}^{-1}(Q'((K')^TV)), \quad \hat{D}=diag(Q'((K')^T \bold{1}_t)), Q'=D_Q\phi(Q^T)^T,K'=D_K\phi(K^T)^T \qquad(2) Y=D1AV,A=exp(d QKT),D=diag(A1t)(1)Y=D^1(Q((K)TV)),D^=diag(Q((K)T1t)),Q=DQϕ(QT)T,K=DKϕ(KT)T(2)
其中 D Q = g ( Q i T ) , D K = g ( K i T ) D_Q=g(Q_i^T),D_K=g(K_i^T) DQ=g(QiT),DK=g(KiT)分别是将行向量映射为标量的函数, ϕ ( X ) \phi(X) ϕ(X)通常为正交随机映射,是核函数的一部分。由于 ( K ′ ) T V ∈ R d × d (K')^TV\in \R^{d\times d} (K)TVRd×d,其中 d d d为特征维度常量,因此整体计算的复杂度为 O ( t d 2 ) = O ( t ) O(td^2)=O(t) O(td2)=O(t)。关于这篇论文的证明部分,可以参考Performer:用随机投影将Attention的复杂度线性化

最近google的一篇论文对此总结Efficient Transformers: A Survey
相关论文参考github论文集

3)attention的kernel化

Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention

将原始的Scaled-Dot Attention ( 1 ) (1) (1)输出结果的每一个row改写为 ( 2 ) (2) (2)
Y = A t t e n t i o n ( Q , K ) V = s o f t m a x ( Q K T d ) V ( 1 ) Y i = A t t e n t i o n ( Q i , K ) V = ∑ j = 1 T e x p ( Q i ⋅ K j d ) V j ∑ j = 1 T e x p ( Q i ⋅ K j d ) = ∑ j = 1 T s i m ( Q i , K j ) V j ∑ j = 1 T s i m ( Q i , K j ) ( 2 ) Y = Attention(Q,K)V = softmax(\frac{QK^T}{\sqrt{d}})\boldsymbol{V}\qquad(1)\\ Y_i = Attention(Q_i,K)V = \frac{\sum_{j=1}^{T}exp(\frac{Q_i\cdot K_j}{\sqrt{d}})V_j}{\sum_{j=1}^{T}exp(\frac{Q_i\cdot K_j}{\sqrt{d}})} = \frac{\sum_{j=1}^{T}sim(Q_i,K_j)V_j}{\sum_{j=1}^{T}sim(Q_i,K_j)}\qquad(2) Y=Attention(Q,K)V=softmax(d QKT)V(1)Yi=Attention(Qi,K)V=j=1Texp(d QiKj)j=1Texp(d QiKj)Vj=j=1Tsim(Qi,Kj)j=1Tsim(Qi,Kj)Vj(2)
只要定义相似度函数(核函数) s i m ( Q i , K j ) ≥ 0 sim(Q_i,K_j) \ge 0 sim(Qi,Kj)0就可以定义各种类型的attention,原始的attention可以看做指数型,当然还可以有线性、多项式或RBF型的。论文为了实现线性化,将相似度函数通过特征映射函数表示为 s i m ( Q i , K j ) = ϕ ( Q i ) ⋅ ϕ ( K j ) sim(Q_i,K_j)=\phi(Q_i)\cdot\phi(K_j) sim(Qi,Kj)=ϕ(Qi)ϕ(Kj),通过乘法的交换律实现了 ( ϕ ( Q ) ϕ ( K ) T ) V = ϕ ( Q ) ( ϕ ( K ) T V ) \left(\phi(Q)\phi(K)^T\right)V=\phi(Q)\left(\phi(K)^TV\right) (ϕ(Q)ϕ(K)T)V=ϕ(Q)(ϕ(K)TV),其中选取 ϕ ( x ) = e l u ( x ) + 1 \phi(x)=elu(x) + 1 ϕ(x)=elu(x)+1
关于这篇论文还可以参考线性Attention的探索:Attention必须有个Softmax吗?

Transformer dissection: An unified understanding for transformer’s attention via the lens of kernel

这篇论文从核函数的角度统一了多篇论文的改进,并把位置编码也融合进了核函数中。具体来说,原始Scaled-Dot Attention的分子部分可以表示成 k e x p ( f q + t q , f k + t k ) k_{exp}(f_q+t_q, f_k+t_k) kexp(fq+tq,fk+tk),这里 f ⋅ f_\cdot f表示输入的embedding, t ⋅ t_\cdot t表示绝对位置编码,这表示位置编码是直接加入embedding后再计算 k e x p k_{exp} kexp的,而这篇论文提出一种将位置编码独立计算kernel的计算方式:
k F ( f q , f k ) ⋅ k T ( t q , t k ) , w h e r e k F ( f q , f k ) = e x p ( f q W F ( f k W F ) T d ) , k T ( t q , t k ) = e x p ( t q W T ( t k W T ) T d ) k_{F}(f_q, f_k)\cdot k_{T}(t_q, t_k),\\where\quad k_{F}(f_q, f_k)=exp(\frac{f_qW_F(f_kW_F)^T}{\sqrt{d}}), k_{T}(t_q, t_k)=exp(\frac{t_qW_T(t_kW_T)^T}{\sqrt{d}}) kF(fq,fk)kT(tq,tk)wherekF(fq,fk)=exp(d fqWF(fkWF)T),kT(tq,tk)=exp(d tqWT(tkWT)T)
这里位置编码仍然是sin/cos表示的绝对位置,而共享 Q , K Q,K Q,K的映射矩阵,这样使得attention矩阵最终是半正定的同时减少了参数(但据我实验效果会下降)。最后,论文表示只在 Q , K Q,K Q,K中使用位置编码, V V V不使用任何形式的位置编码效果都会好一些

4)模型压缩

相关模型有DistillBert、ALBERT等

3. self-attention在其他领域尝试

既然self-attention是序列模型,那么RNN/CNN所能够发挥的领域都有它的一席之地,甚至有替代传统模型的趋势,我们可以看看近期优秀的self-attention跨界表现

1)图像视觉领域

Vision Transformer

self-attention序列数据分析:attention-for-time-series-classification-and-forecasting

你可能感兴趣的:(深度学习,self-attention,论文,transformer)