28

【CS230-DL】15 序列模型和注意力机制

 4 years ago
source link: https://www.tuicool.com/articles/E7Jfuua
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

主课的最后一讲,我们来看看非常出名的 Seq2Seq 模型和注意力机制,这些都是 RNN 得以在机器翻译、语音识别、自然语言处理领域大放异彩的重要原因。

更新历史

  • 2019.10.25: 完成初稿

Seq2Seq 结构

因为 Sequence to sequence 实在不太好翻译,后面统一叫 seq2seq。我们先来看如下场景:我想要把一个法语句子(Jane visite I’Afrique en Septembre)翻译成一个英语句子(Jane is visiting Africa in September),我们用 $x^{ }$ 表示输入句子的单词,$y^{ }$ 表示输出句子的单词,要如何训练出一个神经网络来通过 x 得到 y 呢?就可以用 seq2seq 模型,如下图所示:

36J3EfB.jpg!web

编号 1 的网络叫做编码网络(encoder network),是一个 RNN 结构(单元可以是 GRU 或 LSTM),每次只向该网络中输入一个法语单词,全部输入后,网络会输出一个向量 A 来代表这个输入序列(可以理解为对这句话做了 encoding)。然后我们再建立一个解码网络(decoder network),也就是编号 2 的部分,用前面编码网络输出的向量 A 作为输入,会解码出一个新的句子,这样就完成了翻译。

我们甚至可以输入一张图片,这样一来就变成了看图说话,如下图所示:

b6JnYz7.jpg!web

注:Image captioning 的模型称为 Image to Sequence,但思路是和 seq2seq 类似的。

选择最可能的句子 Pick the Most Likely Sentence

仔细观察 seq2seq 模型的后半部分,就会发现这和前面我们提到的语言模型很相似,都是一对多的模式。这里有一个差别在于 seq2seq 的 decoder 被称为条件语言模型(conditional language model),为什么说是条件,因为 seq2seq 的 decoder 的输出取决于输入,而不是像语言模型直接从 $a^{<0>}$ 开始,如下图所示(注意紫色网络与语言模型的输入的差别):

zi2yuiR.jpg!web

因为语言模型只是对应各个单词输出的概率,我们实际上是可以得到各种英文翻译所对应的可能性的,如下图:

jiqMBji.jpg!web

我们要找的就是在 x(法语)的前提下,找到使 P 最大的 y(英语)的句子,这就涉及到如何在一个概率搜索空间中进行检索的问题,一般采用集束搜索(Beam Search),这个我们后面再详细介绍。

说到搜索,为什么我们不能用最简单的贪心搜索?也就是每次都选择概率最大的词呢?简单来说就是每一步的最优并不能使得整句话最优,下面就是一个可能的反例:

UvUzy2M.jpg!web

比如我们要选择 is 后面的单词,因为 is going to 在英语中是更加常用的表达,going 的概率很可能比 visiting 要大,但是显然第一句翻译会比后面的更好。

所以,我们还是老老实实学习一下 Beam Search。

集束搜索 Beam Search

我们用一个实际的例子来看看 Beam Search 的工作原理,我们的词表如下图所示(绿色部分是 encoder,紫色部分是 decoder):

ZzU3qyv.jpg!web

我们想要找到输入 x 之后,第一个输出的 y,也就是 $y^{<1>}$ 是多少。和贪婪搜索只看概率最大的不同,Beam Search 会看多个选择,这个数量由 Beam Width 参数确定,这里我们设为 3,也就是一次会考虑 3 个选择。针对 $y^{<1>}$,我们选出最有可能的三个单词:in, jane, september(注意,这里的紫色箭头实际上是一个 softmax 层,会输出 10000 个概率值,我们选前 3 个存起来)。

3eqyErB.jpg!web

接着我们要选择第二个单词,从 in 开始,这里我们选择的并不是 in 后面最大概率的词,而是和 in 一起出现概率最大的词组。第一步有 3 个选择,第二步拼起来就有 3x10000 种选择,我们再挑出其中概率最大的三组(图上 456 标记出来的)。然后我们再看下一步:

zU73iiE.jpg!web

通过这样的方式,我们可以不断求出更长的条件概率,公式转化下就可以得到在 x 的条件下,使 y 条件最大的单词组合。

改进集束搜索 Refinements to Beam Search

上面提到的集束搜索,本质是最大化 $P(y^{<1>}…y^{}|X)$ 的概率,因为不容易直接求解,所以一般来说会转化成若干条件概率相乘:

一般来说这些概率值都远小于 1,一直乘下去的话,会造成数值下溢出(numerical underflow),所以实践中我们会对上面的公式取 log,变成求和来进行概率最大化。

另外,如果有一个很长的句子,那么在求和中会倾向于更短的翻译(因为多乘一个概率小于 1 的值,实际上很可能降低概率),所以我们可以改为求解每个单词的概率取对数的平均,就避免了对短句子的倾向,这就是长度归一化。

在实践中,相比于直接除以输出句子的单词总数 $T_y$,我们一般会在 $T_y$ 加上指数 a,比如 0.7(当 a 为 1 的时候相当于常规的长度归一化)。这里的 a 的值目前暂时没有理论验证,但是效果不错,所以也是一个需要调整的超参数。

集束搜索误差分析 Error Analysis in Beam Search

集束搜索是一种近似搜索算法,也被称为启发式搜索算法,问题在于,如果没搜索对,我们要如何判断是 RNN 模型的问题,还是集束搜索本身参数设置的问题呢?所以我们需要对集束搜索进行误差分析。

还是用 Jane visite I’Afrique en septembre 作为例子,人工翻译为 Jane visits Africa in September,我们记为 $y^ $;而假设 RNN 模型输出的结果是 Jane visited Africa last September,记为 $\hat{y}$。注意,RNN 实际上是一个编码器和解码器,计算的就是 $P(y|x)$,所以我们直接把人工的翻译放到解码器的部分,计算出 $P(y^ |x)$,然后再计算出 $P(\hat{y}|x)$,有了这两个值我们就可以比较了,如下图所示:

EnIF7zB.jpg!web

简单来说就是如果真实的翻译在网络中的概率比机翻的高,那么是集束搜索的锅,因为本来应该搜索到的,应对方法就是把 Beam Width 调大一些;反之,则是 RNN 模型的锅,因为模型对更好的句子的预估值反而低,应对方法就是看看模型本身有没有哪里可以改进。

另外一下,评价机器翻译有一个指标叫做 BLEU(bilingual evaluation understudy) 分数,详情这里不展开,但是分数越高,说明翻译得越好。

直观理解注意力模型 Attention Model Intuition

注意力模型现在已经是深度学习中最重要的思想之一,我们这一节会来简单了解下。

jaayIbB.jpg!web

先来看看机器翻译中一个很突出的问题:长句翻译。在我们的网络中,绿色的部分需要读入整个句子并记忆,然后传递给后面的紫色网络生成翻译。对比下人类如何进行翻译的,并不是一下看全部,而是一点一点往后翻译的。正因如此,我们可以看到在句子越来越长的时候,Bleu 得分会急剧下降。

而注意力模型可以看作是对人类翻译的模仿,能够让一个神经网络只注意到一部分的输入句子,从而更好地利用上下文进行翻译。

注意力模型 Attention Model

关于注意力模型的介绍,可以参考 这里 ,我个人感觉要比课程本身说明得更加清晰,这里就不再赘述。

课程的最后两部分是语音识别相关的,因为我做得比较少,这里就不再记录。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK