自然语言处理-第十五期-Attention Mechanism(二)

背景

自然语言处理-第十五期-Attention Mechanism(二)

上一期有解释到Attention Mechanism的本质or解决的是什么问题。

简短的回顾下:

首先,在我的NLP系列第十三期提到的最基础Seq2Seq模型中,Encoder将原始文本“转化”为 一个hidden State,然后Decoder将此hidden state“解压”为目标文本;

但是,其问题是,对于较长的句子。仅仅由一个Hidden State,很难生成准确的目标语句;

面对此问题,Attention Mechanism的应对方法是将原始语句中,每个词的Hidden State都作为输入的一部分。并且找出需要重点关注的部分,即需要Attention的部分

但是上期也遗留来一个关键问题,那就是如何自动计算出哪一部分需要重点关注呢?

自然语言处理-第十五期-Attention Mechanism(二)

Attention Mechanism

上一期将Attention Mechanism 概念化成 Dynamic Memory Access(动态记忆获取), Word Alignment(软对齐)的方法。那么接下来将介绍具体如何实现的。

首先,与基础Seq2Seq模型不同的是 Attention Mechanism将Encoder(蓝色部分)的所有Hidden State 都引入到Decoder中来;

自然语言处理-第十五期-Attention Mechanism(二)

那么如下图,当我们需要翻译第二个单词时,我们所拥有的信息是什么呢:

  • 上一个红色部分传递过来的Hidden State, Ht-1
  • 所有蓝色部分的Hidden State
自然语言处理-第十五期-Attention Mechanism(二)

大家直观就能看出来,当我们翻译第二个单词时,重点需要放在“am”这个单词上。Attention Mechanism的思路也很直接,将 ht-1 分别与蓝色的每个Hidden State 打分(score)。我看到这里时,我有很多疑问。

这个Score 意味着什么? 它到底是对什么打分的呢? 接下来与大家分享下我的思考。

假设我们的例子是要将“I am a student” 翻译成“我是一个学生”

我们对什么打分Score?

  • 首先,要回答Score意味着什么,就要看Ht-1 和 Hs 分别是什么? Ht-1(上一个红色框传递来的Hidden State)。看到NLP-13期的朋友可能有印象。当传统Seq2Seq没有Attention Mechanism时,唯一的信息来源就是上一个框框传递来的Hidden State。所以,也可以理解为Ht-1 不仅限但包含了 此位子目标单词的内容。
  • Hs 分别代表着蓝色每个框框的Hidden State,即包含每个单词(含语境)的信息;
  • 总结下上述两点。Ht-1 包含了“是”这个目标单词的信息;而Hs包含了每个单词的信息,其中有一个单词是“am”

我们打分意味着什么?

知道了Ht-1 和 Hs的意义,那么回到我们的任务 我们需要翻译出“am”这个单词。我们除了拿到Ht-1之外,我们还希望能拿到 “am”对应的Hidden State;

所以打分的意义就是帮助我们找到想要的Hs

自然语言处理-第十五期-Attention Mechanism(二)

Normalization

当我们遵循上图的步骤计算出每个蓝色Hidden State 的Score之后,如下图。

自然语言处理-第十五期-Attention Mechanism(二)

接下来就是将其转化为出现的概率。类似与Softmax的处理。最终如下图2,形成一个按照权重综合的向量。此向量导入到我们的Decoder中去。

自然语言处理-第十五期-Attention Mechanism(二)

自然语言处理-第十五期-Attention Mechanism(二)

总结下

Attention Mechansim的思路是,将Ht-1 与 Enocder中每个Hidden State 打分。然后基于打分的权重制作一个新的Vector。并且将此Vector传递到Deocder中去。那么此时Decoder不但拥有了上一个Sequence传递过来的Hidden State(Ht-1)还拥有了“对应”单词的Hidden State。

这也就达到了我们的目标:在NLP-13期提到了 普通的Seq2Seq仅仅依据一个浓缩整个句子的Hidden State很难“转化”成一个较长的句子。那么,Attention Mechanism 所做到的是,不仅有代表整个句子的Hidden State,还有对应单词的Hidden State。 那么使得翻译更长的句子成为可能。下图是来自于公开课的截图,大家能看到当句子长度增加时,红色部分表现下降明显。而Attention 表现很稳定。

自然语言处理-第十五期-Attention Mechanism(二)

Attention Mechanism Function

上面阐述了Attention Mechanism的思路,但是其中有一个比较重要的点单独拿出来讲。上面讲到了Score,也讲到了Score的意义。但是如何计算Score,公式有哪些呢? 接下来我也与大家分享下我的理解。

我的理解,这个Score类似于“相关性”计算。 这个相关性代表着 “am” 这个单词的Hidden State 与 Ht-1的相关性。

我们可以换个角度理解此相关性。Encoder-Decoder 其实是一个压缩与解压的过程。 假设我们是将“one two three" 翻译成 “一 二 三”。那么Encoder 按照顺序压缩“one two three”最终形成一个Hidden State;然后Decoder 输入Hidden State, 分别解压出“一 二 三”。

并且,解压“一 二 三”的过程并不是同步的,而是一个Hidden State传递的过程。 那么当我们翻译“二”时,我们除了从“一”收到一个Ht-1,我们还应该收到“two”的Hidden State。那么这个Score的相关性,也可以理解成 “压缩中的位子” 与 “解压的位子”的 对齐。

至于具体的公式,有以下几种。其中第一种,就是相乘。两个向量相乘,值越大,某种程度上代表着相关性越高。

自然语言处理-第十五期-Attention Mechanism(二)

其他疑问

有一个问题,我也想了蛮久。转了下牛角尖。可能大家也会遇到,与大家分享下。

我的疑问是,既然是打分。不论是上述三个公式的哪一个。每个Encoder的Hidden State都能计算出一个分数。 如何保证,当我翻译“二”的时候,我能拿到“two”的Hidden State呢? 万一拿到“one”的Hidden State也非常可能的啊。

换句话说,我的疑问是,虽然Attention 给出了方法,但是怎么保证真的能给出“two”的Hidden State呢?

话说这个问题我琢磨了很久。我之前又想歪了。

首先,我们讨论的是机器学习的问题。那么自然会有一个学习的过程;

其次,当Attention 给错Hidden State时,那么最终结果的loss function会比较大。那么还需要通过Gradient Descent降低loss;

然后,Score 是由两个Hidden State 相乘,所以换句话说,Score也是由RNN神经网络中的参数影响的。那么意味着,当Hidde State值变化时,Score也会变化;

然后,神经网络的训练,自然会改变RNN的参数,也自然会改变Score,经过训练下降Loss,也代表着Score越来越准确;

最后,按照神经网络的思路的理解,Score的出现,相当于给了神经网络多一个参数,或者说优化的目标。 训练的过程就是让Score准确的过程。

所以,不应该理解成,Attention 怎么就能够保证 我们能拿到想要的Hidden State。而应该理解成,有了Attention,相当于给了神经网络找到正确Hidden State 一个奖励或者找到错误Hidden State一个处罚。那么,意味着经过训练,Score 会越来越准确。

总结与下期预告

本期与大家分享了Attention Mechanism 是如何做到将注意力放到正确的地方。当我翻译“二”的时候,我会取到“two”的hidden state。

其实Attention 的思路很直接,就是将每个Encoder中的Hidden State 与Ht-1 打分。然后基于打分权重将其引入到Decoder中来。 那么理想的效果是,当我需要翻译“二”时,我不仅拥有了之前代表这个Encoder 的Hidden State,也拥有了对应“two”的Hidden State。那么翻译的效率自然会得到提高。

最后,之前感觉Attention Mechanism蛮难的。 但是,实际上还是可以通俗的理解的。并且我看到的代码也不难,因为有很多大神的各种lib。哈哈

下一期,会给大家带来Beam Search。

Beam Search+Attention+Seq2Seq 基本上就是Google牛逼的神经网络翻译NMT的雏形了。有点小激动的说。。。


分享到:


相關文章: