关于Attention机制

语音识别这块目前常见的端到端的方法除了CTC之外,就是attention(注意力)机制了。attention不同于CTC有着比较明确的数学定义和模式,它描述的应该是心理学现象中人注意力的某个特性,比如人的视觉上的注意力短期内只能集中在某一个区域中,而没有涵盖全部的视野范围。具体到语音识别任务(相比于图像和机器翻译领域,应用的算是比较晚的了)上,从字面意思看不出应该如何使用它。不过目前常见的使用方式和机器翻译类似,还是在encoder-decoder框架中使用。这种结合的思想是,定义一种描述注意力的方式,使得decoder可以尽量关注“有用”部分的信息,而不是全部的编码信息或者历史信息。

RNN Encoder-Decoder

许多机器学习任务都可以看成是一种不等长序列之间的转换任务,比如机器翻译(句子到句子),语音识别(特征序列到句子)等等。编码解码框架是一种解决变长序列映射问题的思路。核心思想是将待转换序列编码成一个特征向量,再通过解码将其转换成目标序列。

许多论文在介绍RNN-Encoder-Decoder的时候都是直接给出公式,没有过多的介绍,后来意外的在找GRU的原始论文的时候,发现GRU是Cho在提出RNN-Encoder-Decoder的时候,顺带对LSTM做的一个改动,鉴于论文一开始提到了

In this paper, we propose a novel neural network model called RNN Encoder-Decoder that consists of two recurrent neural networks (RNN).

我这里将其视为RNN-Encoder-Decoder的原始论文,其中第二部分详细介绍了Cho提出的所谓编码解码框架。

定义RNN的隐层状态为$\mathbf{h}$,输入序列$\mathbf{x} = \{x_1, x_2, \cdots, x_T\}$,对于普通的RNN,在$t$时刻,$\mathbf{h}$的更新由下式产生:

由于RNN对过去信息具有一定的记忆功能,在$t$时刻网络的输出可以视为其在历史信息下的条件概率,即$p(x_t | x_1, x_2, \cdots, x_{t - 1})$。累计每个时刻下的条件概率可以得到序列$\mathbf{x}$出现的概率:

所谓的编解码方案是通过两个RNN网络,学习概率$p(\mathbf{y}|\mathbf{x})$($\mathbf{x},\mathbf{y}$不等长)的分布,其中一个(编码器)学习将变长序列表示成定长序列,另一个(解码器)学习将此定长序列生成边长序列。

两者协调工作如下:编码器读入序列$\mathbf{x}$,处理完之后,隐层状态视为$\mathbf{c}$,解码器和编码器不同,解码器的隐层状态和预测输出均依赖于$\mathbf{c}$和前一时刻预测的输出$y_{t-1}$,表示如下:

从这里可以看出,$\mathbf{c}$在解码器中是一成不变的,变化的只是$\mathbf{h}_t$和$y_t$,那么attention机制常见的应用点就集中在$\mathbf{c}$上。注意$\mathbf{h}_t$和$y_t$的生成顺序。

Attention机制

以上描述的encoder-decoder在后续论文中基本都会提到,大部分情况下讲attention都会提到机器翻译领域的一篇文章(Neural Machine Translation by Jointly Learning to Align and Translate),包括那张经典的配图,如下

图中的解码器的$s$和上一部分解码器中定义的$\mathbf{h}$相同。在不引入attention机制的情况下,$s$和$y$的更新如下($\to$表示更新):

引入attention之后,修正每一次的$c$为$c_t$,得到

这篇论文中用图中$\oplus$节点表示$c_t$,计算流程如下:

$a$这里是一个对齐模型(align model),其中$a_{tt’}$($a_{tt’}$和$e_{tt’}$的意义一样)表示在时刻$t$,解码器中隐层状态$h_{t’}$对上一时刻预测输出$y_{t - 1}$的重要程度,越重要在$c_t$中占比越大。训练阶段,$a$需要和编解码器一块训练,在这篇论文中,$a$使用的是一个一层的前向网络。

attention在语音识别中的应用

Cho在“Attention-Based Models for Speech Recognition”中提出了一种ARSG(attention-based recurrent sequence generator)的结构来生成序列。文中给出的计算示意图如下:

论文中将$c_t$重新称为glimpse,即$g_t$,定义的计算流程如图,貌似这里$y_t$和$s_t$的生成顺序变化了。

论文“End-to-End Attention-based Large Vocabulary Speech Recognition”也是在ARSG上做的改进,文中解释attention配图如下,基本和NMT那篇的逻辑一致。

以上是对attention的一个大致学习,后续待补……