Attention注意力机制
理解
- 人类视野开阔,但焦点只有小范围或者一个点,这个就叫做注意力
- 人类在长期进化中形成的一种【生存机制】
- 在特定场景下,解决某个问题
- 特点
- 信息肯定很多
- 对问题有帮助的信息
- 对问题无帮助的信息——噪声
- 大脑算力有限、资源有限,不可能同时把精力分配给所有的信息
- 信息肯定很多
- 策略:要解决某个问题,就必须快速的从纷乱繁杂的信息中,检索出对解决问题最重要的信息
- 举例
- 英语考试中的信息匹配
- 上课看屏幕
- 淘宝买衣服
- 一段在菜市场的录音
- 在当前计算机算力资源的限制下,注意力机制绝对是提高效率的一种必要手段,将【注意力】集中到有用的信息上,不要在噪声中花费时间
核心目标
从众多信息中选择出对当前任务目标更关键的信息,将注意力放在这上面
Encoder-Decoder框架
架构
文本处理和语音识别的Encoder部分通常采用【RNN模型】
图像处理的Encoder一般采用【CNN模型】
例:机器翻译
场景
输入的是英文句子:Tom chase Jerry,翻译生成中文单词:“汤姆”,“追逐”,“杰瑞”
信息
Tom chase Jerry
有效信息
每次生成一个目标单词,每个目标单词的有效信息都不一样,比如,对于“杰瑞”而言,最重要的信息应该是“Jerry”
分心模型
在翻译“杰瑞”时,“Tom”、“chase”、“Jerry”三者贡献的注意力是一样的
引入注意力机制
即生成目标句子单词的过程有下面的形式:
而每个Ci可能对应着不同的源句子单词的注意力分配概率分布,比如对于上面的英汉翻译来说,其对应的信息可能如下:
一般做法中,g函数就是对构成元素加权求和
Attention机制的本质思想
从概念上理解
把Attention仍然理解为【从大量信息】中【有选择地筛选】出【少量重要信息】并【聚焦到这些重要信息上】,从而【忽略太多不重要的信息】。
聚焦:这个过程体现在【权重系数】的计算上,权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。
从相似度、相关性角度理解
- 传统聚类:将【样本】进行分类
- Attention:将特征与目标进行相似度匹配
具体计算过程
- 根据Query和Key计算两者的相似性或者相关性
可以引入不同的函数和计算机制,根据Query和某个输入,计算两者的相似性或者相关性
常见方法:
- 求两者的【向量点积】
- 求两者的向量【Cosine相似性】
- 引入额外的神经网络来求值
- 对得到的原始分值进行softmax归一化处理
- 根据权重系数对Value进行加权求和
目前绝大多数具体的注意力机制计算方法都符合上述的三阶段抽象计算过程
Self Attention
简介
在一般任务的 Encoder-Decoder 框架中,输入 Source 和输出 Target 内容是不一样的,比如对于中英机器翻译来说,Source 是中文句子,Target 是对应的翻译出的英文句子,Attention 机制发生在 Target 的元素 Query 和 Source 中的所有元素之间。而 Self Attention 顾名思义,指的不是 Target 和 Source 之间的 Attention 机制,而是 Source 内部元素之间或者 Target 内部元素之间发生的 Attention 机制,也可以理解为 Target=Source 这种特殊情况下的注意力计算机制。其具体计算过程是一样的,只是计算对象发生了变化而已,所以此处不再赘述其计算过程细节。
Self Attention可以捕获同一个句子中单词之间的一些句法特征(比如上左图中展示的有一定距离的短语结构)或者语义特征(比如上右图中展示的its指代对象是Law)
例如
- query:making(句中的每个单词)
- key/value:整句话中的每个单词
- 权重系数的含义:句中哪个词跟我这个词的关联性大
优点
- 引入了Self Attention后会更容易捕获句子中长距离的相互依赖的特征
- 因为如果是RNN或者LSTM,【需要按照次序序列计算】,对于远距离的相互依赖的特征,需要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效信息就会被稀释,有效捕获的可能性就越小
- Self Attention不需要依赖次序序列计算。Self Attention在计算过程中会直接将句子中【任意两个单词的联系通过一个计算步骤直接联系起来】,所以远距离依赖特征之间的距离被极大缩短,有利于有效的利用这些特征
- Self Attention对于增加计算的并行性也有直接的帮助作用