导读:注意力机制在认知神经科学中有系统的介绍,所以在深度学习为代表的计算机系统中应用兴起之时就引起笔者的持续关注。笔者相信注意力建模思想及现有的建模方法一定可以在更广泛的领域中借鉴和应用,所以有必要系统学习和总结,如果你也认为如此,本文的内容对你是有帮助的,建议先订阅和收藏。
视觉注意力机制是人类视觉所特有的大脑信号处理机制。人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意力焦点,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无用信息。
这是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段,是人类在长期进化中形成的一种生存机制,人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性。
如下图1形象化展示了人类在看到一副图像时是如何高效分配有限的注意力资源的,其中红色区域表明视觉系统更关注的目标,很明显对于图1所示的场景,人们会把注意力更多投入到人的脸部,文本的标题以及文章首句等位置。
图1 人类视觉的注意力 (图片来自参考文献[1])
由关注输入信息的全部变为选择性关注一部分,作为一种资源分配方案,将有限的信息处理能力用在更重要的信息上,是解决信息超载问题的主要手段。注意力网络在人脑的所有脑叶及很多皮质结构中普遍存在。
认知神经科学中将注意力分为以下两种,这种机制处于一种动态竞争中,争夺着对注意焦点的控制:
近年来在深度学习中流行的注意力机制从本质上讲是人类的选择性视觉注意力机制的模仿与简化(人类注意力机制更加复杂),核心目标也是从众多信息中选择出对当前任务目标更关键的信息,已被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的任务中并且起到了非常显著的作用。
注意力模型/Attention Model(AM)首先是在机器翻译(原始论文:NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE,2015)中引入的,为了解决如下图所示的Encoder-Decoder框架中语义编码C长度固定可能成为Encoder-Decoder框架性能瓶颈的问题,在机器翻译任务中取得SOTA效果。当前已经成为神经网络中的一个重要概念。
图2 Encoder-Decoder基础框架 (图片来自参考文献[1],自己懒得画了)
注意力机制在AI领域的建模中迅速发展的原因主要有三个:第一,现在这些模型已经成为机器翻译、问答、情感分析、词性标注、选区解析和对话系统等多项任务的最新技术;第二,除了在主要任务上提高性能之外,它们还提供了其它一些优势,比如它们被广泛用于提高神经网络的可解释性(神经网络又被认为是黑箱模型),主要是因为人们对影响人类生活的应用程序中机器学习模型的公平性、问责制和透明度越来越感兴趣;第三,它们有助于克服递归神经网络(RNN)存在的一些问题:(1)对于比较长的句子,很难用一个定长的向量 c 完全表示其意义;(2)RNN 存在长序列梯度消失的问题,只使用最后一个神经元得到的向量 c 效果不理想;(3)与人类的注意力方式不同,即人类在阅读文章的时候,会把注意力放在当前的句子上。
Attention机制由ICLR2015的论文“NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE”提出用于法语-英语的机器翻译任务中作为对输入X的soft-research结构。
参考该论文附录2中关于模型的细节。
Encoder使用双向RNN(BiRNN),方便捕获句子中一个词对其前置词和后置词的依赖信息。
h j → \overrightarrow{h_j} hj表示前向RNN的隐藏层状态, h j ← \overleftarrow{h_j} hj表示反向RNN的隐藏层状态; h j h_j hj状态是将两者拼接起来,即 h j = [ h j → , h j ← ] h_j=[\overrightarrow{h_j},\overleftarrow{h_j}] hj=[hj,hj]
Decoder每一时刻i的输出由三个要素决定:时刻i的隐状态 s i s_i si,attention计算得到的context向量 c i c_i ci,上一时刻i−1的输出 y i − 1 y_{i−1} yi−1,即:
p ( y i ∣ y 1 , . . . , y i − 1 , X ) = y i = g ( y i − 1 , s i , c i ) \begin{align} p(y_i|y_1,...,y_{i−1},X)=y_i=g(y_{i−1},s_i,c_i) \end{align} p(yi∣y1,...,yi−1,X)=yi=g(yi−1,si,ci)
其中 s i s_i si由三个要素决定:时刻 i − 1 i-1 i−1的隐状态 s i − 1 s_{i-1} si−1,attention计算得到的context向量 c i c_i ci,上一时刻i−1输出 y i − 1 y_{i−1} yi−1
s i = f ( s i − 1 , y i − 1 , c i ) \begin{align} s_i=f(s_{i−1},y_{i−1},c_i) \end{align} si=f(si−1,yi−1,ci)
其中 c i c_i ci由以下公式得到
c i = ∑ j = 1 T x α i j h j , α i j = exp ( e i j ) ∑ k = 1 T x exp ( e i k ) , e i j = a ( s i − 1 , h j ) \begin{align} c_i&=\sum_{j=1}^{T_x} α_{ij} h_j,\\ α_{ij}&=\frac{\exp(e_{ij})}{\sum^{T_x}_{k=1} \exp(e_{ik})},\\ e_{ij}&=a(s_{i−1},h_j) \end{align} ciαijeij=j=1∑Txαijhj,=∑k=1Txexp(eik)exp(eij),=a(si−1,hj)
其中,
c i c_i ci是输入序列全部隐状态的 h 1 , h 2 , . . . , h T h_1,h_2,...,h_T h1,h2,...,hT的加权和。
α i j α_{ij} αij代表权重参数,它并不是一个固定权重,而是由非线性函数a计算得到,该论文中作者使用一个反馈神经网络结构代表a,a作为整个神经网络结构的一部分并参与训练。
把Attention机制从Encoder-Decoder框架中剥离,并进一步做抽象可以得到Attention机制更一般的结构,帮助我们看清Attention机制的本质。
我们将Source中的构成元素想象成是由一系列的
根据上述,可以将Attention一般结构写为如下三个公式:
e i j = a ( Q i , K j ) , α i j = exp ( e i j ) ∑ k = 1 T x exp ( e i k ) , A t t e n t i o n ( Q i , K , V ) = ∑ j = 1 T x α i j ∗ V j \begin{align} e_{ij}&=a(Q_i,K_j), \\ α_{ij}&=\frac{\exp(e_{ij})}{\sum^{T_x}_{k=1} \exp(e_{ik})},\\ Attention(Q_i, K, V) &= \sum_{j=1}^{T_x} α_{ij}*V_j \end{align} eijαijAttention(Qi,K,V)=a(Qi,Kj),=∑k=1Txexp(eik)exp(eij),=j=1∑Txαij∗Vj
其中,
Q i , K j , V j Q_i, K_j, V_j Qi,Kj,Vj均为向量;
Q i Q_i Qi为Target中第i个输出元素对应的Query值;
K为Source中所有元素的Key, K j K_j Kj为Source中第j个构成元素的Key值;
V为Source中所有元素的Value, V j V_j Vj为Source中第j个构成元素的 K j K_j Kj值对应的Value值;
T x T_x Tx为Source的长度;
α \alpha α为Q和某个 K j K_j Kj的相关性(或相似性)计算函数。
公式6-8也对应着Attention计算的三个阶段。
即公式6,根据Target中第i个输出元素对应的Query值 Q i Q_i Qi和某个 K j K_j Kj,计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量余弦相似性或者通过再引入额外的神经网络来求值,即如下方式:
即公式7,由于第一阶段产生的分值根据具体产生的方法不同其数值取值范围也不一样,第二阶段引入值缩放计算函数,比如常选用SoftMax的计算方式对第一阶段的得分进行数值转换,用途有二个:(1)可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布,加快神经网络训练的收敛速度;(2)SoftMax具有放大差异的作用,可以更加突出重要元素的权重。
第二阶段的计算结果 α i j α_{ij} αij 即为 V j V_j Vj对应的权重系数。
即公式8,这里需要注意的是,公式8计算的是Target中第i个输出元素对应的Query值 Q i Q_i Qi。Target是多个元素的序列,因此每一个Target输出元素都要计算一次公式8,产生出对应的注意力向量。
目前绝大多数具体的注意力机制计算方法都符合上述的三阶段抽象计算过程。
套用公式6-8可得知,在3.1节的机器翻译文论文中,Source的 K j K_j Kj和 V j V_j Vj值均为同一个向量,即输入句子中每个单词对应输出的隐变量 h j h_j hj。
围绕以上可改进点,目前已有较多论文提出了各种改进Attention模型。
由论文《Show, Attend and Tell: Neural Image Caption Generation withVisual Attention》,2015 提出。
Soft Atttention是参数化的,是可导的可嵌入到模型中直接训练,上述最早提出的Attention即是Soft Attention;Hard Attention是一个随机的过程,为了实现梯度的反向传播,需要采用蒙特卡洛采样的方法来估计模块的梯度,目前更多的研究和应用还是更倾向于使用Soft Attention,因为其可以直接求导,进行梯度反向传播。
由论文《Effective Approaches to Attention-based Neural Machine Translation》, 2015 提出。
左图是Global Attention,右图是Local Attention
Global Attention在计算上下文向量 c t c_t ct时考虑Encoder所有的隐层状态,Attention向量是通过比较当前目标隐藏状态 h t h_t ht和每个源隐藏状态 h s h_s hs得到。
h t h_t ht和 h s h_s hs之间的计算方式可以采用如下几种:
Local Attention的思想是对每个目标单词只选择一部分源单词进行预测上下文向量 c t c_t ct,具体来说,在时刻t 模型首先为每个目标单词生成一个对齐位置 p t p_t pt。上下文向量 c t c_t ct 通过窗口 [ p t − D , p t + D ] [p_t -D,p_t +D] [pt−D,pt+D]内的源隐藏状态集合加权平均计算得到,D 根据经验选择。与Global Attention不同,局部对齐向量 a t a_t at是固定维度的,即 a t ∈ R 2 D + 1 a_t∈ℝ^{2D+1} at∈R2D+1,比Global Attention的计算量更小。
由Transformer经典论文《Attention is all you need》,2017 提出。这里我们只简述Attention的设计,该论文提出的Transformer模型结构及其后续改进型已在CV、NLP等领域大放异彩,后续会单独开一篇博文进行全面地剖析和总结。
ScaledDot-Product Attention:通过Q,K矩阵计算矩阵V的权重系数。
Multi-Head Attention:多头注意力是将Q,K,V通过一个线性映射成h个Q,K,V,然后每个都计算Scaled Dot-Product Attention,最后再合起来,Multi-Head Attention目的还是对特征进行更全面的抽取。
Attention机制在深度学习的各种应用领域都有广泛的使用场景。
[1] 深度学习中的注意力机制, 张俊林, 2015.
[2] Neural Turing Machines, Google DeepMind, 2014.
[3] Attention is all you need, Google Brain&Research, 2017.
[4] https://cloud.tencent.com/developer/article/1480510#:~:text=Attentio,ttention