Deep Learning Note: 5-12 Attention 模型
前面介绍的机器翻译算法都使用了编码器-译码器的结构,通过编码器得到输入文本的一个编码,再通过译码器生成对应的翻译文本。这种结构对于较短的句子可以取得很高的 Bleu 分数,而在比较长的句子(如长度有三四十个单词的句子)上的性能则会下降,如图 1 所示,因为网络很难记忆这种很长的句子。
Neural Machine Translation by Jointly Learning to Align and Translate 一文提出的 Attention 模型有助于解决机器翻译在长句子上的性能问题。
举例来说,在从法语翻译为英语的任务中,对于句子:
Jane visite l’Afrique en septembre.
Attention 模型计算英文翻译第 1 个词的计算过程如图 2 所示。
图 2 中,将法语句子输入一个双向 RNN,该双向 RNN 在 t′ 时刻输出的两个激活值 →a<t′> 和 ←a<t′>,为了方便书写,使用 a<t′> 表示这两个激活值,即:
a<t′>=(→a<t′>,←a<t′>)
使用 α<t,t′> 表示在计算英文翻译的第 t 个词 ˆy<t> 时,对 a<t′> 的关注(Attention)程度,称为 Attention 权重。如图 2 中 α<1,t′>,表示在生成英语翻译的第 1 个词时,对法语句子中第 t′ 个词的关注(Attention)程度。这些 Attention 参数都大于 0。
在输出英语翻译的第 1 个词时,使用的上下文 c<1> 为各 a<t′> 与对应 Attention 权重的加权平均值:
c<1>=∑t′α<1,t′>a<t′>
在另一个 RNN 中,使用初始激活值 s<0>、上下文 c<1> 作为输入,可以得到 t=1 时刻的激活值 s<1>,进而得到 t=1 时刻的网络输出,即英文翻译的第 1 个词 ˆy<1>。
类似地,Attention 模型计算英文翻译第 2 个词的计算过程如图 3 所示。
此时使用一组新的 Attention 权重 α<2,t′> 得到英文翻译第 2 个词的上下文 c<2>:
c<2>=∑t′α<2,t′>a<t′>
以此类推,就可以得到完整的英文翻译。输出英文翻译的网络就像一个普通的 RNN 网络,它在计算英文翻译中的每个词时,使用的上下文 c<t> 都由法语文本的激活值 a<t′> 与 Attention 权重参数加权平均得到。通过 Attention 权重参数,英文翻译的每个词可以只与有限个法语文本的词相关,而不必记忆完整的法语文本输入。这一点与人类翻译的过程类似,人类在翻译很长的句子时,并不会一口气记住整个句子的内容再翻译,而是会先读一部分内容,进行翻译后,再读下面一部分内容,逐步地完成整句话的翻译。
α<t,t′> 的计算方法为:
α<t,t′>=exp(e<t,t′>)∑Txt′=1exp(e<t,t′>)
式 (4) 相当于计算 e<t,t′> 的 Softmax,由此得到的 α<1,t′> 满足:
∑t′α<1,t′>=1
关于式 (4) 中 e<t,t′> 的计算,可以使用一个如图 4 所示的简单的神经网络来计算。
e<t,t′> 主要和输出翻译的 RNN 在 t–1 时刻的状态 s<t> 以及输入文本的 RNN 在 t′ 时刻的激活值 a<t′> 有关,图 4 所示的网络就是用来学习 s<t> 和 a<t′> 与 e<t,t′> 之间的关系的,进而由式 (4) 得到的 α<t,t′> 可以告诉网络在计算英文翻译的第 t 个词 y<t> 时,对法语输入第 t′ 个词的激活值 a<t′> 的关注程度。
以上 Attention 模型的一个缺点是具有平方的时间复杂度,假设输入文本的长度为 Tx,输出文本的长度为 Ty,则计算时间为 O(TxTy)。但是实际中使用的句子通常并没有长到让计算时间无法接受的程度,也有一些研究致力于减少计算时间。
Attention 模型也可以用于图像标注问题,详情可以参考 Show, Attend and Tell: Neural Image Caption Generation with Visual Attention 一文。