408 Chapter 12. 基于自注意力的模型 肖桐 朱靖波
对序列的处理十分缓慢。
w
1
w
2
w
3
...
w
m−1
w
m
信息传递
图 12.1 循环神经网络中单词之间的依赖关系
那么能否摆脱这种顺序传递信息的方式,直接对不同位置单词之间的关系进行
建模,即将信息传递的距离拉近为 1?自注意力机制的提出便有效解决了这个问题
[532]
。
图12.2给出了自注意力机制对序列进行建模的示例。对于单词 w
m
,自注意力机制直
接建立它与前 m −1 个单词之间的关系。也就是说,w
m
与序列中所有其他单词的距
离都是 1。这种方式很好地解决了长距离依赖问题,同时由于单词之间的联系都是相
互独立的,因此也大大提高了模型的并行度。
w
1
w
2
w
3
...
w
m−1
w
m
信息传递
图 12.2 自注意力机制中单词之间的依赖关系
自注意力机制也可以被看作是一个序列表示模型。比如,对于每个目标位置 j,
都生成一个与之对应的源语言句子表示,它的形式如下:
C
j
=
X
i
α
i,j
h
i
(12.1)
其中,h
i
为源语言句子每个位置的表示结果,α
i,j
是目标位置 j 对 h
i
的注意力权重。
以源语言句子为例,自注意力机制将序列中每个位置的表示 h
i
看作 query(查询),
并且将所有位置的表示看作 key(键)和 value (值)。自注意力模型通过计算当前
位置与所有位置的匹配程度,也就是在注意力机制中提到的注意力权重,来对各个
位置的 value 进行加权求和。得到的结果可以被看作是在这个句子中当前位置的抽
象表示。这个过程,可以叠加多次,形成多层注意力模型,对输入序列中各个位置进
行更深层的表示。
h(他) h(什么) h(也) h(没) h(学)h(他)
α
1
α
2
α
3
α
4
α
5
图 12.3 自注意力机制的计算实例
举个例子,如图12.3所示,一个汉语句子包含 5 个词。这里,用 h(他) 表示“他”
当前的表示结果,其中 h(·) 是一个函数,用于返回输入单词所在位置对应的表示结
果(向量)。如果把“他”看作目标,这时 query 就是 h(他),key 和 value 是图中所
有位置的表示,即:h(他)、h(什么)、h(也)、h(没)、h(学)。在自注意力模型中,首