Attention机制最早是在视觉图像领域提出来的,应该是在九几年思想就提出来了,但是真正火起来应该算是2014年 Google Mind团队的这篇论文《Recurrent Models of Visual Attention》,他们在RNN模型上使用了attention机制来进行图像分类。随后,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用类似attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是第一个将attention机制应用到NLP领域中。接着attention机制被广泛应用在基于RNN/CNN等神经网络模型的各种NLP任务中。2017年,google机器翻译团队发表的《Attention is all you need》中大量使用了自注意力(self-attention)机制来学习文本表示。自注意力机制也成为了大家近期的研究热点,并在各种NLP任务上进行探索。下图为attention研究进展的大概趋势。
加入attention之后对模型效果的提升还是很大的
attention是一种计算资源的再分配
attention机制其实只是一个框架,它不是一个具体的网络架构。有很多paper的工作都运用了attention机制,但它们的网络构型是完全不同的。也就是说attention非常的灵活
Attention
attention一般都是基于encoder-decoder结构(或者说是seq2seq)之上的
使用了attention之后的encoder-decoder结构变成了这样
即aij是由eij的来的
eij是相关性分数,计算eij的方法在不同的attention模型中是不同的,选择是多种多样的
eij的作用是关联i时刻之前decoder的隐藏输入(s_i-1)和第j个encoder的隐藏输出(hj)
注意eij本身也是通过神经网络去训练的
eij再通过一个softmax就得到了aij
attention最重要的是求α
计算score的几种不同的方法
eij就是score
刚才用的就是concat方法
ht是decoder的隐藏输出
hs是encoder的隐藏输出
Attention中的Q,K,V
在普适的注意力机制模型里面主要有三个元素query, keys, values
query是询问,key是对信息的编码,value就是编码前的本身的值
而attention机制主要是在根据k和q的相关性,过滤掉那些不太相关的key
Attention用在Sequence-to-sequence,有两个序列。对左边的序列做线性变换,得到key和value。对右边的序列做线性变换,得到query。
query的意思是“去匹配key”。
key的意思是“被query匹配”。
用query和key共同计算权重α。
用权重α对value做加权平均,得到context vector c。
query vector is fed into the attention module to estimate glimpse vector
glimpse vector
比如在翻译s的时候,在系数α的作用下,只能看到s附近的feature sequence,其余地方都是0
那么这个glimpse也就是s了
给定一组向量集合values,以及一个向量query,attention机制是一种根据该query计算values的加权求和的机制。
有时候也把这种attention的机制叫做query的输出关注了(或者说叫考虑到了)原文的不同部分。(Query attends to the values)
Pytorch之经典神经网络Attention(一) —— Attention()
最新推荐文章于 2024-08-15 14:15:00 发布