下文主要是结合自己的理解翻译自:Attention?Attention!
注意力(Attention)在近些年成为深度学习领域一个极其受欢迎的概念,同时作为一个强有力的工具也被集成到了各种模型中来处理相应的任务。下面将介绍注意力的起源、不同的注意力机制、各种使用注意力机制的模型,例如transformer、SNAIL。
从某种程度上看,注意力是人在处理过载信息的一种手段,具体表现为我们如何对图像的不同区域或一句话中的相关单词关注度会有所区别,通常对于感兴趣的部分往往会分配大量的注意力。
如上图所示,当看到一张的图像时,人们的视觉注意力会专注于图像中某些高分辨率的地方,如图中框中所示的部分,可能会关注狗尖尖的耳朵或是圆圆的鼻子,而不太关注背景中的雪地和树木。如果将图像中关于狗的重要特征部分挡住的话,我们就无法通过图中的毛衣、毯子、雪地等一些特征来判断出挡掉的部分是一个什么物体,进一步表现了人类注意力分配的合理性。
同样当我们看到一个句子时,往往是根据某个词它的上下文来理解它所想表达的意思。例如当看到 e a t i n g eating eating时,人会很自然的认为句子后面的部分必然会出现一个和食物相关的词,还可能在此之前存在一些对于食物进行修饰的部分词。
简而言之,注意力在深度学习中可以大致理解为对于某一个向量关注的程度如何,这个向量可能表示的是图像中的某一局部区域或是句子中的某个词,我们使用注意力向量来估计关注的部分和其他元素之间的关系强弱,并将不同部分的值的和用注意力向量加权得到的结果作为目标的近似值。
在大范围的使用注意力机制之前,Seq2Seq模型已经得到了广泛的应用。它最初用于语言建模型领域,简要来说,它的目标就是希望将一个输入序列转换为一个新的目标序列,并且输入序列和目标序列的长度可以是不固定的,Seq2Seq模型的应用领域有机器翻译、生成问答对话、句法分析等。
Seq2Seq模型主要是一种Encoder-Decoder的架构,它包括:
Encoder和Decoder是一个循环神经网咯模型,通常可选择LSTM、GRU做为基本单元。例如在下面机器翻译的例子中,我们将She is eating a green apple输入到Encoder中,希望Decoder输出她在吃一个绿苹果。通常我们关注的并不是某一次具体的翻译任务,而是希望中间的Context vector可以学到关于输入的重要信息的表示。
注意力机制最初主要是用来帮助机器翻译的神经网络模型来记忆长句子的信息,它和从Encoder的最后一个隐状态构建单个的上下文向量方法不同,Attention会对整个输入和上下文向量计算注意分数,而且不同的输出元素的注意分数是不同的。虽然上下文向量可以访问整个输入序列,但我们也不必担心会遗忘信息。源序列和得到的目标序列之间的对齐(alignment)由上下文向量来学习和控制。从本质上来说,上下文向量主要处理以下的三条消息:
source:https://arxiv.org/pdf/1409.0473.pdf
假设我们的输入为长度为 n n n的序列数据 x x x,目标是输出长度为 m m m的序列数据 y y y。
x = [ x 1 , x 2 , … , x n ] y = [ y 1 , y 2 , … , y m ] % <![CDATA[ \begin{aligned} \mathbf{x} &= [x_1, x_2, \dots, x_n] \\ \mathbf{y} &= [y_1, y_2, \dots, y_m] \end{aligned} %]]> xy=[x1,x2,…,xn]=[y1,y2,…,ym]
encoder这里是一个双向的RNN,当然你也可以根据自己的需要选择不同的RNN,每个时刻都有前向隐藏状态 h → i \overrightarrow{\boldsymbol{h}}_i hi和后向隐藏状态 h ← i \overleftarrow{\boldsymbol{h}}_i hi两个状态,将它们简单的连接(concatenation)形式做为encoder的某时刻的具体状态。例如当我们处理一个句子时,这样的方式可以确保可以通过某个词前后的词来理解它。
h i = [ h → i ⊤ ; h ← i ⊤ ] ⊤ , i = 1 , … , n \boldsymbol{h}_i = [\overrightarrow{\boldsymbol{h}}_i^\top; \overleftarrow{\boldsymbol{h}}_i^\top]^\top, i=1,\dots,n hi=[hi⊤;hi⊤]⊤,i=1,…,n
decoder在输入 t t t位置的词时的隐状态为 s t = f ( s t − 1 , y t − 1 , c t ) , t = 1 , . . . , m \boldsymbol{s}_t=f(\boldsymbol{s}_{t-1}, y_{t-1}, \mathbf{c}_t),t=1,...,m st=f(st−1,yt−1,ct),t=1,...,m,其中上下文向量 c t c_{t} ct是输入序列对应隐状态的总和,按照对齐分数(alignment scores)加权,计算公式如下所示:
c t = ∑ i = 1 n α t , i h i ; Context vector for output y t α t , i = align ( y t , x i ) ; How well two words y t and x i are aligned. = exp ( score ( s t − 1 , h i ) ) ∑ i ′ = 1 n exp ( score ( s t − 1 , h i ′ ) ) ; Softmax of some predefined alignment score. . % <![CDATA[ \begin{aligned} \mathbf{c}_t &= \sum_{i=1}^n \alpha_{t,i} \boldsymbol{h}_i & \small{\text{; Context vector for output }y_t}\\ \alpha_{t,i} &= \text{align}(y_t, x_i) & \small{\text{; How well two words }y_t\text{ and }x_i\text{ are aligned.}}\\ &= \frac{\exp(\text{score}(\boldsymbol{s}_{t-1}, \boldsymbol{h}_i))}{\sum_{i'=1}^n \exp(\text{score}(\boldsymbol{s}_{t-1}, \boldsymbol{h}_{i'}))} & \small{\text{; Softmax of some predefined alignment score.}}. \end{aligned} %]]> ctαt,i=i=1∑nαt,ihi=align(yt,xi)=∑i′=1nexp(score(st−1,hi′))exp(score(st−1,hi)); Context vector for output yt; How well two words yt and xi are aligned.; Softmax of some predefined alignment score..
其中 α t , i \alpha_{t,i} αt,i的值取决于输入序列中 i i i位置的元素和输出 t t t位置元素的配对数据, ( y t , x i ) (y_{t},x_{i}) (yt,xi)取决于它们的匹配程度。 α t , i \alpha_{t,i} αt,i中的权重值定义了输入中的每个元素对于源输入的每个隐状态的关注程度。在Bahdanau的论文中得分α由只有一个隐藏层的参数化的前馈网络得到,而且前馈网络与模型的其他部分一起训练。score的计算公式如下所示:
score ( s t , h i ) = v a ⊤ tanh ( W a [ s t ; h i ] ) \text{score}(\boldsymbol{s}_t, \boldsymbol{h}_i) = \mathbf{v}_a^\top \tanh(\mathbf{W}_a[\boldsymbol{s}_t; \boldsymbol{h}_i]) score(st,hi)=va⊤tanh(Wa[st;hi])
其中 v a v_{a} va和 W a W_{a} Wa是需要模型学习的权重矩阵。对齐分数矩阵可以显式地显示源词和目标词之间的相关性。
在注意力机制的的帮助下,源序列和目标序列之间的依赖关系不再受中间距离的限制!由于注意力机制大幅的提升了机器翻译模型的效果,它很快就扩展到了计算机视觉领域,人们开始探索各种其他形式的注意力机制。下面是几种常见的注意力机制和相应的对齐评分功能的汇总表:
下面是对注意力机制更概括性的介绍
自我注意力(Self-attention),也被称为intra-attention,是一种将单个序列的不同位置联系起来的注意力机制,它用来计算相同序列的表示,在机器阅读、摘要生成和图像描述生成领域取得了很好的效果。
例如在《Long Short-Term Memory-Networks for Machine Reading》中就是用Self-attention做机器阅读的。在下面的例子中,Self-attention使我们能够学习到当前单词和句子中前一部分之间的相关性。
如上所示,红色标注的词为当前单词,蓝色阴影的大小表示当前词对于它的关注程度。
另外self-attention也被应用到图像中,生成合适的描述。首先用卷积神经网络对图像进行编码,然后用一个自我注意力的递归网络利用卷积特征图逐帧生成描述词。如下所示,注意权重的可视化清晰地显示出模型对图像不同区域的观察情况,最后输出对应的单词。
Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
如果基于注意力是可以访问整个图像还是只能访问一个patch,我们可以将注意力机制分为软注意力和硬注意力
《Effective Approaches to Attention-based Neural Machine Translation》提出了局部注意力和全局注意力的概念。全局注意力类似于软注意力,而局部注意力可以看作是软注意力和硬注意力的一种混合形式,尝试解决硬注意力中模型不可微的不足。该模型首先预测一个与当前目标单词对齐的位置,以及一个以源位置为中心的窗口,然后用它们来计算上下文向量。
这部分内容我并不是很有兴趣,有兴趣的可见源博文。
《Attention is all you need》是2017年最有影响力和最有趣的论文之一。它对Soft Attention进行了大量的改进,使得在不需要循环神经网络单元的情况下进行Seq2Seq建模成为可能。文章中提出的transformer模型完全建立在Self-Attention机制的基础上,没有使用顺序对齐的循环网络架构。
Transformer的主要使用了多头注意力机制(Multi-head Self-attention)。Transformer将输入的编码表示看作一组键值对 ( K , V ) (K,V) (K,V),它们的维度大小都为 n n n(输入序列长度),key和value都是编码器的隐状态。在decoder中,前一个输出被压缩为一个维度大小为 m m m的query ( Q ) (Q) (Q),下一个输出通过映射该query 和一组键值对生成。
Transformer采用一种scaled dot-product attention的方式进行注意力分数的计算,输出为value的加权和,每个value的权重由query和所有key的点积确定,计算公式如下所示:
Attention ( Q , K , V ) = softmax ( Q K ⊤ n ) V \text{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax}(\frac{\mathbf{Q}\mathbf{K}^\top}{\sqrt{n}})\mathbf{V} Attention(Q,K,V)=softmax(nQK⊤)V
Transformer中的多头注意力层
多头注意力机制不是只计算一次注意力分数,而是并行地多次执行按比例缩放的dot-product注意力。每个独立的注意力计算输出被简单地连接起来,并线性地转换成预期的维度。在原始paper中,作者认为:“多头注意力使得模型能够在不同的位置共同关注来自不同表示子空间的信息,如果只有一个注意力头,平均就会抑制这种情况。”
multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions. With a single attention head, averaging inhibits this.
多头注意力机制的计算公式如下所示:
MultiHead ( Q , K , V ) = [ head 1 ; …   ; head h ] W O where head i = Attention ( Q W i Q , K W i K , V W i V ) % <![CDATA[ \begin{aligned} \text{MultiHead}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) &= [\text{head}_1; \dots; \text{head}_h]\mathbf{W}^O \\ \text{where head}_i &= \text{Attention}(\mathbf{Q}\mathbf{W}^Q_i, \mathbf{K}\mathbf{W}^K_i, \mathbf{V}\mathbf{W}^V_i) \end{aligned} %]]> MultiHead(Q,K,V)where headi=[head1;…;headh]WO=Attention(QWiQ,KWiK,VWiV)
其中的 W i Q W_{i}^{Q} WiQ、 W i K W_{i}^{K} WiK、 W i V W_{i}^{V} WiV和 W O W^{O} WO都是需要学习的参数矩阵
Encoder架构图
encoder部分用于生成基于注意力的表示,它能够从潜在的无穷大的上下文中定位特定的信息片段
Decoder架构图
Decoder能够从经过Encoder编码的表示中检索。
下图为是Transformer的完整结构图:
Transformer的一个实例:https://github.com/lilianweng/transformer-tensorflow
在Transformer提出后出现了很多基于它的模型,如BERT、SNAIL、GPT……,将Transformer中的Self-attention和GAN结合起来就提出了Self-Attention GAN,下图是SNAIL的示意图
[1] “Attention and Memory in Deep Learning and NLP.” - Jan 3, 2016 by Denny Britz
[2] “Neural Machine Translation (seq2seq) Tutorial”
[3] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. “Neural machine translation by jointly learning to align and translate.” ICLR 2015.
[4] Kelvin Xu, Jimmy Ba, Ryan Kiros, Kyunghyun Cho, Aaron Courville, Ruslan Salakhudinov, Rich Zemel, and Yoshua Bengio. “Show, attend and tell: Neural image caption generation with visual attention.” ICML, 2015.
[5] Ilya Sutskever, Oriol Vinyals, and Quoc V. Le. “Sequence to sequence learning with neural networks.” NIPS 2014.
[6] Thang Luong, Hieu Pham, Christopher D. Manning. “Effective Approaches to Attention-based Neural Machine Translation.” EMNLP 2015.
[7] Denny Britz, Anna Goldie, Thang Luong, and Quoc Le. “Massive exploration of neural machine translation architectures.” ACL 2017.
[8] Ashish Vaswani, et al. “Attention is all you need.” NIPS 2017.
[9] Jianpeng Cheng, Li Dong, and Mirella Lapata. “Long short-term memory-networks for machine reading.” EMNLP 2016.
[10] Xiaolong Wang, et al. “Non-local Neural Networks.” CVPR 2018
[11] Han Zhang, Ian Goodfellow, Dimitris Metaxas, and Augustus Odena. “Self-Attention Generative Adversarial Networks.” arXiv preprint arXiv:1805.08318 (2018).
[12] Nikhil Mishra, Mostafa Rohaninejad, Xi Chen, and Pieter Abbeel. “A simple neural attentive meta-learner.” ICLR 2018.
[13] “WaveNet: A Generative Model for Raw Audio” - Sep 8, 2016 by DeepMind.
[14] Oriol Vinyals, Meire Fortunato, and Navdeep Jaitly. “Pointer networks.” NIPS 2015.
[15] Alex Graves, Greg Wayne, and Ivo Danihelka. “Neural turing machines.” arXiv preprint arXiv:1410.5401 (2014).
P.S.关于BERT等模型后面看了再总结吧~