【论文笔记】QANet模型

原始论文:QANet: Combining Local Convolution With Global Self-Attention For Reading Comprehension[CMU & Google]

// 待补充。


1. Abstract

  目前的端到端机器阅读和问答模型主要基于包含注意力的循环神经网络,主要缺点:在训练和推理方面效率较低。
  我们提出了一种名为QANet的问答架构,它的编码器仅由卷积和自注意力(self-attention)组成,其中,卷积对局部交互和自注意力模型的全局交互进行建模。
  效果:在SQuAD数据集中,我们模型的训练速度提高了3至13倍,推理速度提高了4至9倍,同时达到了与循环模型相媲美精确度。加速增益(speed-up gain)使我们能够用更多的数据来训练模型。因此,我们将我们的模型,与由神经机器翻译模型的反向翻译生成的数据结合起来。在SQuAD数据集上,我们使用增强数据训练的单一模型在测试集中F1值达到 84.6,这显著优于过去公布的F1最佳值81.8。

2. Introduction

  在过去几年中最成功的模型通常采用了两项关键要技术:(1)处理顺序输入的循环模型(2)应对长期交互的注意力要素。Seo等人于2016年提出的的双向注意力流(Bidirectional Attention Flow,BiDAF)模型将这两项要素成功地结合在了一起,该模型在SQuAD数据集上取得了显著的效果。这些模型的一个缺点是,它们的循环特性使得它们在训练和推理方面的效率通常较低,特别是对于长文本而言。昂贵的训练不仅会导致实验的周期延长,限制研究人员进行快速迭代,还会使模型难以被用于更大的数据集中。与此同时,缓慢的推理速度阻碍了机器理解系统在实时应用中的部署。
  在本文中,为了使机器理解更高效,我们提出去掉这些模型的循环性质,仅将卷积和自注意力作为编码器的构成模块,分别对问题和语境进行编码。然后,我们通过标准注意力(standard attentions,Xiong等人于2016年提出;Seo 等人于2016年提出;Bahdanau等人于2015年提出)来学习语境和问题之间的交互。在最终对每个作为答案范围的开始或结束位置的概率进行解码之前,用我们的无循环编码器再次对结果表征进行编码。我们将该架构称为QANet。
  模型设计的主要思想:卷积捕获文本的局部结构,而自注意力则学习每对单词之间的全局交互。附加语境疑问注意力(the additional context-query attention)是一个标准模块,用于为语境段落中的每个位置构造查询感知的语境向量(query-aware context vector),这在随后的建模层中得到使用。我们的架构的前馈特性极大地提高了模型的效率。在基于SQuAD数据集的实验中,我们模型的训练速度提高了3至13倍,推理速度提高了4至9倍。作一个简单的比较,我们的模型可以在3个小时的训练中达到与BiDAF模型(Seo等人于2016年提出)相同的精确度(F1值为77.0),在此之前,这一过程需花费15个小时的时间。加速增益还允许我们使用更多的迭代来训练模型,以获得比竞争模型更好的结果。例如,如果我们允许我们的模型进行18个小时的训练,它在开发集(dev set)上的F1值达到了82.7,这比Seo等人于 2016年提出的模型,表现得要好很多,并且与已发布过的最佳结果相媲美。


3. Model

模型由五层结构组成:

  • input embedding layer
  • embedding encoder layer
  • context-query attention layer
  • model encoder layer
  • output layer
    QANet结构
    图1 QANet模型

3.1 Input embedding layer

  word embedding+character embedding,word embedding从预先训练好的词向量中读取,每个词向量维度为 p1 p 1 ,假设词 w w 对应的词向量为xw
  character embedding随机初始化,维度为 p2 p 2 ,将每个词的长度padding or truncating到 k k ,则词w也可以表示成一个 p2k p 2 ∗ k 的矩阵,经过卷积和max-pooling后得到一个 p2 p 2 维的character-level的词向量,记为 xc x c
  将 xw x w ​ xc x c ​ 拼接,得到词 w w 对应词向量[xw;xc]Rp1+p2,最后将拼接的词向量通过一个两层的highway network,其输出即为embedding层的输出。训练过程中,word embedding固定,character embedding随模型一起训练。
  这里简单介绍一下highway network,它主要用于解决深层网络难以训练的问题。普通的单一网络层可以表示为:

