12. 基于自注意力的模型
循环神经网络和卷积神经网络是两种经典的神经网络结构,在机器翻译中进
应用也是较为自然的想法。但是,这些模型在处理文字序列时也有问题:它们对
列中不同位置之间的依赖关系的建模并不直接。以卷积神经网络为例,如果要对
距离依赖进行描述,需要多层卷积操作,而且不同层之间信息传递也可能有损失,
些都限制了模型的能力。
列, TransformerTrans-
former 并不依赖任何循环单元或者卷积单元,而是使用一种被称作自意力网络
结构来对序列进行表示。自注意力机制可以非常高效的描述任意距离之间的依赖
系,因此非常适合处理语言文字序列。Transformer 一经提出就受到了广泛关注,现
在已经成为了机器翻译中最先进的架构之一。本章将会对 Transformer 的基本结构和
实现技术进行介绍。这部分知识也会在本书的前沿部分(第十三章 十八章)中
大量使用。
12.1 自注意力机制
首先回顾一下循环神经网络处理文字序列的过程。如图12.1所示,对于单词序列
{w
1
,...,w
m
},处理第 m 个单词 w
m
时(绿色方框部分),需要输入前一时刻的信息
(即处理单词 w
m1
,而 w
m1
又依赖于 w
m2
,以此类推。也就是说,如果想建立
w
m
w
1
之间的关系,需要 m 1 次信息传递。对于长序列来说,单词之间信息传
递距离过长会导致信息在传递过程中丢失,同时这种按顺序建模的方式也使得系
408 Chapter 12. 基于自注意力的模型 肖桐 朱靖波
对序列的处理十分缓慢。
w
1
w
2
w
3
...
w
m1
w
m
信息传递
12.1 循环神经网络中单词之间的依赖关系
那么能否摆脱这种顺序传递信息的方式,直接对不同位置单词之间的关系进
建模,即将信息传递的距离拉近为 1自注意力机制的提出便有效解决了这个问题
[532]
12.2给出了自注意力机制对序列进行建模的示例。对于单词 w
m
自注意力机制直
接建立它与前 m 1 个单词之间的关系。也就是说,w
m
与序列中所有其他单词的距
离都是 1这种方式很好地解决了长距离依赖问题,同时由于单词之间的联系都是相
互独立的,因此也大大提高了模型的并行度。
w
1
w
2
w
3
...
w
m1
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()。在自注意力模型中,
12.1 自注意力机制 409
先计算 query key 的相关度,这里用 α
i
表示 h() 和位置 i 的表示之间的相关性。
然后,把 α
i
作为权重,对不同位置上 value 进行加权求和。最终,得到新的表示
结果
˜
h (),其具体计算如下:
˜
h() = α
1
h() +α
2
h(什么) +α
3
h() +
α
4
h() +α
5
h() (12.2)
同理,也可以用同样的方法处理这个句子中的其他单词。可以看出,在自注意力
机制中,并不是使用类似于循环神经网络的记忆能力去访问历史信息。序列中所
单词之间的信息都是通过同一种操作query key 的相关度)进行处理。这样,
示结果
˜
h() 在包含“他”这个单词的信息的同时,也包含了序列中其他词的信息。
也就是,序列中每一个位置的表示结果中,都包含了其他位置的信息。从这个角
说,
˜
h() 已经不再是单词“他”自身的表示结果,而是一种在单词“他”的位置上
的全局信息的表示。
通常,也把生成
˜
h(w
i
) 的过程看作特征提取,而实现这个过程的模型被称为特征
提取器。循环神经网络、卷积神经网络和自注意力模型都是典型的特征提取器。
征提取是神经机器翻译系统的关键步骤,在随后的内容中可以看到自注意力模型
一个非常适合机器翻译任务的特征提取器。