0 前言
大家好,欢迎来到“自由技艺”的知识小馆。今天我们来探讨下深度学习中的 Attention 机制,中文名为“注意力”。本文内容结构组织如下:
1 为什么需要引入 Attention 机制?
2 深度学习中的 Encoder-Decoder 框架
3 Soft Attention 模型
4 Attention 机制的本质
5 Self Attention 模型
6 总结
1 为什么要引入 Attention 机制?
当我们用深度 CNN 模型识别图像时,一般是通过卷积核去提取图像的局部信息,然而,每个局部信息对图像能否被正确识别的影响力是不同的,如何让模型知道图像中不同局部信息的重要性呢?答案就是注意力机制。
人类视觉注意力
视觉注意力机制是人类大脑的一种天生的能力。当我们看到一幅图片时,先是快速扫过图片,然后锁定需要重点关注的目标区域。比如当我们观察上述图片时,注意力很容易就集中在了人脸、文章标题和文章首句等位置。
试想,如果每个局部信息都不放过,那么必然耗费很多精力,不利于人类的生存进化。同样地,在深度学习网络中引入类似的机制,可以简化模型,加速计算。
另外,利用循环神经网络去处理 NLP 任务时,长距离“记忆”能力一直是个大难题,而引入“注意力机制”也能有效缓解这一问题。
2 Encoder-Decoder 框架
常见的深度学习模型有 CNN、RNN、LSTM、AE 等,其实都可以归为一种通用框架 - Encoder-Decoder.
Encoder-Decoder 框架
在文本处理领域,有一类常见的任务就是从一个句子(Source)生成另一个句子(Target),比如翻译,其中 xi 是输入单词的向量表示,yi 表示输出单词。
Source 经过 Encoder,生成中间的语义编码 C,
C 经过 Decoder 之后,输出翻译后的句子。在循环神经网络中,先根据 C 生成 y1,再基于(C,y1)生成 y2,依此类推。
3 Soft Attention 模型
RNN 模型
传统的循环神经网络中,y1、y2 和 y3 的计算都是基于同一个 C. 深入思考一下,发现这可能并不是最好的方案,因为 Source 中不同单词对 y1、y2 和 y3 的影响是不同的,所以,很自然地就有了如下思路:
引入注意力机制的 Encoder-Decoder 框架
上述改良模型中的 C1、C2、C3 是怎么计算的呢?其实也非常简单,就是在计算 C1、C2 和 C3 时,分别使用不同的权重向量:
上述公式中的权重向量 (a11, a12, a13)、(a21, a22, a23)、(a31, a32, a33) 又是如何计算的呢?请看下图。
注意力分配的概率计算
上述模型中: h1 = f(Tom)、h2 = f(h1, Chase)、h3 = f(h2, Jerry).
当计算出 Hi-1 之后,通过函数 F(hj,Hi-1) 获得输入语句中不同单词(Tom、Chase、Jerry)对目标单词 yi 的影响力,F 的输出再经过 Softmax 进行归一化就得到了符合概率分布取值区间的注意力分配概率。其中,F 函数的实现方法有多种,比如余弦相似度、MLP 等。
google 神经网络机器翻译系统结构图
4 Attention 机制的本质
现在,请你把 Source 想象成是内存里的一块存储空间,它里面存储的数据按 <Key, Value> 存储。给定 Query,然后取出对应的内容。这里与一般的 hash 查询方式不同的是,每个地址都只取一部分内容,然后对所有的 Value 加权求和。
Attention 的实质:软寻址(soft addressing)
公式描述如下:
Attention 的计算可以分成如下三个阶段:
三阶段计算 Attention 过程
注意力打分机制
归一化的注意力概率分配
上述公式中的 Lx 表示输入语句的长度。上一节的例子中,Key 是等于 Value 的。
5 Self Attention 模型
可视化 Self Attention 例子
在 Soft Attention 模型中,Source 和输出 Target 的内容是不同的,比如中-英机器翻译,Source 对应中文语句,Target 对应英文语句。
现在有另一个任务,如上图所示:给定一个句子和句子中某个单词 making,如何找出与 making 强相关的其他单词呢?比如上图中的 more difficult(因为它们和 making 可以组成一个短语).
这就用到了 Self Attention 机制,顾名思义,指的是 Source 内部元素之间或者 Target 内部元素之间发生的 Attention 机制,也可以理解为 Source = Target 这种特殊情况下的 Attention 机制,具体计算过程和 Soft Attention 是一样的。
6 总结
下图展示了注意力机制如何在图片描述任务(Image-Caption)中发挥作用的。
图片描述任务,就是给你一张图片,请输出一句话去描述它。一般会用 CNN 来对图片进行特征提取,Decoder 部分使用 RNN 或者 LSTM 来输出描述语句。此时如果加入注意力机制,能够大大改善输出效果。
图片描述任务中的注意力机制
另外,在语音识别、目标物体检测等领域,注意力机制同样取得了很好的效果。
实际上,Attention 机制听起来高大上,其关键就是学出一个权重分布,然后作用在特征上。
文中图片及部分内容来源于 CSDN 账号“csdn人工智能”的文章《深度学习中的注意力机制》,写得非常好,强烈推荐大家阅读。