注意力模型

为什么用注意力模型

翻译一段很长句子:

Keras is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, or Theano. It was developed with a focus on enabling fast experimentation. Being able to go from idea to result with the least possible delay is key to doing good research.

在注意力模型出现之前,会将这段话输入到下面的RNN网络中:

image

随后RNN会输出翻译后的结果:

Keras是一个高级神经网络API,用Python编写,能够在TensorFlow,CNTK或Theano之上运行。 它的开发重点是实现快速实验。 能够以最小的延迟从想法到结果是进行良好研究的关键。

在这个过程中,我们一次性将所有要翻译的话输入到模型中,模型一次性将结果返回给我们,当句子较短的时候这没问题,但是当句子非常长的时候,模型的准确率会明显下降,而且太长的输入,模型训练也是个问题.

类比人类的翻译过程,人类翻译也不是一下子翻译整段话的,而是一小段一小段的翻译.那么有没有一种算法也能一句一句翻译呢?基于这种思想诞生了注意力模型.

注意力模型

注意力模型的思想是当翻译到某处时也把注意力放到原文对应的地方,具体实现方法如图所示:

image

为了便于区分,将Endcoder的时序称为 t' ,Decoder的时序为 t .

Encoder采用的是双向RNN,Decoder时的输入 context^{<t>} 为所有 a^{<t'>} 的加权和.详细的生成方式见下图:

image

首先会把正反两向的 a^{ < t'> } 合并到一起称之 a^{ < t'> } .

接下来将Encoder中的 a^{ < t'> } 与Decoder中的 s^{<t-1>} 合并为:

\begin{bmatrix} s^{<t-1>}\\a^{ < t'> } \end{bmatrix}

接下来通过softmax计算出其与 y^{<t>} 的相关概率 \alpha^{ <t, t'> } ,接下来结合所有时序的 a^{ < t'> } .

\text { context } ^ { < t > } = \sum _ { t ^ { \prime } = 0 } ^ { T _ { x } } \alpha ^ { < t , t ^ { \prime } > } a ^ { < t ^ { \prime } > }

y^{<t>} 影响越大的 a^{ < t'> } ,占 \text { context } ^ { < t > } 的比重越大.翻译到某个词的时候对应原文的那个词权重最大.这就做到了将注意力放到重要位置的效果.


参考:
https://www.coursera.org/learn/nlp-sequence-models

posted @ 2018-11-30 11:30:57
评论加载中...
发表评论