注意力机制近几年比较热,在图像识别、图像翻译、语音识别、文本摘要、机器翻译等各个领域都有应用,特别是 NLP领域效果很好,本文旨在阐述其基本原理。
研究背景
当前神经网络的问题
算力问题:计算量太大,硬件无法支持,或者计算速度较慢
长序列问题:在处理序列问题时,当前的预测目标如果跟前一刻的状态很相关,则容易预测,如果跟很久之前的状态相关,即使引入了 记忆机制,也较难预测,
举个例子,文本预测,
我爱篮球,如果预测 我()篮球,很明显,括号内很可能是 爱,
我今天看了场NBA,很有灵感,想去打篮球,如果预测 我()篮球,很难预测了
问题启发
在深度学习领域,或者说算法领域、AI领域很多问题都借鉴了人类处理问题的方式,注意力机制也是如此
人类的视觉注意力
当人类在看东西时,一般会将注意力聚焦在某些区域,而不是关注所有区域,这使得人类视觉能够快速捕捉有效信息,如下图
图中有猫、有草、有石头,但人类往往只关注猫
人类的语言注意力
人类在阅读或者说话时,会自动忽略低可能、低价值的文字,比如我们看到一个错别字,直接忽略,也来张图
图中有乱序、错字,但不影响我们阅读
所以,注意力机制就是 通过 某种方式 将 注意力放在重点信息上,从而快速有效地完成任务
Encode-Decode 框架
当前大部分Attention模型是基于Encode-Decode框架的,需要强调的是:
1. Encode-Decode框架 是一种思想,不单指自编码器,其可以是 NN、CNN、RNN、LSTM的随意组合
2. Attention 模型也是一种思想,其不依赖于任何框架
Encode-Decode框架是深度学习领域的一种研究模式,应用十分广泛,下图为常规的Encode-Decode 框架
以NLP任务来解释这张图,图中给出(x,y),训练好模型后,给出x,即可预测y,
如果x是中文,y是英语,模型就是机器翻译,
如果x是问题,y是答案,模型就是对话机器人,
如果x是文章,y是摘要,模型就是文本摘要,
在实际预测时,yi是一个一个预测的,即
yi=g(C,y1,y2…yi-1)
其中C是语义编码,它是解码器的直接输入
C=f(x1,x2,..xn)
存在问题
在预测不同时刻的y时,其输入C都是相同的,是对全体x的高度抽象,但实际上不同时刻的y可能只与某几个时刻的x相关,
比如情感分析,评论一堆,可能只看到很差二字,就可预测为负面评价,而全体文字一视同仁,很可能弱化很差二字,导致预测错误
故上述Encode-Decode 框架也被称为注意力不集中的 分心模型。
Attention 模型
Encode-Decode 框架的问题在于C不变,那解决方法很简单,预测不同时刻的yi时C变化不就行了,如下图
Attention 模型是对Encode-Decode 框架的扩展,
下面以中英翻译来解释上图
X:Tom chase Jerry
y:汤姆追逐杰瑞
显然,翻译 汤姆 时只与 Tom 有关,翻译 追逐 时与 chase 和 Tom 有关,等,
翻译过程用数学公式表达如下
y1=f1(c1)
y2=f1(c2,y1)
y3=f1(c3,y1,y2)
其中f1代表解码器
ci代表x中不同单词注意力分配不同权重概率的语义编码
ci=g(aij, hj)
c1=g(0.6*f2(Tom), 0.2*f2(chase), 0.2*f2(Jerry))
c2=g(0.2*f2(Tom), 0.7*f2(chase), 0.1*f2(Jerry))
c3=g(0.3*f2(Tom), 0.2*f2(chase), 0.5*f2(Jerry))
其中f2代表编码器,g代表将x中的多个单词转换成句子的一种变换函数,通常是加权求和;
ci代表预测y第i个单词时解码器的输入,
aij表示预测y第i个单词时与x第j个单词的相关度,
hj表示x第j个单词的编码器的输出,隐层状态,语义编码,
len(x)表示x的单词数量
求 C 过程总结为下图
那么 aij 是如何得到的呢?
aij是个概率,代表权重,反映了hj对ci的重要性,可用softmax表示
其中
eij=F(Hi,hj) 也有这么写的 eij=F(Hi-1,hj)
F 是打分函数,用于计算hj和Hi的相似度, 【这个在以前的 NLP 算法中类似 单词对齐模型】
Hi代表y第i个单词的解码器的隐层状态,
由于在计算ci时Hi还没有Hi,故用Hi-1代替,
这里的相似度计算比较开放,可以是简单的相关性计算,也可以是一个神经网络模型。
常用方法如下
求 aij 过程总结为下图
综上,带有注意力机制的 Encode-Decode 框架总结如下面几张图
注意力模型 按不同维度可分为很多类,以上介绍的是经典的 Soft-Attention 模型,是最常用的模型 。
下图可视化地展示了【在英语-德语翻译系统】中加入Attention机制后,Source和Target两个句子每个单词对应的注意力分配概率分布
Attention 的本质
实际上,Attention 机制是一种思想,只要是对输入有选择、有区别的对待都可认为是注意力机制,
我们脱离Encode-Decode 框架,更容易看清 Attention 的本质
我们将 Source(x)的数据想象成一系列 (key,value),当给定 Target(y) 中的某个元素 Query,我们先根据 Query 和 key 计算得到一个相似性或者叫权重W,然后和 value 进行加权求和 到得 attention;
只是有的时候,key 和 value 是一个东西,比如 机器翻译
求 attention 过程总结如下图
比较火的 Transformer 中主要运用的 就是 Query、Key和Value三个矩阵
形象解释
想象一下相亲画面,我心中有个喜欢女孩的样子,我按照心目中的形象浏览各个女孩的照片,如果女生的样貌符合我心中的样子,我会注意到这个人,并安排稍微长一点的时间阅读她的资料,反之我就会安排少一点时间。
这样我就能将“注意力”放在满足条件的候选人身上了。
我心中女神的样子就是Query,我拿着Query去和所有的候选人(key)做对比,得到一个要注意力(attention),根据这个注意力大小判断我要花多久时间阅读候选人的材料(Value)。这个就是Transform的注意力方式。
注意力模型分类
按注意力的可微性,可分为:
- Hard-Attention,就是0/1问题,某个区域要么被关注,要么不关注,这是一个不可微的注意力;
- Soft-Attention,[0,1]间连续分布问题,用0到1的不同分值表示每个区域被关注的程度高低,这是一个可微的注意力。
按注意力的关注域,可分为:
- 空间域(spatial domain)
- 通道域(channel domain)
- 层域(layer domain)
- 混合域(mixed domain)
- 时间域(time domain)
还有 self-attention 机制,多头注意力等等,后面再讲吧
涨见识
上图为Google于2016年部署到线上的基于神经网络的机器翻译系统,相对传统模型翻译效果有大幅提升,翻译错误率降低了60%,
其架构就是上文所述的加上Attention机制的Encoder-Decoder框架,主要区别无非是其Encoder和Decoder使用了8层叠加的LSTM模型
好图收集
参考资料:
https://blog.csdn.net/xiaobian_/article/details/108672303 神经网络注意力机制 入门级,简单易懂
https://zhuanlan.zhihu.com/p/37601161 深度学习中的注意力机制(2017版)
https://my.oschina.net/u/876354/blog/3061863 大话注意力机制(Attention Mechanism)
https://zhuanlan.zhihu.com/p/66076731 神经网络中的注意力机制
https://blog.csdn.net/hei653779919/article/details/103360587 图注意力机制神经网络基本原理和代码解读
https://www.cnblogs.com/databingo/p/9769928.html 神经网络中注意力机制概述
https://zhuanlan.zhihu.com/p/135970560 全面解析RNN,LSTM,Seq2Seq,Attention注意力机制
https://www.jiqizhixin.com/articles/100902 什么是自注意力机制
https://www.zhihu.com/question/395862913 神经网络中的注意力机制该如何训练呢?