作者:louwill 个人公众号:机器学习实验室,致力于数据科学、机器学习和深度学习的应用与研究。有着多年的R语言和Python编程经验 配套视频教程:Python机器学习全流程项目实战精 https:// edu.hellobi.com/course/ 284 涵盖需求分析->数据采集->数据清洗与预处理->数据分析与可视化->特征工程->机器学习建模->模型调优->报告输出。以Python为工具实现机器学习全流程。
上一讲我们讲到了 seq2seq 模型,seq2seq 模型虽然强大,但如果仅仅是单一使用的话,效果会大打折扣。本节要介绍的注意力模型就是基于编码-解码框架下的一种模拟人类注意力直觉的一种模型。
注意力机制原理
人脑的注意力机制本质上是一种注意力资源分配的模型,比如说我们在阅读一篇论文的时候,在某个特定时刻注意力肯定只会在某一行文字描述,在看到一张图片时,我们的注意力肯定会聚焦于某一局部。随着我们的目光移动,我们的注意力肯定又聚焦到另外一行文字,另外一个图像局部。所以,对于一篇论文、一张图片,在任意一时刻我们的注意力分布是不一样的。这便是著名的注意力机制模型的由来。早在计算机视觉目标检测相关的内容学习时,我们就提到过注意力机制的思想,目标检测中的 Fast R-CNN 利用 RoI(兴趣区域)来更好的执行检测任务,其中 RoI 便是注意力模型在计算机视觉上的应用。
注意力模型的使用更多是在自然语言处理领域,在机器翻译等序列模型应用上有着更为广泛的应用。在自然语言处理中,注意力模型通常是应用在经典的 Encoder-Decoder 框架下的,也就是 RNN 中著名的 N vs M 模型,seq2seq 模型正是一种典型的 Encoder-Decoder 框架。
Encoder-Decoder 作为一种通用框架,在具体的自然语言处理任务上还不够精细化。换句话说,单纯的Encoder-Decoder 框架并不能有效的聚焦到输入目标上,这使得像 seq2seq 的模型在独自使用时并不能发挥最大功效。比如说在上图中,编码器将输入编码成上下文变量 c,在解码时每一个输出 Y 都会不加区分的使用这个 c 进行解码。而注意力模型要做的事就是根据序列的每个时间步将编码器编码为不同 c,在解码时,结合每个不同的 c 进行解码输出,这样得到的结果会更加准确。
统一编码为 c:
使用统一的 c 进行解码:
在应用了注意力模型之后,每个输入会被独立编码,解码时就会有各自对应的 c 进行解码,而不是简单的一刀切:
相应的,原先的 Encoder-Decoder 框架在引入了注意力机制后就变成了如下结构:
以上是注意力模型的图示,下面我们再来看如何注意力模型如何用公式来描述。公式描述如下: