经典论文阅读-14:Speech Recognition with Deep RNN

409 阅读9分钟

用深度循环神经网络做语音识别

论文地址:[PDF] Speech recognition with deep recurrent neural networks | Semantic Scholar

摘要

Recurrent Neural Network RNNs 是处理序列数据的强大模型。端到端训练模型,如 Connectionist Temporal Classification CTC,使在输入输出对齐未知的情况下基于序列标签数据训练 RNNs 有了可能。这些方法的组合 Long Short Term Memory LSTM 架构已被证明卓有成效,在解决手写识别问题上得到最先进的效果。然而,目前 RNN 在语音识别任务上的性能,与深度前向网络相比,还不尽人意。本文提出深度 RNN ,组合 RNN 中可灵活使用长范围上下文的各级表示。当基于合适正则化训练端到端模型时,我们发现深度 LSTM 在 TIMIT 音素识别基准测试集上的误差有 17.7%,该成绩据我们所知是目前最佳的。

简介

在语音识别中使用神经网络已有很长的历史,通常与隐马尔可夫 Hidden Markov Models HMM 结合使用。这几年由于深度前向网络在原声建模方面的重大提升,用神经网络处理语音识别又重新引起了人们的研究。考虑到对话本质上是动态过程,自然想到用 RNN 来建模。HMM-RNN 系统最佳也重新兴起,但其效果不如深度网络。

不用组合 RNNs 与 HMMs,也可训练 RNNs 端到端语音识别模型。这些方法与 HMMs 相比,利用更大的状态空间,更丰富的 RNNs 动态性,避免使用潜在的不正确对齐作为训练目标的问题。组合 LSTM 来训练端到端模型已被证实在手写识别问题上尤其有效。然而其在语音识别方面的影响目前还很小。

RNNs 天生具有时间深度,其隐藏层状态是所有隐藏层状态的函数。启发本文的问题是,通过堆叠多个循环隐藏层,就像在卷积神经网络中堆叠多个前向卷积层,RNNs 能否从空间深度中获益?为了回答该问题,我们引入深度 LSTM RNNs,然后评估其语音识别潜力。我们也展示一种最近提出的端到端学习模型的强化版本,其同时训练两个 RNNs ,分别建模原声与语素。

第 2、3 节介绍模型架构与训练方法,第 4 节提供实验结果,第 5 节总结。

循环神经网络

给定输入序列 x=(x1,...,xT)x=(x_1,...,x_T) ,标准 RNN 从按照 t 从 1 到 N 的顺序迭代计算隐藏向量序列 h=(h1,...,hT)h=(h_1,...,h_T) 和输出向量序列 y=(y1,...,yT)y=(y_1,...,y_T)

ht=H(Wxhxt+Whhht1+bh)yt=Whyht+byh_t=H(W_{xh}x_t+W_{hh}h_{t-1}+b_h)\\ y_t=W_{hy}h_t+b_y

其中 W 表示权重矩阵,b 表示其偏置向量,H 表示隐藏层函数。

pic1.png

H 通常是元素级 sigmoid 函数。然而我们发现 LSTM 架构,通过特殊记忆单元存储信息,共容易发现与利用长距离上下文。对于本文使用的 LSTM 版本,H 为以下函数的组合。

it=σ(Wxixt+Whiht1+Wcict1+bi)ft=σ(Wxfxt+Wfiht1+Wcfct1+bf)ct=ftct1+ittanh(Wxcxt+Whcht1+bc)ot=σ(Wxoxt+Whoht1+Wcoct+bo)ht=ottanh(ct)i_t=\sigma(W_{xi}x_t+W_{hi}h_{t-1}+W_{ci}c_{t-1}+b_i)\\ f_t=\sigma(W_{xf}x_t+W_{fi}h_{t-1}+W_{cf}c_{t-1}+b_f)\\ c_t=f_tc_{t-1}+i_ttanh(W_{xc}x_t+W_{hc}h_{t-1}+b_c)\\ o_t=\sigma(W_{xo}x_t+W_{ho}h_{t-1}+W_{co}c_t+b_o)\\ h_t=o_ttanh(c_t)

