携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情
注意力机制
什么是注意力机制
当我们遇到如下照片,并且提出一个 question,我们就会格外的关注照片中人的动作和手里拿的东西,这就是人类注意力,人类注意力机制能否运用到深度学习呢?让深度学习获取重点专注的区域,花费更多的注意力资源,去进行分析,减少对其他无用信息的资源消耗,极大地提高了视觉信息处理的效率与准确性。
神经网络中的注意力机制(Attention Mechanism)是在计算能力有限的情况下,将计算资源分配给更重要的任务,同时解决信息超载问题的一种资源分配方案。
在神经网络学习中,一般而言模型的参数越多则模型的表达能力越强,模型所存储的信息量也越大,但这会带来信息过载的问题。那么通过引入注意力机制,在众多的输入信息中聚焦于对当前任务更为关键的信息,降低对其他信息的关注度,甚至过滤掉无关信息,就可以解决信息过载问题,并提高任务处理的效率和准确性。
原理
我们已经介绍过 Encoder-Decoder,具体部分可以看看。
强调点:
- 不论输入和输出的长度是多少,中间的 
语义编码C长度都是固定的。 - 可以选择不同的编码器和解码器。
 
语义编码 C 是由句子的每个单词经过 Encoder 编码产生的,不论是生成哪个单词,其实句子 Source 中任意单词对生成某个目标单词来说影响力都是相同的,这是为何说这个模型没有体现出注意力的缘由。这类似于人类看到眼前的画面,但是眼中却没有注意焦点一样。
当引入 Attention 模型,做机器翻译时候,在翻译生成某一个单词,原先都是相同的中间语义表示 C 会被替换成根据当前生成单词而不断变化的 Ci ,如下图,每次生成一个单词时候,对目标句子每一个输入单词有着不同的影响程度,范围 [0,1]。
生成目标句子单词的过程:
我们再进行细分,其实它分为三个步骤:
第一步:信息输入: 作为输入信息,可以指 Encoder 输出的信息。
第二步:注意力计算: 指 要翻译的某个单词,每一个单词的输出注意力影响都是不同的,有着不同注意力分布情况,利用 softmax 函数作为激活函数,就可以得到输入的注意力分布情况。
其中 代表输入信息的注意力分布, 代表注意力打分机制,也有着不同的打分机制:
第三步:信息加权平均:将每个部分注意力影响加权平均,就可以得出不同的语义编码 C。
Attention 计算过程动态图:
Attention 框架
Attention 框架结构图如下:
Source 中的元素想像成一系列的 <Key,Value> 数据对,对于指定目标某个元素作为 Query,通过计算 Query 和各个元素注意力,得到每个 key 的权重系数 Value,对 Value进行加权求和,得到最终的 Attention 值。
参考: