概括地说,在神经网络实现预测任务时,引入Attention(注意力)机制能使训练重点集中在输入数据的相关部分,而不是无关部分。
比如说,你将很长的一句话人工从一种语言翻译到另一种语言,在任何时候,你最关注的都是当时正在翻译的词或短语,与它在句子中的位置无关。在神经网络中引入注意力机制,就让它也学会了人类这种做法。
在Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征c再解码,如下图:
c中必须包含原始序列中的所有信息。如机器翻译问题,当要翻译的句子较长时,一个c可能存不下那么多信息,就会造成翻译精度的下降。
Attention机制通过在每个时间输入不同的c来解决这个问题,下图是带有Attention机制的Decoder:
以机器翻译为例:
输入的序列是“我爱中国”,因此,Encoder中的h1、h2、h3、h4就可以分别看做是“我”、“爱”、“中”、“国”所代表的信息。在翻译成英语时,第一个上下文c1应该和“我”这个字最相关,因此对应的a11就比较大,而相应的a12、a13、a14就比较小。c2应该和“爱”最相关,因此对应的a22就比较大。最后的c3和h3、h4最相关,因此a33、a34 的值就比较大。
这些权重aij怎么来的?
aij是从模型中学出的,它和Encoder第i个阶段的隐状态、Decoder的第j-1阶段的隐状态有关。
同样还是拿上面的机器翻译举例,a1j的计算:
a2j的计算:
A3j的计算: