关于attention机制的理解

369 阅读2分钟

目前主流的处理序列问题像机器翻译,文档摘要,对话系统,QA等都是encoder和decoder框架。
编码器:从单词序列到句子表示
解码器:从句子表示转化为单词序列分布

总结来说,注意力机制是我们能够从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。

Attention机制原理

对于一个Encoder-decoder模型,假设输入为 X=(x1,x2,...,xm){X=(x_1,x_2,...,x_m)},输出为Y=(y1,y2,...,ym){Y=(y_1,y_2,...,y_m)},如图1:

space-1.jpg
图1:简单的Encoder-decoder模型

C=f(x1,x2,...,xm){C=f(x_1,x_2,...,x_m)}
yi=g(C,y1,y2,...,yi1){y_i=g(C,y_1,y_2,...,y_{i-1})}

f是decoder的非线性变换函数。从这里可以看出,在生成目标句子的单词时,不论生成哪个单词,是 y1{y_1}, y2{y_2}也好,还是 y3{y_3}也好,他们使用的句子X的语义编码C都是一样的,没有任何区别。而语义编码C是由句子X的每个单词经过Encoder 编码产生的,这意味着不论是生成哪个单词,y1{y_1},y2{y_2}还是y3{y_3},其实句子X中任意单词对生成某个目标单词yi{y_i}来说影响力都是相同的,没有任何区别。事实上对于不同的decoder,其影响力也不尽相同,比如对于LSTM、RNN来说,序列中越靠后输入的内容对最终编码结果的影响越大。

在没有引入attention的模型中,如果输入的句子比较短,这时可能不会出现问题,而一旦输入较长的句子,此时所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,可想而知会丢失很多细节信息,这也是引入注意力模型的重要原因。

Attention机制可以帮助模型对输入的X每个部分赋予不同的权重,抽取出更加关键及重要的信息,使模型做出更加准确的判断,同时不会对模型的计算和存储带来更大的开销

参考

从自然语言处理说说Attention机制,作者:@一合