从QANet看自然语言处理如何”炫技”

这篇文章讲讲谷歌大脑团队和 CMU 联合推出的 QANet模型,QAnet是SQUAD排行榜2018年3月份排名第一的模型。 既然有Bert,为什幺还要讲QAnet?因为QAnet融合了2017年~2018年NLP领域一些重要的突破(各种炫酷技巧),通过学习它,你可以对NLP近两年的发展有较为全面的了解。 QAnet链接

这篇文章从以下几部分讲:

第一部分:QANet模型整体网络结构介绍

第二部分: 分别介绍各个炫酷的技术点的原理

第三部分: 总结(与Bert对比)

QANet融合的NLP和深度学习领域近两年内主要成果包括:

(1)Fackbook 2017.5 提出CNN seq2seq,替代LSTM ,position encoding。

(2)Google 2017.6 提出《Attention is all you need》 muti-head attention。

(3)Depthwise Separable Conv 深度可分离卷积

(4)Highway network 高速神经网络

………

一、QANet模型网络结构介绍

QAnet整体网络结构

(1)输入的数据有Context和Question两部分组成。

(2)通过Embedding层转化为Embedding向量,分为word embedding和char embedding。Highway network包含在embedding层中。

(3)通过Encoder Block层,Encoder Block是QANet重要组成部分,如右图所示。Encoder Block层分别通过四个部分,Position Encoding、 Conv卷积层、Self attention和Feedword层。每个部分开头做layernorm处理,结尾做残差连接。

(4)Context和Question的encoder向量,通过Context Query Attention计算相关性。

(5)接着通过三层Encoder Block层,第一层和第二层输出连接后,通过一层全链接层作为起始位置的概率。

(6)第一层和第三层输出连接后,通过一层全链接层作为起始位置的概率。

二、 梳理各个炫酷的技术点

1.技能点一: Encoder Block层 里的卷积

2017年Facebook发表了NLP领域重要论文《Convolutional Sequence to Sequence Learning》,提到它们用卷积神经网络实现seq2seq,实现机器翻译,效果上达到LSTM网络的水平,效率明显优于LSTM。

这块有很多文章可以参考,我就不细讲了。

2.技能点二:Depthwise Separable Conv

值得注意的是,QANet用的不是简单的CNN,而是采用Depthwise Separable Conv(深度可分离卷积)。

这个卷积的的大致意思是对每一个深度图分别进行卷积再融合,步骤是先 Depthwise Conv 再 Pointwise Conv,大大减少了参数量。目的是加速整个卷积计算过程的速度。Depthwise Separable Conv来源于Inception和Xception。

Inception 最初提出的版本,其核心思想就是使用多尺寸卷积核去观察输入数据。也就是把一个尺寸较大的卷积核替换为多个小的卷积核串联或者并联,以降低计算量。

Inception

基于Inception发展而来的 Xception ,作者称其为 Extreme Inception。首先探讨的是Inception 的 多尺寸卷积核 和 卷积核替换,然后到 Bottleneck,最后到 Xception 的 Depthwise Separable Conv 。从Inception 到Xception大大减少参数量,从而加快训练速度。N=1024,Dk=3,参数降为0.112。

Depthwise Separable Conv

3.技能点三:Self attention

Self attention 来源于Google 2017年发表的一篇重要论文《Attention is all you need》提出的Multi-head attention。如果你关注自然语言处理领域,估计对这个很熟悉了。多头”(Multi-Head),就是只多做几次同样的事情(参数不共享),然后把结果拼接。 比如Multi-Head Attention就是Attention做多次然后拼接,这跟CNN中的多个卷积核的思想是一致的。Self attention即两个输入是一样的,自己和自己做attention计算。

multihead attention原理图

4.技能点四:Position Encoding

这里的Position Encoding方式可参考Facebook的《Convolutional Sequence to Sequence Learning》,用法是一致的。计算公式如下:

position encoding计算公式

对于position encoding,多说一句,个人观点,原理上是很有道理的,但是效果并不明显,从论文可以看出,对模型的效果贡献不大,属于可有可无。也就是比较接近我的说法:”炫技”。

5.技能点五:Highway Network

如果你仔细看过QAnet详细资料,可以看到QAnet的Embedding层不是简单的把word embedding和char embedding做了一层连接作为输出,而是通过highway network再做输出。

QAnet embedding层

Highway network本质上与残差网络作用类似,降低信息在传输过程中的损失 。这是通过一种控制穿过神经网络的信息流的闸门机制所实现的。通过这种机制,神经网络可以提供通路,让信息穿过后却没有损失。我们将这种通路称为information highways。

6.技能点六:Batch normalization

Batch normalization每个batch里面的很接近的样本,都归一成0均值1方差。

为什幺要归一成0均值1方差呢?随着在神经网络训练深度加深,其整体分布逐渐发生偏移或变动,导致后向传播时神经网络梯度消失,深度网络收敛越来越慢。Batch normalization把越来越偏的分布强行正态分布,梯度变大,减缓梯度消失问题。 因此,加Batch normalization是为了使深度神经网络训练速度加快。

7.技能点七:LayerNorm

Encoder层每个部分的输入都用到了LayerNorm,实现近似独立同分布。

为什幺要独立同分布?随着神经网络的加深,每一层的输出到下一层的输入,会出现分布偏差越来越大。最后输出的target层的分布和输入的分布差距很大。而完全的白华操作代价高昂,特别是我们还希望白化操作是可微的,保证白化操作可以通过反向传播来更新梯度。

三、 个人总结

对比下Bert和QAnet,Bert整体网络结构相对于QAnet更加简单。QANet强调技巧,Bert强调算力。从对比中,可以看出NLP发展的趋势。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章