[关闭]
@songying 2019-03-19T12:57:10.000000Z 字数 4458 阅读 2128

NLP中的 Attention 机制(不定期更新)

博客文章

前言

春招临近,好紧张啊,觉得自己啥都不会啊,怎么办 ... 好慌。 于是,我决定写一篇关于 Attention 的文章来记录自己当初的理解以及思考,免得面试被问成傻子呦。 本文不是 Attention 的科普文( 出门左拐: [6] ),而是针对 Attention 目前的发展做一个小型的综述,毕竟目前 lstm + attention 是解决各种 NLP 问题的主流解决方案。

作为一个研究阅读理解的小渣渣,在阅读相关模型文献中,简直被各种花式 Attention 秀死,因此本文除了几篇重量级的开山之作,其余 Attention 文章都源自于阅读理解领域,如果有其余领域的相关文章,欢迎推荐。

本文会先就目前主流的 Attention 进行思想比较,而最终的公式部分,会放到最后一起比较。

Hard vs Soft [1]

Attention首先分为两大类:Hard Attention 与 Soft Attention, 两者的区别在于 Hard Attention 关注一个很小的区域,而soft Attention 关注的相对要发散。 举个机器翻译方面的例子:

我是小明 --> I am XiaoMing

比较二者而言,很显然,soft attention有很大的优势,因此,对于NLP领域而言,目前大多数的研究都基于 soft Attention 进行扩展。

虽然 [1] 具有很强的开创意义,但其毕竟是关于CV领域的,不推荐精读,因此我没有写任何公式,个人十分推荐下面这篇文章来作为 Attention 的第一篇精读论文。

Global vs Local [2]

在 soft attention阵营中,很快又划分为两大阵营: Glocal attention 与 Local attention, 二者的区别在于关注的范围大小不同, 其中,Global attention 关注全部的文字序列,而 Local attention 关注的是固定的窗口中的所有文字序列

比较二者, Global attention 的计算量要比 Local Attention 要大,尤其是对于长句子而言,效率变得很低; 而 Local Attention 只与窗口内的文字相关,因此窗口的大小就显得至关重要了,且在local attention 中多了一个预测中心词 的过程,这有可能会忽略一些重要的词。 而对于窗口的设置,论文中采用高斯分布来实现,如下:


另一方面,由于Global Attention考虑的信息较多,因此从原理上讲要更好一些,毕竟local attention 可能会忽略对当前输出很重要的词,且 Local Attention 的表现与窗口的大小密切相关,如果设置小了,可能会导致效果变得很差。

而考虑到NLP中问题的复杂性(如句子长短不一,句子之间可能有很强的相关性),因此后来的很多论文[3][4]中很少考虑采用 Local Attention 方法,且我自己在做阅读理解任务时,也基本不会考虑Local Attention, 毕竟窗口大小的设置实在太考验人了。

Global Attention

Local Attention

探讨一下Attention的本质思想 [5][6]

在上图中,Query 表示我们的问题信息,在阅读理解问题中,其对应的就是 question,而在机器翻译中,常常采用上一时刻的输出信息 a_{i,j}$
由上式可以看到,对于Attention机制的整个计算过程,可以总结为以下三个过程:

总的来说,Attention无论如何变化,总是万变不离其宗。 对于大多数 Attention 的文章来说,其变化主要在于 Query, Key, Value 的定义以及第一阶段 Score 的计算方法,下面我们来详细讨论一下。

Score 函数的选择 [6][2]

常见的方式主要有以下三种:

一般情况下,采用MLP网络更加灵活一些,且可以适当的扩展层以及改变网络结构,这对于一些任务来说是很有帮助的。

Query, Key, Value 的定义

对于一个 Attention 机制而言,定义好 Query, Key, Value 是至关重要的,这一点我个人认为是一个经验工程,看的多了,自然就懂了。 我这里简单举阅读理解与机器翻译的例子:

由此我们可以看出, Attention 中 Query, Key, Value 的定义都是很灵活的,不同的定义可能产生不一样的化学效果,比如 Self-Attention ,下面我就好好探讨探讨这一牛逼思想。

Self-Attention [5]

Self-Attention 可以说是最火的 Attention 模型了,其在最近很火的 Bert 中也起到了重要的作用,最关键的是,其可与 LSTM 一较高低,最近感觉这点很有意思,后期可能会单独写一篇文章讨论 CNN,RNN,Self-Attetnion 在NLP中的作用与区别。

这篇文章是十分值得精读,反复看的,因为其真正的将 Attention 用到了另一个新的高度,膜拜 Google。鉴于篇幅所限,本文就不赘述其中详细原理了,而是简述一下其核心思想。

Self-Attention 的本质就是自己注意自己, 粗暴点来说,就是,Q,K,V是一样的,即:


它的内部含义是对序列本身做 Attention,来获得序列内部的联系,如下图所示 [7]。

这其实是有点类似于我们在 Embedding 层的时候采用 LSTM 来获得输入序列的上下文表示,但与 LSTM 不同之处在于Self - Attention 更能够把握句子中词与词的句法特征或语义特征,但另一方面其对于序列的位置信息不能很好的表示,这也是为什么会采用 Postition Embedding 来对位置信息做一个补充,但对于一些对位置信息敏感的任务,position Embedding 所带来的信息可能会不够。

之所以说这篇文章具有开创意义,是因为其将Attention用到了一个基础单元上, 为取代LSTM提供了一种可能。限于文章篇幅,这里就不展开论述了。

Attention in Reading Comprehension

本节探讨一下 Attention 在阅读理解领域的各种骚操作,有一句话说的好,想看花式Attention, 请关注SQUAD排行榜。个人还是很推荐时不时的 follow 一下 SQuAD 排行榜的,很多新奇的想法总是首先出现在该数据集上。

目前有打算将自己以前看过的阅读理解模型笔记总结成博客分享出来,不过内容很多,估计耗时会较长,会分多个系列出来,敬请期待。

最后

其实本文已经将核心的 Attention 思想一网打尽了, 而对于各种 Attention 的变体毕竟无法全面概述,限于篇幅,就此为止,后续如果看到经典的Attention 变体,也会总结成文章分享出来的。ok, 就酱。

各位客官,别只收藏,不点赞啊。

Reference

[1] Show, Attend and Tell: Neural Image Caption Generation with Visual Attention -- 不推荐

[2] Effective Approaches to Attention-based Neural Machine Translation

[3] Neural Machine Translation by Jointly Learning to Align and Translate

[4] Neural Responding Machine for Short-Text Conversation

[5] Attention is all you need

深度学习中的注意力机制

[7] https://zhuanlan.zhihu.com/p/47282410

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注