attention 的理解

2019-08-14  本文已影响0人  霍尔元件

深度学习中的attention机制

最近面试中被问到了自己论文中的attention机制,自己回到的不好,所以来补补课

首先attention可以分成5种 这个分法可能不一定准确 但是需要去理解其中每一种attention

自己论文中的方法 应该属于self attention 是不是cv中的attention都是这种的

这里有一份不错的attention总结

这个总结更加清晰

attention 的本质

先看一下attention的本质 因为我之前就对attention有一定的了解

这个图是基于transformer的论文提炼出来的

image

如何理解querykeyvalue这三个变量的命名?

因为Attention机制的实质其实就是一个寻址(addressing)的过程,利用query和keys找到query和source中的各个元素之间的概率分布,比如:一个onehot分布,也就是找到了source中对于query最重要的一个元素,这就是寻找到了最合适的元素的地址。

我的论文给attention的解释

利用attention得到不同窗长的融合特征 类似于self-attention
x_{att} = \sum_i softmax(score(x_i)) \times x_i
其实就是三步

这种attention类似于scse模块

image

论文原文

image

将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成,此时给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性(从机器翻译的任务上可以明显看出是在计算相似程度),得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式:Z_j 表示最后得到的特征向量
Z_j = Attention(query_j, source)= \sum_i softmax(score(query_j, key_i))*value_i

soft attention

可以用sequence to sequence的例子来说明 decoder的每一个元素跟encoder的每一个元素都有关 需要利用decoder的上一个时刻的query和encoder的所有元素计算出当前时刻decoder的元素跟encoder所有元素的概率分布(重要性分布)

核心公式

image

其中a_i表示encoder的第i个元素的特征向量,h_{t-1}等价于query,计算出系数e,经过softmax归一化到\alpha

最后计算内容向量z ,这里面计算系数需要学习一个映射f_{att} 通常使用全连接层实现

hard attention

顾名思义,hard attention 意思是decoder的一个元素只跟encoder中的一个元素有关系,相当于上面学到的e是一个onehot向量

上一篇 下一篇

猜你喜欢

热点阅读