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’$ 时刻输出的两个激活值 $\overrightarrow{a}^{\lt t’ \gt}$ 和 $\overleftarrow{a}^{\lt t’ \gt}$,为了方便书写,使用 $a^{\lt t’ \gt}$ 表示这两个激活值,即:
\begin{equation}
a^{\lt t’ \gt} = (\overrightarrow{a}^{\lt t’ \gt}, \overleftarrow{a}^{\lt t’ \gt}) \tag{1}
\end{equation}
使用 $\alpha^{\lt t, t’\gt}$ 表示在计算英文翻译的第 $t$ 个词 $\hat{y}^{\lt t \gt}$ 时,对 $a^{\lt t’ \gt}$ 的关注(Attention)程度,称为 Attention 权重。如图 2 中 $\alpha^{\lt 1, t’\gt}$,表示在生成英语翻译的第 1 个词时,对法语句子中第 $t’$ 个词的关注(Attention)程度。这些 Attention 参数都大于 0。
在输出英语翻译的第 1 个词时,使用的上下文 $c^{\lt 1 \gt}$ 为各 $a^{\lt t’ \gt}$ 与对应 Attention 权重的加权平均值:
\begin{equation}
c^{\lt 1 \gt} = \sum_{t’}\alpha^{\lt 1, t’\gt}a^{\lt t’ \gt} \tag{2}
\end{equation}
在另一个 RNN 中,使用初始激活值 $s^{\lt 0 \gt}$、上下文 $c^{\lt 1 \gt}$ 作为输入,可以得到 $t = 1$ 时刻的激活值 $s^{\lt 1 \gt}$,进而得到 $t = 1$ 时刻的网络输出,即英文翻译的第 1 个词 $\hat{y}^{\lt 1 \gt}$。
类似地,Attention 模型计算英文翻译第 2 个词的计算过程如图 3 所示。
此时使用一组新的 Attention 权重 $\alpha^{\lt 2, t’\gt}$ 得到英文翻译第 2 个词的上下文 $c^{\lt 2 \gt}$:
\begin{equation}
c^{\lt 2 \gt} = \sum_{t’}\alpha^{\lt 2, t’\gt}a^{\lt t’ \gt} \tag{3}
\end{equation}
以此类推,就可以得到完整的英文翻译。输出英文翻译的网络就像一个普通的 RNN 网络,它在计算英文翻译中的每个词时,使用的上下文 $c^{\lt t \gt}$ 都由法语文本的激活值 $a^{\lt t’ \gt}$ 与 Attention 权重参数加权平均得到。通过 Attention 权重参数,英文翻译的每个词可以只与有限个法语文本的词相关,而不必记忆完整的法语文本输入。这一点与人类翻译的过程类似,人类在翻译很长的句子时,并不会一口气记住整个句子的内容再翻译,而是会先读一部分内容,进行翻译后,再读下面一部分内容,逐步地完成整句话的翻译。
$\alpha^{\lt t, t’\gt}$ 的计算方法为:
\begin{equation}
\alpha^{\lt t, t’\gt} = \frac{exp(e^{\lt t, t’\gt})}{\sum_{t’=1}^{T_x}exp(e^{\lt t, t’\gt})} \tag{4}
\end{equation}
式 (4) 相当于计算 $e^{\lt t, t’\gt}$ 的 Softmax,由此得到的 $\alpha^{\lt 1, t’\gt}$ 满足:
\begin{equation}
\sum_{t’}\alpha^{\lt 1, t’\gt} = 1 \tag{5}
\end{equation}
关于式 (4) 中 $e^{\lt t, t’\gt}$ 的计算,可以使用一个如图 4 所示的简单的神经网络来计算。
$e^{\lt t, t’\gt}$ 主要和输出翻译的 RNN 在 $t – 1$ 时刻的状态 $s^{\lt t \gt}$ 以及输入文本的 RNN 在 $t’$ 时刻的激活值 $a^{\lt t’ \gt}$ 有关,图 4 所示的网络就是用来学习 $s^{\lt t \gt}$ 和 $a^{\lt t’ \gt}$ 与 $e^{\lt t, t’\gt}$ 之间的关系的,进而由式 (4) 得到的 $\alpha^{\lt t, t’\gt}$ 可以告诉网络在计算英文翻译的第 $t$ 个词 $y^{\lt t \gt}$ 时,对法语输入第 $t’$ 个词的激活值 $a^{\lt t’ \gt}$ 的关注程度。
以上 Attention 模型的一个缺点是具有平方的时间复杂度,假设输入文本的长度为 $T_x$,输出文本的长度为 $T_y$,则计算时间为 $O(T_xT_y)$。但是实际中使用的句子通常并没有长到让计算时间无法接受的程度,也有一些研究致力于减少计算时间。
Attention 模型也可以用于图像标注问题,详情可以参考 Show, Attend and Tell: Neural Image Caption Generation with Visual Attention 一文。