Self-Attention谁先提出的,各文章里写的不一样,Attention Is All You Need中说是Jakob et al.2016年提出的,An Attentive Survey of Attention Models中说是Yang et al. 2016,本篇介绍前者。
Abstract:simpler and more lightweight,比之前的模型参数少一个数量级,而且不依赖与任何词的顺序信息
Introduction
近年来,Natural language inference(NLI)领域中提出的模型都数据量巨大,计算成本非常高。但实际上NLI中,往往是只需要少量的局域信息,然后将这些局域信息汇总起来进行预测即可。
Approach
模型结构
这里结构图和后面实际的计算过程对不上,$G(·)$是用来算park和用另一个句子表示出的park,按这个结构图$G(·)$就要运算$m×n$次了,和后文对不上。
Input representation
输入是两个句子(不一定等长,$l_a$和$l_b$),句子是由每个词的embedding向量(长度$d$)组成的矩阵,label是多分类的one-hot标签(类别数为$C$)。
$\boldsymbol{a}$和$\boldsymbol{b}$可以做一些变换之后再输入模型,标准版模型就输入$\boldsymbol{a}$和$\boldsymbol{b}$了。后文给出了一个变换的案例,其实就是self-attention。
Attend
这一步是用attention,让两个句子$(\boldsymbol{a},\boldsymbol{b})$相互表示对方,得到$(\boldsymbol\beta,\boldsymbol\alpha)$,$\boldsymbol\beta$是$\boldsymbol b$表示出来的$\boldsymbol a$。
首先要计算相关性权重
这里有一个计算简化,如果按照$F^{‘}{(a_i,b_j)}$计算,则需要计算$l_a×l_b$次$F^{‘}{(·)}$,但按照后者计算则只用计算$l_a+l_b$次$F{(·)}$。
然后对weight标准化,并根据标准化的权重加权得到新的词表达:$\beta_i,\alpha_j$。需要注意的是,此处命名有点反直觉,$\beta_i$的计算中,query是$a_i$,Key和Value都是$\boldsymbol{b}$。$\alpha_j$则相反,query是$b_i$,Key和Value都是$\boldsymbol{a}$。
Compare
接下来,分别比较$\{(a_i,\beta_i)\}^{l_a}_{i=1}$和$\{(b_j,\alpha_j)\}^{l_b}_{j=1}$中每个pair,也就是看看用$\boldsymbol{b}$表示出来的$a_i$,即$\beta_i$和真正的$a_i$有多像,如果很像(反映在$\boldsymbol{v}_{1,i}$中),则证明句子$\boldsymbol{b}$中有$a_i$的信息。
其中$[·,·]$表示concatenation,$G$在论文中是全连接。因为这个计算次数是线性的,所以不用像前面一样将$a_i,\beta_i$拆开计算了。
Aggregate
将每个词的比较向量聚合成句子的比较向量
然后concat起来过分类器,得到预测结果
Intra-Sentence Attention
重点self-attention来了,前面的模型里,输入是简单的word embedding。这里提出一种增强输入表达的方法:intra-sentence attention,将句子中每个词之间的关系表示出来。
其中,$F_{intra}$是一个全连接,$f_{ij}$就表示$a_i$和$a_j$的相似程度。$d_{i-j}$是距离敏感度偏置项,作用是不让某个词的权重过小。
学点巴洛克风格的词
vanilla version:The “vanilla version“ is generally the version that has no customisation applied - it is the “regular”, “ordinary” or “plain old” version. For a lot of consumer based software - this would be the only version. You would not build custom versions for every user.