State of the art speech recognition with sequence-to-sequence models
基于注意机制的编码解码结构例如LAS(Listen,Attention,Spell),将声学模型,发音模型和语言模型统一在一起,使得语音识别做到了端到端训练. 本文在LAS基础上,在建模结构和优化过程这两个方面做出了一些改进,从而显著地提升模型性能.建模结构方面,使用单词级别模型代替字母级别模型和使用multi-head attention. 优化过程方面,包括最小单词错误率,标签平滑,scheduled sampling(不知道该怎么翻译),异步训练
基本的LAS结构:
声学模型就是将语音的MFCC,频谱特征或者FBank特征映射为语音的特征表示. (一般语音识别模型不直接将原始的声学信号作为输入,而是将其转换为梅倒频系数,频谱特征或者FBanK特征,然后输入网络进行特征学习). 图中的Encoder和声学模型一样,是一个针对语音的特征学习器. Attention模块是决定输出的语音特征中,哪些部分要重点关注,有所侧重. Decoder模块将上一次的预测\(y_{i-1}\)和Attender输出的注意内容\(c_i\)预测当前的概率分布\(P(y_i|y_{i-1},...,y_0,{\bf x})\)
2.2 建模结构的改进
2.2.1单词级别建模
为什么要要选择单词级别建模,而不选择音素级别(phoneme)或者字母级别(grapheme)建模呢?因为单词级别的LM模型比字母级别的LM容易理解,所以使用单词级别的模型就可以利用具有更强性能的LM模型.另外,单词级别建模,能够充分利用LSTM结构的记忆能力,记住那些出现频率高的单词.(这样类比吧, 站的高就能够看得远,能看清全貌,不容易迷失)
2.2.2 Mult-head Attention
2.3 过程优化
2.3.1 最小化单词错误率
语音识别系统都是使用单词错误率WER作为衡量指标,但是在语音识别训练过程中又不是将WER作为损失函数,而是使用state-level minimum Bayes risk, CE or CTC作为损失函数.本文就是将WER作为损失函数来训练语音识别系统的. 记\({\bf y^*}\)为序列标签的ground-truth, \({\bf y}\)为预测的序列标签.于是损失函数按下面公式定义
$L_{MWER} = E_{P({\bf y}|{\bf x})}[W({\bf y},{\bf y^*}] + \lambda L_{CE} $ (1)
实际计算过程中方程(1)通过取样或者选择N个预测最好的进行近似, 于是就有了如下公式:
$L_{MWER}^{N-best} = \frac {1} {N} \sum {[W({\bf y_i},{\bf y^*}) - \bar W] {\bar P(\bf {y_i}|{\bf x})}} + \lambda L_{CE} $ (2)
$ {\bar P(\bf {y_i}|{\bf x})} \(是\) { P(\bf {y_i}|{\bf x})} $归一化后的概率, \(\bar W\)是这N个单词错误率的均值. 后续的实验表示这样定义更有效.
2.3.2 Scheduled sampling
Scheduled sampling 也不知道该怎么翻译合适.为什么要Scheduled sampling 呢,是由于RNN训练过程和测试过程是有区别. RNN训练和测试中下一帧的预测都要依据之前所有帧,公式表示就是\(P(y_i|y_{i-1},...,y_0,{\bf x})\),而训练阶段所用到的前一帧都是正确的,而测试阶段所用到的前一帧都是预测得到并不都是正确的.这就是训练与测试的区别. 这些出现在序列数据分类问题中. 为了减小训练与测试过程的差异性. 在训练过程的某个阶段, 就从前一帧预测的概率分布取样作为输入,预测当前帧. 当然为了加速收敛,训练最开始还是使用前一帧的真实值预测当前帧的
2.3.3 Label smoothing
常规的分类问题,可能会出现过拟合,模型泛化能力不够. 训练的模型对训练样本过于自信(训练样本真实标签的概率值逼近1),这并不是我们想要的.下面介绍下,为什么label smoothing 能够缓解这一状况.
常规的分类问题,损失函数如下:\(l=-\sum _{i=1}^N{log(p(x_i)|_{y_i}})\),\(p(x_i)|_{y_i}\)是样本\(x_i\)属于样本真实标签\(y_i\)的概率值. 最小化损失函数,那么就是期望\(p(x_i)|_{y_i}\),这个期望太强烈啦.就是这里引起了过拟合,影响了模型泛化能力.
标签平滑后的损失函数这样设计(现在仅仅考虑单个样本的损失)
\(l=-\sum_{k}^Klog(p(k|x))q(k|x)\),其中\(p(k|x),q(k|x)\)分别是样本x的预测概率分别和真实概率分布.(样本标签的真实分布与预测分布的交叉熵),该损失函数可以退化成上面常规分类损失函数.实际上q(k)是未知的,我们还是人工标记的标签代替,设x对于的标签是c,则改进有\(l=-(1-\epsilon) log(p(c|x))-\epsilon\sum_{k!=c}log(p(k|x))u(k|x)\),这样就模型就不会对样本过于自信,对别的类别也有照顾.
参考: Rethinking the Inception Architecture for Computer Vision
2.3.4 异步训练
不少文献表明异步训练能够加速训练,但是异步训练稳定性成为了一个问题.文献中提到了两种方式来稳定训练.不稳定表现在不同副本的梯度方差差异较大.方式1,那就时间对副本产生的梯度,最开始设置其对于的学习率是0, 然后逐渐加大学习率;方式2,就是追踪梯度方差,当副本中的梯度比记住的moving variance 大很多时,将其丢弃.