写在前面:有一段时间没更新专栏了,哈哈,先吐槽下自己的龟速更新。

Attention机制基本已成为NLP的居家旅行必备技能,同时也是我一直关注的技术点,希望本篇内容能带给大家些许思考。如有描述不对的地方,欢迎拍砖。好了,废话不多说,进入正题!


1. Attention机制

attention机制最初是由Bahdanau等人通过「Neural Machine Translation by Jointly Learning to Align and Translate「一文引入到NLP中。主要思想是采用attention机制去解决机器翻译中的对齐问题缓解RNN的长距离依赖。基本结构如下图所示。

因本文重点放在attention机制本身,有关其在机器翻译中的具体使用,感兴趣的同学可祥看论文。

下面给出attention机制的一般结构示意图:

为了便于描述,将attention机制的三元组定义为 Omega={q,K,V} ,并且通常情况下 KV 等价。整个计算过程可分为三步:

1. 计算 q 与每个 k_i 的相关性 e_i=a(q, k_i)

2. 权重归一化 alpha_i=frac{	ext{exp}(e_i)}{sum_{k=1}^{n}	ext{exp}(e_k)}

3. 加权求和 c = sum_{i=1}^{n}alpha_ik_i .

其中,e_i 为标量,n 为序列长度,a(q,k) 为相关性函数。常见的相关性函数有:

Multiplicative: q^Tk, quad  q^TWk

Additive: w_{2}^{T}tanh(W_{1}[q;k]) MLP: sigma(w_{2}^{T}tanh(W_1[q;k]+b_1)+b_2)

单纯的从attention机制计算上来看,介绍到这里其实核心的东西都阐明了,attention无非就是想捕捉到序列中最相关的信息。

但是,如果仅仅到这里的话,那也不值得深夜码字了。说好的抛砖引玉,还没抛呢,接下来才是本文的重点!

2. 抛砖

注:本小节仅为个人观点,如有好的想法,欢迎讨论交流。

注意到,上节在总结attention机制的时候,用了最相关这个词,我们可以思考一下这个最相关是怎么来的?

首先,直观上看,相关性函数计算得分越高,则该位置的信息越重要。

其次,由于相关性函数 a(q,k) 同时也是 q 的函数,这也就意味著,相关性得分与 q 联系紧密。而这正是本文所要深入探讨的点。

  • 砖一:在attention机制三元组 Omega={q,K,V} 中,q 类似于一个监督信号,并且一个有意义的 q 是attention机制的关键;
  • 砖二:从概率论的角度出发,attention的权重 alpha_i 可以看作是给定监督信号 q 下的条件概率分布 P(V=v_i|Q=q) ,加权求和的输出 c 即为条件期望 E(V|Q=q)=sum_{i}^{n}v_iP(v_i|q)

第二条相对容易理解,下面简要分析下第一条:

首先,对于机器翻译,decoder中每前一时刻的隐状态 s_{i-1} 作为监督信号 q 。对于问答场景,question本身即是天然的监督信号 q 。它们的核心思想都是通过 q 的作用,去捕捉最相关的信息;

其次,对于文本分类和匹配等任务,由于不存在类似上述的天然监督信号 q ,那么如何去寻找 q 成为attention机制能否奏效的关键所在。

读过相关论文的同学都知道,既然没有这样的天然监督信号,那我就随机初始化定义一个 q ,随著样本一起训练,接下来把时间交给神经网路就好啦。

这肯定是个好想法,充分利用神经网路的学习能力,尝试去拟合任务内在的监督信号 q 。但是这种做法存在两个问题:

  • 鲁棒性和泛化能力有待考究。训练完, q 是一个固定的表征,模型推理时对于任意的输入,该监督信号是否都能够get到关键信息;
  • 单个监督信号表征的信息不充分。单个static监督信号无法cover整个特征空间,只能捕捉到某一层面的信息。

3. Basic-Attention的变体

既然上面讲了那么多Basic-Attention存在的问题,那么接下来就得讲讲该如何缓解这些问题。主要介绍两个思路。

其一,定义单个监督信号 q 所能表征的信息不够充分,那么最直接的做法就是定义多个监督信号,期望每个监督信号都能捕捉到不同层面的信息。这块工作的经典论文为「A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING」,文中还顺带提出一个有意思的正则项,用来迫使每个监督信号分别attention到不同信息。

A Structured Self-attentive Sentence Embedding?

arxiv.org

其二,可训练的监督信号训练结束后是固定的,我们期望可以根据具体的输入文本,动态的调整监督信号,提高模型的鲁棒性和泛化能力。这个方向还没有出现较为成熟的方案,此处给大家推荐一篇dynamic self-attention作为参考。作者结合multi-head的形式取得了较好的结果,链接如下。

Dynamic Self-Attention : Computing Attention over Words Dynamically for Sentence Embedding?

arxiv.org

延续前文思路,个人认为attention机制后续发展的关键还是在于如何去定义或者生成动态自适应的监督信号 q

最后,有同学可能会有疑惑,谈attention,怎么能不提到Transformer中的attention结构呢?简单说两句我个人的理解,Transformer中的 {Q,K,V} 三者都来自其自身的表征 X ,舍弃LSTM,转而利用「self-attention」来表征每个词与其上下文的联系。encoder中的多个block可以看作是多层级联的BiLSTM。


推荐阅读:
相关文章