导航

注意力机制

Posted on 2023-02-26 20:02  蝈蝈俊  阅读(264)  评论(0编辑  收藏  举报

Encoder-Decoder模型框架我们提到:

不论输入和输出的语句长度是什么,中间的上下文向量长度都是固定的。

一旦长度过长,仅仅靠一个固定长度的上下文向量解码,会有信息瓶颈,可能会丢失信息的问题。

解决方法就是注意力机制。

在了解注意力机制之前,先请看《圣母与圣吉凡尼诺》这幅由佛罗伦萨画家多米尼哥·基兰达约创作于15世纪,现藏于佛罗伦萨维琪奥王宫的画作。

看完这幅画,相信首先映入你眼帘的是圣母玛利亚以及正在接受祈祷的婴儿耶稣。如果不回看这幅画,你的脑海里是否对右侧的一头驴和一头牛有印象?如果你没有印象,这其实是一种非常正常的现象,因为人的注意力是有限的,无论是观看图像还是阅读文字,人们都会有选择性地关注一小部分重点内容,并忽略另一部分不重要的内容。

从数学的角度来说,可以将“注意力”理解为一种“权重”,在理解图片或文本时,大脑会赋予对于认知有重要意义的内容高权重,赋予不重要的内容低权重,在不同的上下文中专注不同的信息,这样可以帮助人们更好地理解信息,同时还能降低信息处理的难度。这就是注意力机制,这种机制被应用在人工智能领域,帮助机器更好地解决图像处理和文本处理方面的一些问题。

人工智能领域的注意力机制一开始主要用于图像标注领域,后续为了解决机器翻译的问题,被引入到自然语言处理领域。

虽然Encoder-Decoder模型可以实现将一种语言翻译为另一种语言,但随着句子长度的增加,翻译的性能将急剧恶化。

这主要是因为很难用固定长度的向量去概括长句子里的所有细节。

实现这一点需要足够大的深度神经网络和漫长的训练时间。

为了解决这一问题,引入了注意力机制。

那么,注意力机制在人工智能领域是如何运作的呢?在回答这个问题之前,请先阅读下图中的这段话。

阅读完这段话之后,你一定发现,虽然图片上的语句是乱序的,但是并没有干扰你的阅读,这种现象原理与人工智能的自注意力(Self-Attention)机制非常相近,下面我们用通俗易懂的语言对这套机制进行分析。

  • 首先,你的眼睛捕捉到了第一个字“研”,并且扫过那一行的后续文字“表”“究”“明”。

  • 然后,大脑在过去学习的认知库里去搜寻“研表”“研究”“研明”等,发现“研究”两个字关联最为紧密,所以就给了它较高的权重进行编码计算,并按类似的方式完成后续内容的编码。

  • 编码完毕后,按照权重对内容进行重新组装,信息也就组合成了“研究表明”这一常见用法。

通过这种自注意力机制,人工智能可以很好地捕捉文本内在的联系并进行再表示。

Attention机制实现

Attention的输入由三部分构成:Query、Key和Value。其中,(Key, Value)是具有相互关联的KV对,Query是输入的“问题”,Attention可以将Query转化为与Query最相关的向量表示。

Attention 原理分三步:

  1. query 和 key 进行相似度计算,得到权值;
  2. 将权值进行归一化,得到直接可用的权重;
  3. 将权重和 value 进行加权求和;

Query、Key和 Value 的含义是什么呢?

我们以大脑看到《圣母与圣吉凡尼诺》这幅图为例:

  • Value 可以理解为人眼视网膜对整张图片信息的原始捕捉,不受“注意力”所影响。我们可以将 Value 理解为像素级别的信息,那么假设只要一张图片呈现在人眼面前,图片中的像素都会被视网膜捕捉到。
  • Key 与 Value 相关联,Key 是图片原始信息所对应的关键性提示信息,比如我们把整幅图的信息抽象为“圣母玛利亚和正在接受祈祷的婴儿耶稣”。
  • 一个读者看到这张图片时,读者大脑有意识地向图片获取信息,即发起了一次 Query(寻求图画中最吸引人注意力),Query 中包含了读者的意图等信息。

在一次读图过程中,Query 与 Key 之间计算出 Attention Score,得到最具有吸引力的部分,并只对具有吸引力的Value信息进行提取,反馈到大脑中。就像上面的例子中,经过大脑的注意力机制的筛选,一次 Query 后,大脑只关注“圣母玛利亚以及正在接受祈祷的婴儿耶稣”部分,忽略了毛驴和牛。

翻译场景的注意力机制例子

注意力(Attention)是一种机制,允许文本模型在决定如何翻译输出句子中的单词时 “查看” 原句中的每一个单词。

关于注意力的论文《Neural Machine Translation by Jointly Learning to Align and Translate (2015)》(https://arxiv.org/abs/1409.0473)这里有该过程的可视化图片。

论文的例子是把下面句子从英语翻译成法语。

The agreement on the European Economic Area was signed in August 1992.

将这句话翻译成法语的相应内容:

L’accord sur la zone économique européenne a été signé en août 1992.

翻译这句话的一个坏方法是:通过英语句子中的每个单词找到其法语的对应词,一次一个单词。这样做效果并不好,原因有几个。

  • 首先,法语翻译中的一些词被颠倒了:英语是 “European Economic Area”,而法语是 “la zone économique européenne”。
  • 另外,法语是一种带有性别色彩的语言。形容词 “économique” 和 “européenne” 必须采用阴性形式,以配合阴性对象 “la zone”。

下图是一种热力图,直观的描述了模型在输出法语句子中的每个词时 “关注” 的地方。

正如我们想要的那样,当模型输出 “européenne” 这个词时,它重点关注了 “European”和 “Economic”这两个输入词。

那么,模型是如何知道它在每个步骤中应该 “关注”哪些词的呢?这是从训练数据中学习到的东西。通过看到数以千计的法语和英语句子的例子,该模型学会了哪些类型的词是相互依赖的。它学会了如何遵循词性别、复数和其他语法规则。

总结

之所以要引入 Attention 机制,主要是3个原因:

参数少

模型复杂度跟 CNN、RNN 相比,复杂度更小,参数也更少。所以对算力的要求也就更小。

速度快

Attention 解决了 RNN 不能并行计算的问题。Attention 机制每一步计算不依赖于上一步的计算结果,因此可以和 CNN 一样并行处理。

效果好

在 Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是一样的。