注意力机制近几年比较热,在图像识别、图像翻译、语音识别、文本摘要、机器翻译等各个领域都有应用,特别是 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  神经网络中的注意力机制该如何训练呢?