拆解XLNet模型设计,回顾语言表征学习的思想演进( 八 )

我们先介绍注意力算子 (Attention)。注意力算子的基本元素为查询向量 (Query Vector) q,地址向量 (Key Vector) k 以及内容向量 (Value Vector) v。其输出 h 为所有内容向量的加权求和,每个权重由查询向量和地址向量算出的注意力权重(Attention Score) 决定:

注意力算子达到的目的是基于查询向量对一组表征信息进行聚合。

回到建模依赖关系的问题上。既然每个词都可能对其他词产生依赖,那我们让每个词都用注意力算子从其他词那里聚合信息不就好了嘛!这便是自注意力 (Self-Attention) 的动机。

对于第 i 个词,我们可以根据其词向量 x 算出其对应的查询向量、地址向量以及内容向量:

在进行表征聚合时,q 来自要求表征的词,k 和 v 来自所有词 (包括要求表征的词本身)。"自注意力 (Self-Attention)" 中之所以有 "自 (Self)",是因为查询、地址和内容的角色均来自同一个序列。

自注意力算子的引入解决了循环神经网络的两个问题:第 i 个词表征 h 的构建可以同时基于双向的语境;词间不管依赖距离多长,都只间隔了一次运算操作。

推荐阅读