其中 σ\sigma 是逻辑 sigmoid 函数,i,f,o,ci,f,o,c 分别是输入门、遗忘门、输出门、记忆单元激活向量,它们的规模与隐藏向量 h 相同。从记忆单元到门向量的权重矩阵是对角的,因此门向量的第 m 个元素只接受记忆单元第 m 个元素的输入。

传统 RNNs 的一个缺点是它只能使用之前上下文。在语音识别中,整个话语被一次性转录,没有理由不使用未来上下文。双向 RNN BRNNs 通过两个隐藏层分布处理两个方向的数据上下文实现上述目标,这两个隐藏层信息同时参与构建输出向量。

pic2.png

如图所示,BRNNs 按时间 t 从 0 到 T 的顺序迭代计算前向隐藏层 h\overrightarrow h ,按时间 t 从 T 到 0 的顺序计算后向隐藏层 h\overleftarrow h ,然后更新输出层 y。

pic3.png

使用 LSTM 组合 BRNN 得到 BiLSTM,可处理输入数据两个方向的长距离依赖。

最近成功的混合 HMM 系统的关键要素是使用了深度结构,能够逐渐构建输入数据的更高层级表示。深度 RNN 可通过堆叠多个 RNN 隐藏层构建,每一层的输出序列作为下一层的输入序列。假设所有 N 层使用同样的隐藏层函数,隐藏层向量序列 hnh^n 可迭代地从 t = 1 到 T 与 n = 1 到 N 计算得到。

htn=H(Whn1hnhtn1+Whnhnht1n+bnn)h_t^n=H(W_{h^{n-1}h^n}h_t^{n-1}+W_{h^nh^n}h_{t-1}^n+b_n^n)

其中 h0=xh^0=x ,输出 yt=WhNyhtN+byy_t=W_{h^Ny}h_t^N+b_y

深度双向 RNNs 可通过使用前向后向隐藏层 h,h\overrightarrow h,\overleftarrow h 替换隐藏层 h 实现,确保每个隐藏层接收下层前向与后向隐藏层的输入。如果使用 LSTM 做隐藏层,我们得到深度 BiLSTM 模型,即本文主要使用的架构。目前为止,我们注意到这是深度 BiLSTM 第一次用于语音识别,发现与单层 LSTM 相比,其效果提升了相当多。

网络训练

我们集中于端到端训练,RNN 直接学习原声到音素序列的映射关系。这种方法的一个优点是不需要创建训练目标的与定义对齐。第一步是使用网络的输出来参数化差距分布 Pr(yx)Pr(y|x) 表示输入原声序列 x 得到可能的音素序列 y 的概率。然后使用目标输出 logPr(zx)logPr(z|x) 来优化模型参数。整个系统可用基于随机梯度下降的反向传播方法优化。接下来介绍两种方法定义输出分布并训练网络。我们指 x 的长度为 T,z 的长度为 U,所有可能音素数量为 K。

Connectionist Temporal Classification

第一种方法为联结主义时序分类 Connectionist Temporal Classification CTC,使用 softmax 层定义输出分布 Pr(kt)Pr(k|t) ,表示每个时间步 t 上输出因素 k 的概率。该分布覆盖 K 个因素和一个空符号表示无输出,共 K+1 个输出类型。直观地讲,该网络在每个时间步上决定是否输出某个标签或不输出标签。将所有标签组合起来构成输入数据的标签对齐序列分布。CTC 使用前向算法求和所有可能的对其序列概率,然后基于给定输入序列的目标序列计算归一化概率 Pr(zx)Pr(z|x) 。相似的处理过程用于语音或手写识别,聚合所有可能的数据分段。然而 CTC 忽视分段整体结构,只聚合单时间步标签。

训练带 CTC 的 RNNs 通常是双向的,确保每个 Pr(kt)Pr(k|t) 依赖整个输入序列,而不只是先于 t 的部分序列。本文关注深度双向网络,其概率 Pr(kt)Pr(k|t) 定义为。