y=H(x,WH) y = H ( x , W H )
其中 H H 为非线性变换函数,x为输入, WH W H 为网络层权重。
highway network定义如下:
y=H(x,WH)T(x,WT)+xC(x,WC) y = H ( x , W H ) ∗ T ( x , W T ) + x ∗ C ( x , W C )
其中 T T 称为transform gateC称为 carry gate。直观上来看就是网络层输出一部分来源于非线性变换 H H 的输出,另一部分则直接来源于网络层输入x。一般情况下我们直接令 C=1T C = 1 − T ,即:
y=H(x,WH)T(x,WT)+x(1T(x,WT)) y = H ( x , W H ) ∗ T ( x , W T ) + x ∗ ( 1 − T ( x , W T ) )
此时显然有:
y={xH(x,WH)if T(x, WT)=0if T(x, WT)=1 y = { x if T(x,  W T )=0 H ( x , W H ) if T(x,  W T )=1

3.2 Embedding Encoder Layer

  由encoder block组成(这部分只用到了1个encoder block),单个encoder block结构自底向上依次包含位置编码(position encoding),卷积(conv)层,self attention层和前馈网络(fnn)层,具体参考图1右侧one encoder block。每个基本操作(conv/self-attention/ffn)都放在残差块(residual block)里,具体各层参数参考原论文。原论文对这里卷积层和self-attention层的作用解释是:卷积能够捕获上下文局部结构,而self-attention则可以捕捉文本之间全局的相互作用。
  下面介绍一下各层用到的一些来源于其他论文的概念。
position encoding
  直接通过公式计算位置向量,见Google的Attention is All You Need相关部分。

depthwise separable convolutions
  相比普通卷积它所需的参数更少,泛化能力更强。它的核心思想是将一个完整的卷积运算分解为 depthwise convolution 和 pointwise convolution 两个步骤。
  首先是depthwise convolution,以图2为例,假设输入是64*64的3通道图片,使用3*3*1大小的卷积核,filter 数量等于上一层的depth,对输入的每个 channel 独立进行卷积运算,得到与上层depth相同个数的feature map。对应到图里即3个filter分别对3个channel进行卷积,得到3个feature map。
depthwise convolution

图2 depthwise convolution

  然后是pointwise convolution,和常规卷积运算类似,卷积核的尺寸为 1×1×M,M等于上一层的depth。它会将上一步的feature map在深度方向上进行加权组合,生成新的feature map,有几个filter就有几个feature map。如图3所示,输入depth为3,卷积核大小为1*1*3,使用4个filter,最终生成4个feature map。
pointwise convolution
图3 pointwise convolution

  动画见 https://www.slideshare.net/DongWonShin4/depthwise-separable-convolution

self-attention
  先简单介绍下Attention机制。Attention机制的基本原理如图4所示,对于给定的Query,计算Query和各个Key之间的相似度(常用的相似度函数有点积,拼接,感知机等),得到每个Key对应的Value的权重,用softmax函数对权重进行归一化,最后将权重和对应的Value进行加权求和得到Attention数值。用公式表示就是:

Attention(Q,K,V)=softmax(Similarity(Q,K))V A t t e n t i o n ( Q , K , V ) = s o f t m a x ( S i m i l a r i t y ( Q , K ) ) ∗ V
  对应到NLP任务里,可以将句子中的每一个单词看作一个(Key, Value)对,则原句子可表示为一系列(Key,Value)对。分别计算 Query和每一个Key的相似性,得到每个Key对应的Value的权重,再对Value进行加权求和,得到Attention值。
Attention机制

图4 Attention机制

  目前在NLP任务中,Key和Value一般都是同一个,即 Key=Value。而self-attention则更进一步,令Q=K=V,使得对于输入的句子,它的任意两个单词之间都要计算Attention,所以两个单词之间无论有多长距离,最大的路径长度也都只是1,因此self-attention可以有效捕获长距离依赖关系,如图5(来源于原论文附录部分)所示。另外self-attention不像RNN一样依赖于前一时刻的状态,因此它有利于并行计算。
可视化self-attention
图5 可视化self-attention

multi-head attention
  将Q、K、V通过参数矩阵映射为多个不同的Q、K、V并分别计算Attention,最后将结果拼接到一起,这里借用Attention is All You Need里的表示方法:

headi=Attention(QWiQ,KWiK,VWiV)MultiHead(Q,K,V)=Concat(head1,...,headh) h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d h )
  其中 WiQRdmodeldk W i Q ∈ R d m o d e l ∗ d k WiKRdmodeldk W i K ∈ R d m o d e l ∗ d k WiVRdmodeldv W i V ∈ R d m o d e l ∗ d v ,表示将 dmodel d m o d e l 维的Q、K、V分别映射到 dk d k dk d k dv d v 维。
  通过降维可以使h个Attention的计算量总和与原来1个Attenion计算量相当,但h个Attention可以并行,因此大大加快了计算速度。至于mutil-head attention的作用,论文原话是

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.

residual block
  出自微软的Deep Residual Learning for Image Recognition,主要用于缓解深层神经网络梯度消失/爆炸问题和degradation现象(具体见原论文)。
  residual block结构如图6。假定神经网络层的输入是 x x ,期望输出是H(x),显然 H(x) H ( x ) 学习难度是较大的。但如果我们直接把输入 x x 传到输出作为初始结果,那么此时我们需要学习的目标就变成了F(x)=H(x)x,相当于将优化目标从完整输出替换为为最优解 H(x) H ( x ) 和全等映射 x x 的差值,有效降低了学习难度。
residual block结构

图6 residual block结构

  另外在本论文中,由于encoder block中每层之间还用到了layer normalization,因此对于一个给定的输入x和一个操作 f f ,其输出为f(layernorm(x))+x

layer normalization
  参考详解深度学习中的Normalization,不只是BN.

3.3 Context-Query Attention Layer

  根据上一层得到的context和query的encoder表示来计算context-to-query attention和query-to-context attention矩阵。分别用 C C Q来表示编码后的context和query, CRdn C ∈ R d ∗ n QRdm Q ∈ R d ∗ m
1. 首先计算context和query单词之间的相似度,结果矩阵记为 S S SRn×m。其中相似度计算公式为: f(q,c)=W0[q,c,qc] f ( q , c ) = W 0 [ q , c , q ⊙ c ] q q c分别为单个单词的中间表示, W0 W 0 是一个可训练的参数。
2. 用softmax对 S S 的行、列分别做归一化得到S¯ S¯¯ S ¯ ¯ ,则 context-to-query attention矩阵 A=S¯QTRnd A = S ¯ · Q T ∈ R n ∗ d ,query-to-context attention矩阵 B=S¯S¯¯TCTRnd B = S ¯ · S ¯ ¯ T · C T ∈ R n ∗ d (参考DCN模型)。

3.4 Model Encoder Layer

  由3个model encoder block组成,每个model encoder block由7个encoder block(见3.2节)堆叠而成,3个model encoder block之间共享参数。与BIDAF类似,每个位置的输入是 [c,a,ca,cb] [ c , a , c ⊙ a , c ⊙ b ] a a b分别为attention矩阵 A A B的行, c c 是context对应位置的单词中间表示。

3.5 Output layer

  分别预测每个位置是answer span的起始点和结束点的概率,分别记为p1 p2 p 2 ,计算公式如下:

p1=softmax(W1[M0;M1])p2=softmax(W2[M0;M2]) p 1 = s o f t m a x ( W 1 [ M 0 ; M 1 ] ) ; p 2 = s o f t m a x ( W 2 [ M 0 ; M 2 ] )
  其中 W1 W 1 W2 W 2 是两个可训练变量, M0 M 0 M1 M 1 M2 M 2 依次对应结构图中三个model encoder block的输出(自底向上)。
  目标函数:
L(θ)=1NiN[log(p1y1i)+log(p2y2i)] L ( θ ) = − 1 N ∑ i N [ l o g ( p y i 1 1 ) + l o g ( p y i 2 2 ) ]
  其中 y1i y i 1 y2i y i 2 分别为第 i i 个样本的groudtruth的起始位置和结束位置。

对测试集进行预测时,span(s, e)的选取规则是:ps1 p2e p e 2 最大且 se s ≤ e

参考文献:

[1] Seo, Minjoon, et al. “Bidirectional attention flow for machine comprehension.” arXiv preprint arXiv:1611.01603 (2016).
[2] Srivastava, R. K., Greff, K., & Schmidhuber, J. (2015). Highway networks. arXiv preprint arXiv:1505.00387.
[3] Vaswani, Ashish, et al. “Attention is all you need.” Advances in Neural Information Processing Systems. 2017.
[4] He, Kaiming, et al. “Deep residual learning for image recognition.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

参考博客:

[1] 深度学习中的注意力机制
[2] 详解深度学习中的Normalization,不只是BN
[3] 《Attention is All You Need》浅读(简介+代码)
[4] 论文笔记 - Fast and Accurate Reading Comprehension by Combining Self-Attention and Convolution

附:

Tensorflow实现:https://github.com/NLPLearn/QANet
Pytorch实现:https://github.com/hengruo/QANet-pytorch

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值