Attention
Encoder-Decoder模型
enco-deco模型是seq2seq任务的一种实现方式,比如在英翻中任务中,encoder模块用来编码一句英文句子,在最后一个时刻用一个context-vector存储整句话的信息。
在decoder部分,通过context-vector解码出每个时刻对应的中文单词。
因为这一结构,encoder-decoder有一些固有的弊端:
1: context-vector可能不能覆盖输入句子的所有信息,先输入的信息会被后输入的信息覆盖。
2: 在decoder中,解码每个时刻的单词应该是对encoder每个时刻的vector有不同权重,
比如翻译I have a pen -> 我有一只笔。实际上翻译 ‘笔’ 的时候自然的应该多关注pen,但是enco-deco结构中只能做到把I have a pen整句话压缩到一个vector中。不能做到对不同时刻有不同的关注度。
为解决上述问题,attention思想被提出。
attention机制本质上是,在计算decoder中的 t时刻的隐藏状态时(记为query), 对输入序列的信息做加权求和。
那权重是怎么计算的呢?t时刻的输入信息分成key 和value对,计算query和key的相似度, 这个相似度即为权重,再乘对应的value,就得到了解码器t时刻的隐藏状态对输入序列t时刻的注意程度。
A t t e n t i o n ( q u e r y , i n p u t ) = ∑ i = 1 L S i m i l a r i t y ( q u e r y , k e y i ) ∗ V a l u e i Attention(query, input) = \sum_{i=1}^{L}Similarity(query,key_{i}) *Value_{i} Attention(query,input)=∑i=1