Pr(kt)=exp(yt[k])k=1Kexp(yt[k])Pr(k|t)=\frac{\exp(y_t[k])}{\sum_{k'=1}^K\exp(y_t[k'])}

其中 yt[k]y_t[k] 是未归一化的输出向量的第 k 个元素,输出向量长度为 K+1。

RNN 传感器

CTC 定义了音素序列的分布,仅依赖输入原声序列 x,因此仅是原声模型。最近有种增强模型为 RNN 传感器,组合类似 CTC 网络和一个分离的 RNN ,用于给定之前位置的音素预测当前位置音素,因此可联合训练原声与语言模型。联合 LM 原声训练在过去的语音识别任务中已证明其有益性能。

由于 CTC 在每个输入时间步上决定一个输出分布,RNN 传感器对每个输入时间步 t 和输出时间步 u 的组合决定一个分离分布 Pr(kt,u)Pr(k|t,u) 。像 CTC 一样,每个分布覆盖 K 个音素和一个空元素。直观地讲,模型决策其最终输出时,依赖输入序列和意见获得的输出序列。对于长度 U 的目标序列 z,完全集 TU 一起决定所有 x 与 z 的对齐分布,然后可用一种正反向算法决定 logPr(z|x)。

原始公式 Pr(kt,u)Pr(k|t,u) 的值来自 CTC 网络的原声概率 Pr(kt)Pr(k|t) 与预测网络的语言概率 Pr(ku)Pr(k|u) 的乘积,并归一化。本文介绍的一种提升思路是,将两个网络的隐藏激活向量输入给分离的前向输出网络,该网络输出用 softmax 函数归一化后得到 Pr(kt,u)Pr(k|t,u) 。这种方法组合语言和音素信息,带来更丰富的可能性集合,通常具有更强的泛化性。实际上,我们发现解码时遇到的删除误差数量减少了。

使用 hN,hN\overrightarrow h^N,\overleftarrow h^N 表示 CTC 网络最上层的前向、反向隐藏序列,使用 p 表示预测网络隐藏序列。对于每个 t 和 u,输出网络将 hN,hN\overrightarrow h^N,\overleftarrow h^N 喂给线性层生成向量 ltl_t ,然后将 lt,pul_t,p_u 喂给 tanh 隐藏层生成 ht,uh_{t,u},最后将其输入给 softmax 层得到概率 Pr(kt,u)Pr(k|t,u)

pic4.png

RNN 传感器可用随机初始化的权重训练。然而,其效果在使用 CTC 网络和预测网络的预训练权重时往往更好。网络在预训练时使用的输出层,在训练时被移除。本文在音频训练数据的音素音标上预训练预测网络,而在大规模数据应用上,直接在文本预料上预训练更有意义。

解码

RNN 传感器可用束搜索 Beam Search 来解码,产生 n 个最优的候选音标列表。在过去 CTC 的解码方式有:通过前缀搜索 Prefix Search 的方式解码,或直接通过选择每步最活跃输出解码。然而,本文使用与传感器一样的束搜索 Beam Search,输出标签概率 Pr(kt,u)Pr(k|t,u) 的修改不依赖之前的输出。我们发现,在 CTC 中与 Prefix Search 相比,Beam Search 即快又效果好。要注意原始传感器的 n 个最好序列是通过长度归一化的对数概率排序的,而本文免除了归一化处理,直接使用对数概率排序。

正则化

正则化对 RNNs 的好性能至关重要,其灵活性能够使模型避免过拟合。本文使用两种正则化方法:提前终止与权重噪声。权重噪声每次在序列上增加,而不是单个时间步。权重噪声通常会简化神经网络,通过减少拟合参数所需的信息量,从而提升泛化性能。

实验

总结

本文展示了组合深度双向 LSTM RNNs 模型做端到端训练,并添加权重噪声。该模型在 MITIM 数据集上做音素识别后,得到目前最先进的效果。下一步,一方面要扩展该系统做大词汇量语音识别任务,另一方面要组合频域卷积神经网络和深度 LSTM。