巴赫达瑙发明的注意力机制的核心思想是:在处理长序列数据时,并不是所有输入的信息都同等重要,模型应该根据本轮任务,自动和动态地决定在处理每个输出序列时应当重点关注哪部分输入。模型如何知道输入的哪些部分与任务的相关性更高呢?解决这个问题的不同方法就形成了不同的注意力机制。譬如巴赫达瑙给出的方法是首先将输入序列中的每一项元素都赋予一个注意力权重,用来表示当前任务中模型对输入序列中每个元素的关注程度,然后训练一个小型的前馈神经网络(通常只有一个隐层)来预测这个权重值 ,这种方法被称为“巴赫达瑙注意力”(Bahdanau Attention)或者“加性注意力”(Additive Attention)。
当下更为流行的是在 Transformer 架构中广泛使用的“点积注意力”(Dot-Product Attention),它将注意力机制的工作过程分解为“ Query”“ Key”和“Value”三部分,通过点积计算得到权重值。要从数学角度严谨地理解 Query、Key 和 Value 进行点积计算的含义非常烦琐枯燥,笔者举个生活中的例子来加以说明:请想象一位女士去婚介所购买相亲服务的场景,婚介所中有成千上万份候选档案,当然不可能让顾客逐一阅读每份材料来找出要相亲的对象,通常是先让女士描述一下她心中理想丈夫的特征,譬如身高、体重、工作、收入、房车状况、教育、家庭等,这些条件就是 Query。接着婚介所拿着理想条件(Query)去和所有候选人的现实条件(Key)进行匹配,匹配程度越高,女士应投入的注意力权重就越大,然后根据注意力大小来决定要花多大精力去阅读候选人的档案材料(Value)。
依靠计算输入序列中每个元素的注意力权重,后续的神经网络层次得以直接访问和利用输入序列中最有价值的信息,因此注意力机制下的记忆访问是无视距离长短的,如此便能绕过处理长序列时的梯度消失或梯度爆炸问题。现在注意力机制的应用已经不限于序列到序列模型了,它已成为现代深度学习模型中的一个重要技巧,显著提高了各种自然语言处理任务的性能。
第二项改进是 2017 年谷歌著名论文“ Attention is All You Need ”里首次提出的 Transformer 架构,如图 8-10 所示。从这篇文章直白的标题“你只需要注意力”就能一窥究竟:既然已经使用注意力机制来解决长期记忆和输入序列利用效率这些问题了,那何不索性直接将序列到序列模型中的循环神经网络完全替换掉,用更加简单的前馈神经网络<sup>○一</sup>(Feed-forward Neural Network,FFN)配合注意力机制来实现序列到序列模型呢?
330
第三部分 第三波高潮
○一 巴赫达瑙在论文中先设定了一个注意力分数,用神经网络预测分数值,然后将分数转换为概率分布得到权重值。由于本书的目的主要是科普,因此这里对论文的逻辑进行了简化。