本月累计签到次数:

今天获取 积分

注意力机制

注意力机制

881 浏览

漫谈RNN之注意力机制(语音识别篇)

机械自动化类 集运物流 2016-12-09 13:41 发表了文章 来自相关话题

1.注意力机制概述

RNN在一系列序列建模任务上表现出色,但是仅仅用RNN来实现序列建模过于简单,就拿机器翻译(漫谈RNN之序列建模(机器翻译篇))为例,我们把一段很长的输入句子传到编码神经网络中,然后将它编码成一个向量,再把这个向量传入到解码神经网络中并得到最终的翻译后的句子,如果输入句子太长,造成解码后的第一个单词与编码中的第一个单词时间跨度过大。由于RNN是无法很好地记录长期记忆的,即便是LSTM,其记忆时间长度也是有限的,因此这一点影响了NTM在进行长句子翻译时的表现。



虽然前面推送中提到过,为了缩小目标句子和源句子的对应单词的距离,我们可以将输入句子进行颠倒再传入编码网络,这样提升了NTM在法语与英语翻译任务中的表现,但是,这个做法的前提是目标句子与源句子之间的位置是具有较强的先后顺序的。如果目标句子中的单词的顺序与源句子中的单词的顺序没有明显的位置对应关系,这种做法也是失效的。



那么人类怎么翻译的呢?就我个人而言,我是先读完一个源句子,然后会首先找到主语或时间状语等某些特定的单词,然后将它们先翻译,其他位置的按照对应语法后翻译,这种优先级顺序,其实就使用了注意力机制。放在机器翻译任务上,就是我们不把整个输入句子编码成一个向量传送到解码网络,而是逐步地将注意力放在源句子的不同位置依次传送到解码网络,这种做法在《Neural machine translation by jointly learning to align and translate》这篇论文中有具体描述,如下图所示,权重a就是放在每个输入特征上面的注意力权重因子。






所以什么是注意力机制?当你注意到这红色加粗的五个字的时候,你就已经使用了视觉上的注意力机制。我们每时每刻都在使用着注意力机制,而这些不同的注意力会激发大脑中不同区域的神经元,进而产生不同的反应,只不过我们的注意力机制进行的非常快而已。今天我们重点讲的是如何将注意力机制应用到语音识别任务上。



2.结合注意力机制的语音识别






端对端的语音识别系统现在已经十分常见了,并且RNN/LSTM/CNN+CTC的应用已经在语音识别上取得了巨大的成功(如百度、微软、谷歌、科大讯飞的语音识别系统)。如上图所示,传统的基于RNN的语音识别模型是基于高维特征建模的,它的做法是将音频的特征矩阵作为声学模型的输入,然后构建多层深度LSTM(或双向LSTM)进行高维特征提取,得到的网络输出是所有字母或单词的概率分布,最终结合CTC算法得到网络的误差函数,使用beam search即可得到最终的输出序列。这种端对端识别的好处就是对于样本标签不需要人工对齐,但其缺点是对于输出字母与其在音频中的时间位置是没有考虑的,换句话说,这种端对端的语音识别虽然整体准确,但是如果仔细去分析每个时刻的输出是否正确,那就不一定了,而之所以要结合注意力机制,就是为了解决端对端语音识别系统中的输出字母与输入音频在时间上不对齐的问题。这里只讲模型,具体实验结果请参考论文《End-to-end Continuous Speech Recognition using
Attention-based Recurrent NN: First Results》。



不同于上面传统的基于RNN的系统,结合注意力机制的语音识别系统更多地结合了机器翻译的序列建模模型,即包含了编码器和解码器,并且,在编码器与解码器之间,增加了一个注意力机制,模型结构如下图所示。






其工作流程如下:

首先对所有音频样本进行特征提取,提取的方式是按帧得到其特征向量,这里使用的是长度为40的fMLLR作为每一帧的特征向量;



编码器:

假设对于单个样本,其特征矩阵是x,长度为I,将它作为三层Deep Maxout网络的输入,最终每帧得到1024个输出神经元(maxout是一种激活函数,功能与dropout类似,maxout可以拟合任意凸函数,具体可参见《Maxout Networks》);


将由Maxout网络得到的特征输入到每层含有512个神经元的双向RNN编码器中,最终的输出是由前向RNN和后向RNN合并到一起,因此输出的特征维度是1024,这个特征输出我们称为annotation,并且我们将此annotation的第一个值作为解码器的初始值;



解码器:

有了annotation,我们就可以来计算context了,context就是结合了注意力以后的特征,并且context作为输入传到解码网络中。如何计算context呢?由于context是对所有编码器的输出进行一个加权,因此计算context的公式是:







上式中的α就是注意力权重,注意力权重的取值并不是随机优化的,而是基于两点考虑:第一是模仿了注意力用在机器翻译上的做法,即结合上一时刻解码器的状态s_o-1和annotation得到一个score,该score的计算公式如下(其中a是带有线性输出的MLP):







第二是增加了一个更适合语音识别的做法,即对score进行一定的“惩罚”,其考虑了当前的输入位置i以及之前的注意力权重α,并且进行归一化(其中d是带有sigmoid输出的MLP):







这里的“惩罚”可以这么理解:由于在一个音频语料中,很多重复的音素会拥有相近的annotation,如果不加“惩罚”,则会导致所有这些相近的位置都被注意到了,这是不合理的,于是引入了“惩罚”,注意力权重就会在解码器上一时刻输入的周边就近考虑要被注意的音素。







score计算出来了,context也就计算出来了,那么解码器的循环就是如同机器翻译里的解码器一样工作,即解码器当前时刻的隐含层状态是由当前时刻的context、解码上一时刻的隐含层状态s、解码器上一时刻的输出y共同决定的;解码器当前时刻的概率分布输出则进一步结合了context和上一时刻的输出y,具体参照下面公式:




训练:

由于在输出一句音素的前后分别有开始标志音素sil和结束标志因素sil,因此这里完全类比于机器翻译的做法,误差函数可以所有输出因素的概率乘积(也就是概率对数之和):






除此之外,为了让输出音素与输入的音频特征单调对齐,即防止注意力会放在之前已经注意过的位置上,添加了一个额外的惩罚因子,将其添加到上面的负对数似然概率一起作为最终的损失函数。该惩罚因子的作用是让当前时刻的所有累计注意力权重小于前一时刻的所有累计注意力权重,这样就可以使得注意力权重不要注意重复过去的音素。如果有很多重复注意的话,那么下面公式中p_0的值就会大于0,而最优情况是p_0为0,因此训练的时候也是要求使得p_0的值最小。









3.总结

我认为结合了注意力机制的语音识别系统与传统的基于RNN-CTC(参考Alex Graves的工作)的语音识别系统有两个明显的区别:第一,传统的基于RNN-CTC的语音识别系统没有考虑音素与语料在时间上的对齐,而基于注意力的模型为此引入了注意力模型以及惩罚目标函数;第二,传统的基于RNN-CTC的语音识别系统是结合CTC进行训练的,而这里是采取的是音素水平的概率乘积最大化。




你可能会感兴趣的文章有:


《漫谈RNN之基本概念》

《漫谈RNN之训练方法》

《漫谈RNN之梯度消失及梯度爆炸》

《漫谈RNN之长短期记忆模型LSTM》

《漫谈RNN之长短期记忆模型LSTM(续)》

《漫谈RNN之序列建模(机器翻译篇)》

《漫谈RNN之序列建模(机器造句篇)》

《漫谈RNN之序列建模(机器说图篇)》

《基于注意力模型的TIMIT语音识别系统》(升级版)

《时序分类算法之Connectionist Temporal Classification(CTC)》
 
 
 
 
 
 
来源:张泽旺 深度学习每日摘要
智造家 查看全部
1.注意力机制概述

RNN在一系列序列建模任务上表现出色,但是仅仅用RNN来实现序列建模过于简单,就拿机器翻译(漫谈RNN之序列建模(机器翻译篇))为例,我们把一段很长的输入句子传到编码神经网络中,然后将它编码成一个向量,再把这个向量传入到解码神经网络中并得到最终的翻译后的句子,如果输入句子太长,造成解码后的第一个单词与编码中的第一个单词时间跨度过大。由于RNN是无法很好地记录长期记忆的,即便是LSTM,其记忆时间长度也是有限的,因此这一点影响了NTM在进行长句子翻译时的表现。



虽然前面推送中提到过,为了缩小目标句子和源句子的对应单词的距离,我们可以将输入句子进行颠倒再传入编码网络,这样提升了NTM在法语与英语翻译任务中的表现,但是,这个做法的前提是目标句子与源句子之间的位置是具有较强的先后顺序的。如果目标句子中的单词的顺序与源句子中的单词的顺序没有明显的位置对应关系,这种做法也是失效的。



那么人类怎么翻译的呢?就我个人而言,我是先读完一个源句子,然后会首先找到主语或时间状语等某些特定的单词,然后将它们先翻译,其他位置的按照对应语法后翻译,这种优先级顺序,其实就使用了注意力机制。放在机器翻译任务上,就是我们不把整个输入句子编码成一个向量传送到解码网络,而是逐步地将注意力放在源句子的不同位置依次传送到解码网络,这种做法在《Neural machine translation by jointly learning to align and translate》这篇论文中有具体描述,如下图所示,权重a就是放在每个输入特征上面的注意力权重因子。

13.1_.JPG


所以什么是注意力机制?当你注意到这红色加粗的五个字的时候,你就已经使用了视觉上的注意力机制。我们每时每刻都在使用着注意力机制,而这些不同的注意力会激发大脑中不同区域的神经元,进而产生不同的反应,只不过我们的注意力机制进行的非常快而已。今天我们重点讲的是如何将注意力机制应用到语音识别任务上。



2.结合注意力机制的语音识别

13.2_.JPG


端对端的语音识别系统现在已经十分常见了,并且RNN/LSTM/CNN+CTC的应用已经在语音识别上取得了巨大的成功(如百度、微软、谷歌、科大讯飞的语音识别系统)。如上图所示,传统的基于RNN的语音识别模型是基于高维特征建模的,它的做法是将音频的特征矩阵作为声学模型的输入,然后构建多层深度LSTM(或双向LSTM)进行高维特征提取,得到的网络输出是所有字母或单词的概率分布,最终结合CTC算法得到网络的误差函数,使用beam search即可得到最终的输出序列。这种端对端识别的好处就是对于样本标签不需要人工对齐,但其缺点是对于输出字母与其在音频中的时间位置是没有考虑的,换句话说,这种端对端的语音识别虽然整体准确,但是如果仔细去分析每个时刻的输出是否正确,那就不一定了,而之所以要结合注意力机制,就是为了解决端对端语音识别系统中的输出字母与输入音频在时间上不对齐的问题。这里只讲模型,具体实验结果请参考论文《End-to-end Continuous Speech Recognition using
Attention-based Recurrent NN: First Results》。



不同于上面传统的基于RNN的系统,结合注意力机制的语音识别系统更多地结合了机器翻译的序列建模模型,即包含了编码器和解码器,并且,在编码器与解码器之间,增加了一个注意力机制,模型结构如下图所示。

13.3_.JPG


其工作流程如下:

首先对所有音频样本进行特征提取,提取的方式是按帧得到其特征向量,这里使用的是长度为40的fMLLR作为每一帧的特征向量;



编码器:

假设对于单个样本,其特征矩阵是x,长度为I,将它作为三层Deep Maxout网络的输入,最终每帧得到1024个输出神经元(maxout是一种激活函数,功能与dropout类似,maxout可以拟合任意凸函数,具体可参见《Maxout Networks》);


将由Maxout网络得到的特征输入到每层含有512个神经元的双向RNN编码器中,最终的输出是由前向RNN和后向RNN合并到一起,因此输出的特征维度是1024,这个特征输出我们称为annotation,并且我们将此annotation的第一个值作为解码器的初始值;



解码器:

有了annotation,我们就可以来计算context了,context就是结合了注意力以后的特征,并且context作为输入传到解码网络中。如何计算context呢?由于context是对所有编码器的输出进行一个加权,因此计算context的公式是:

13.4_.JPG



上式中的α就是注意力权重,注意力权重的取值并不是随机优化的,而是基于两点考虑:第一是模仿了注意力用在机器翻译上的做法,即结合上一时刻解码器的状态s_o-1和annotation得到一个score,该score的计算公式如下(其中a是带有线性输出的MLP):

13.5_.JPG



第二是增加了一个更适合语音识别的做法,即对score进行一定的“惩罚”,其考虑了当前的输入位置i以及之前的注意力权重α,并且进行归一化(其中d是带有sigmoid输出的MLP):

13.6_.JPG



这里的“惩罚”可以这么理解:由于在一个音频语料中,很多重复的音素会拥有相近的annotation,如果不加“惩罚”,则会导致所有这些相近的位置都被注意到了,这是不合理的,于是引入了“惩罚”,注意力权重就会在解码器上一时刻输入的周边就近考虑要被注意的音素。

13.7_.JPG



score计算出来了,context也就计算出来了,那么解码器的循环就是如同机器翻译里的解码器一样工作,即解码器当前时刻的隐含层状态是由当前时刻的context、解码上一时刻的隐含层状态s、解码器上一时刻的输出y共同决定的;解码器当前时刻的概率分布输出则进一步结合了context和上一时刻的输出y,具体参照下面公式:




训练:

由于在输出一句音素的前后分别有开始标志音素sil和结束标志因素sil,因此这里完全类比于机器翻译的做法,误差函数可以所有输出因素的概率乘积(也就是概率对数之和):

13.8_.JPG


除此之外,为了让输出音素与输入的音频特征单调对齐,即防止注意力会放在之前已经注意过的位置上,添加了一个额外的惩罚因子,将其添加到上面的负对数似然概率一起作为最终的损失函数。该惩罚因子的作用是让当前时刻的所有累计注意力权重小于前一时刻的所有累计注意力权重,这样就可以使得注意力权重不要注意重复过去的音素。如果有很多重复注意的话,那么下面公式中p_0的值就会大于0,而最优情况是p_0为0,因此训练的时候也是要求使得p_0的值最小。

13.9_.JPG





3.总结

我认为结合了注意力机制的语音识别系统与传统的基于RNN-CTC(参考Alex Graves的工作)的语音识别系统有两个明显的区别:第一,传统的基于RNN-CTC的语音识别系统没有考虑音素与语料在时间上的对齐,而基于注意力的模型为此引入了注意力模型以及惩罚目标函数;第二,传统的基于RNN-CTC的语音识别系统是结合CTC进行训练的,而这里是采取的是音素水平的概率乘积最大化。




你可能会感兴趣的文章有:


《漫谈RNN之基本概念》

《漫谈RNN之训练方法》

《漫谈RNN之梯度消失及梯度爆炸》

《漫谈RNN之长短期记忆模型LSTM》

《漫谈RNN之长短期记忆模型LSTM(续)》

《漫谈RNN之序列建模(机器翻译篇)》

《漫谈RNN之序列建模(机器造句篇)》

《漫谈RNN之序列建模(机器说图篇)》

《基于注意力模型的TIMIT语音识别系统》(升级版)

《时序分类算法之Connectionist Temporal Classification(CTC)》

 
 
 
 
 
 
来源:张泽旺 深度学习每日摘要
智造家
881 浏览

漫谈RNN之注意力机制(语音识别篇)

机械自动化类 集运物流 2016-12-09 13:41 发表了文章 来自相关话题

1.注意力机制概述

RNN在一系列序列建模任务上表现出色,但是仅仅用RNN来实现序列建模过于简单,就拿机器翻译(漫谈RNN之序列建模(机器翻译篇))为例,我们把一段很长的输入句子传到编码神经网络中,然后将它编码成一个向量,再把这个向量传入到解码神经网络中并得到最终的翻译后的句子,如果输入句子太长,造成解码后的第一个单词与编码中的第一个单词时间跨度过大。由于RNN是无法很好地记录长期记忆的,即便是LSTM,其记忆时间长度也是有限的,因此这一点影响了NTM在进行长句子翻译时的表现。



虽然前面推送中提到过,为了缩小目标句子和源句子的对应单词的距离,我们可以将输入句子进行颠倒再传入编码网络,这样提升了NTM在法语与英语翻译任务中的表现,但是,这个做法的前提是目标句子与源句子之间的位置是具有较强的先后顺序的。如果目标句子中的单词的顺序与源句子中的单词的顺序没有明显的位置对应关系,这种做法也是失效的。



那么人类怎么翻译的呢?就我个人而言,我是先读完一个源句子,然后会首先找到主语或时间状语等某些特定的单词,然后将它们先翻译,其他位置的按照对应语法后翻译,这种优先级顺序,其实就使用了注意力机制。放在机器翻译任务上,就是我们不把整个输入句子编码成一个向量传送到解码网络,而是逐步地将注意力放在源句子的不同位置依次传送到解码网络,这种做法在《Neural machine translation by jointly learning to align and translate》这篇论文中有具体描述,如下图所示,权重a就是放在每个输入特征上面的注意力权重因子。






所以什么是注意力机制?当你注意到这红色加粗的五个字的时候,你就已经使用了视觉上的注意力机制。我们每时每刻都在使用着注意力机制,而这些不同的注意力会激发大脑中不同区域的神经元,进而产生不同的反应,只不过我们的注意力机制进行的非常快而已。今天我们重点讲的是如何将注意力机制应用到语音识别任务上。



2.结合注意力机制的语音识别






端对端的语音识别系统现在已经十分常见了,并且RNN/LSTM/CNN+CTC的应用已经在语音识别上取得了巨大的成功(如百度、微软、谷歌、科大讯飞的语音识别系统)。如上图所示,传统的基于RNN的语音识别模型是基于高维特征建模的,它的做法是将音频的特征矩阵作为声学模型的输入,然后构建多层深度LSTM(或双向LSTM)进行高维特征提取,得到的网络输出是所有字母或单词的概率分布,最终结合CTC算法得到网络的误差函数,使用beam search即可得到最终的输出序列。这种端对端识别的好处就是对于样本标签不需要人工对齐,但其缺点是对于输出字母与其在音频中的时间位置是没有考虑的,换句话说,这种端对端的语音识别虽然整体准确,但是如果仔细去分析每个时刻的输出是否正确,那就不一定了,而之所以要结合注意力机制,就是为了解决端对端语音识别系统中的输出字母与输入音频在时间上不对齐的问题。这里只讲模型,具体实验结果请参考论文《End-to-end Continuous Speech Recognition using
Attention-based Recurrent NN: First Results》。



不同于上面传统的基于RNN的系统,结合注意力机制的语音识别系统更多地结合了机器翻译的序列建模模型,即包含了编码器和解码器,并且,在编码器与解码器之间,增加了一个注意力机制,模型结构如下图所示。






其工作流程如下:

首先对所有音频样本进行特征提取,提取的方式是按帧得到其特征向量,这里使用的是长度为40的fMLLR作为每一帧的特征向量;



编码器:

假设对于单个样本,其特征矩阵是x,长度为I,将它作为三层Deep Maxout网络的输入,最终每帧得到1024个输出神经元(maxout是一种激活函数,功能与dropout类似,maxout可以拟合任意凸函数,具体可参见《Maxout Networks》);


将由Maxout网络得到的特征输入到每层含有512个神经元的双向RNN编码器中,最终的输出是由前向RNN和后向RNN合并到一起,因此输出的特征维度是1024,这个特征输出我们称为annotation,并且我们将此annotation的第一个值作为解码器的初始值;



解码器:

有了annotation,我们就可以来计算context了,context就是结合了注意力以后的特征,并且context作为输入传到解码网络中。如何计算context呢?由于context是对所有编码器的输出进行一个加权,因此计算context的公式是:







上式中的α就是注意力权重,注意力权重的取值并不是随机优化的,而是基于两点考虑:第一是模仿了注意力用在机器翻译上的做法,即结合上一时刻解码器的状态s_o-1和annotation得到一个score,该score的计算公式如下(其中a是带有线性输出的MLP):







第二是增加了一个更适合语音识别的做法,即对score进行一定的“惩罚”,其考虑了当前的输入位置i以及之前的注意力权重α,并且进行归一化(其中d是带有sigmoid输出的MLP):







这里的“惩罚”可以这么理解:由于在一个音频语料中,很多重复的音素会拥有相近的annotation,如果不加“惩罚”,则会导致所有这些相近的位置都被注意到了,这是不合理的,于是引入了“惩罚”,注意力权重就会在解码器上一时刻输入的周边就近考虑要被注意的音素。







score计算出来了,context也就计算出来了,那么解码器的循环就是如同机器翻译里的解码器一样工作,即解码器当前时刻的隐含层状态是由当前时刻的context、解码上一时刻的隐含层状态s、解码器上一时刻的输出y共同决定的;解码器当前时刻的概率分布输出则进一步结合了context和上一时刻的输出y,具体参照下面公式:




训练:

由于在输出一句音素的前后分别有开始标志音素sil和结束标志因素sil,因此这里完全类比于机器翻译的做法,误差函数可以所有输出因素的概率乘积(也就是概率对数之和):






除此之外,为了让输出音素与输入的音频特征单调对齐,即防止注意力会放在之前已经注意过的位置上,添加了一个额外的惩罚因子,将其添加到上面的负对数似然概率一起作为最终的损失函数。该惩罚因子的作用是让当前时刻的所有累计注意力权重小于前一时刻的所有累计注意力权重,这样就可以使得注意力权重不要注意重复过去的音素。如果有很多重复注意的话,那么下面公式中p_0的值就会大于0,而最优情况是p_0为0,因此训练的时候也是要求使得p_0的值最小。









3.总结

我认为结合了注意力机制的语音识别系统与传统的基于RNN-CTC(参考Alex Graves的工作)的语音识别系统有两个明显的区别:第一,传统的基于RNN-CTC的语音识别系统没有考虑音素与语料在时间上的对齐,而基于注意力的模型为此引入了注意力模型以及惩罚目标函数;第二,传统的基于RNN-CTC的语音识别系统是结合CTC进行训练的,而这里是采取的是音素水平的概率乘积最大化。




你可能会感兴趣的文章有:


《漫谈RNN之基本概念》

《漫谈RNN之训练方法》

《漫谈RNN之梯度消失及梯度爆炸》

《漫谈RNN之长短期记忆模型LSTM》

《漫谈RNN之长短期记忆模型LSTM(续)》

《漫谈RNN之序列建模(机器翻译篇)》

《漫谈RNN之序列建模(机器造句篇)》

《漫谈RNN之序列建模(机器说图篇)》

《基于注意力模型的TIMIT语音识别系统》(升级版)

《时序分类算法之Connectionist Temporal Classification(CTC)》
 
 
 
 
 
 
来源:张泽旺 深度学习每日摘要
智造家 查看全部
1.注意力机制概述

RNN在一系列序列建模任务上表现出色,但是仅仅用RNN来实现序列建模过于简单,就拿机器翻译(漫谈RNN之序列建模(机器翻译篇))为例,我们把一段很长的输入句子传到编码神经网络中,然后将它编码成一个向量,再把这个向量传入到解码神经网络中并得到最终的翻译后的句子,如果输入句子太长,造成解码后的第一个单词与编码中的第一个单词时间跨度过大。由于RNN是无法很好地记录长期记忆的,即便是LSTM,其记忆时间长度也是有限的,因此这一点影响了NTM在进行长句子翻译时的表现。



虽然前面推送中提到过,为了缩小目标句子和源句子的对应单词的距离,我们可以将输入句子进行颠倒再传入编码网络,这样提升了NTM在法语与英语翻译任务中的表现,但是,这个做法的前提是目标句子与源句子之间的位置是具有较强的先后顺序的。如果目标句子中的单词的顺序与源句子中的单词的顺序没有明显的位置对应关系,这种做法也是失效的。



那么人类怎么翻译的呢?就我个人而言,我是先读完一个源句子,然后会首先找到主语或时间状语等某些特定的单词,然后将它们先翻译,其他位置的按照对应语法后翻译,这种优先级顺序,其实就使用了注意力机制。放在机器翻译任务上,就是我们不把整个输入句子编码成一个向量传送到解码网络,而是逐步地将注意力放在源句子的不同位置依次传送到解码网络,这种做法在《Neural machine translation by jointly learning to align and translate》这篇论文中有具体描述,如下图所示,权重a就是放在每个输入特征上面的注意力权重因子。

13.1_.JPG


所以什么是注意力机制?当你注意到这红色加粗的五个字的时候,你就已经使用了视觉上的注意力机制。我们每时每刻都在使用着注意力机制,而这些不同的注意力会激发大脑中不同区域的神经元,进而产生不同的反应,只不过我们的注意力机制进行的非常快而已。今天我们重点讲的是如何将注意力机制应用到语音识别任务上。



2.结合注意力机制的语音识别

13.2_.JPG


端对端的语音识别系统现在已经十分常见了,并且RNN/LSTM/CNN+CTC的应用已经在语音识别上取得了巨大的成功(如百度、微软、谷歌、科大讯飞的语音识别系统)。如上图所示,传统的基于RNN的语音识别模型是基于高维特征建模的,它的做法是将音频的特征矩阵作为声学模型的输入,然后构建多层深度LSTM(或双向LSTM)进行高维特征提取,得到的网络输出是所有字母或单词的概率分布,最终结合CTC算法得到网络的误差函数,使用beam search即可得到最终的输出序列。这种端对端识别的好处就是对于样本标签不需要人工对齐,但其缺点是对于输出字母与其在音频中的时间位置是没有考虑的,换句话说,这种端对端的语音识别虽然整体准确,但是如果仔细去分析每个时刻的输出是否正确,那就不一定了,而之所以要结合注意力机制,就是为了解决端对端语音识别系统中的输出字母与输入音频在时间上不对齐的问题。这里只讲模型,具体实验结果请参考论文《End-to-end Continuous Speech Recognition using
Attention-based Recurrent NN: First Results》。



不同于上面传统的基于RNN的系统,结合注意力机制的语音识别系统更多地结合了机器翻译的序列建模模型,即包含了编码器和解码器,并且,在编码器与解码器之间,增加了一个注意力机制,模型结构如下图所示。

13.3_.JPG


其工作流程如下:

首先对所有音频样本进行特征提取,提取的方式是按帧得到其特征向量,这里使用的是长度为40的fMLLR作为每一帧的特征向量;



编码器:

假设对于单个样本,其特征矩阵是x,长度为I,将它作为三层Deep Maxout网络的输入,最终每帧得到1024个输出神经元(maxout是一种激活函数,功能与dropout类似,maxout可以拟合任意凸函数,具体可参见《Maxout Networks》);


将由Maxout网络得到的特征输入到每层含有512个神经元的双向RNN编码器中,最终的输出是由前向RNN和后向RNN合并到一起,因此输出的特征维度是1024,这个特征输出我们称为annotation,并且我们将此annotation的第一个值作为解码器的初始值;



解码器:

有了annotation,我们就可以来计算context了,context就是结合了注意力以后的特征,并且context作为输入传到解码网络中。如何计算context呢?由于context是对所有编码器的输出进行一个加权,因此计算context的公式是:

13.4_.JPG



上式中的α就是注意力权重,注意力权重的取值并不是随机优化的,而是基于两点考虑:第一是模仿了注意力用在机器翻译上的做法,即结合上一时刻解码器的状态s_o-1和annotation得到一个score,该score的计算公式如下(其中a是带有线性输出的MLP):

13.5_.JPG



第二是增加了一个更适合语音识别的做法,即对score进行一定的“惩罚”,其考虑了当前的输入位置i以及之前的注意力权重α,并且进行归一化(其中d是带有sigmoid输出的MLP):

13.6_.JPG



这里的“惩罚”可以这么理解:由于在一个音频语料中,很多重复的音素会拥有相近的annotation,如果不加“惩罚”,则会导致所有这些相近的位置都被注意到了,这是不合理的,于是引入了“惩罚”,注意力权重就会在解码器上一时刻输入的周边就近考虑要被注意的音素。

13.7_.JPG



score计算出来了,context也就计算出来了,那么解码器的循环就是如同机器翻译里的解码器一样工作,即解码器当前时刻的隐含层状态是由当前时刻的context、解码上一时刻的隐含层状态s、解码器上一时刻的输出y共同决定的;解码器当前时刻的概率分布输出则进一步结合了context和上一时刻的输出y,具体参照下面公式:




训练:

由于在输出一句音素的前后分别有开始标志音素sil和结束标志因素sil,因此这里完全类比于机器翻译的做法,误差函数可以所有输出因素的概率乘积(也就是概率对数之和):

13.8_.JPG


除此之外,为了让输出音素与输入的音频特征单调对齐,即防止注意力会放在之前已经注意过的位置上,添加了一个额外的惩罚因子,将其添加到上面的负对数似然概率一起作为最终的损失函数。该惩罚因子的作用是让当前时刻的所有累计注意力权重小于前一时刻的所有累计注意力权重,这样就可以使得注意力权重不要注意重复过去的音素。如果有很多重复注意的话,那么下面公式中p_0的值就会大于0,而最优情况是p_0为0,因此训练的时候也是要求使得p_0的值最小。

13.9_.JPG





3.总结

我认为结合了注意力机制的语音识别系统与传统的基于RNN-CTC(参考Alex Graves的工作)的语音识别系统有两个明显的区别:第一,传统的基于RNN-CTC的语音识别系统没有考虑音素与语料在时间上的对齐,而基于注意力的模型为此引入了注意力模型以及惩罚目标函数;第二,传统的基于RNN-CTC的语音识别系统是结合CTC进行训练的,而这里是采取的是音素水平的概率乘积最大化。




你可能会感兴趣的文章有:


《漫谈RNN之基本概念》

《漫谈RNN之训练方法》

《漫谈RNN之梯度消失及梯度爆炸》

《漫谈RNN之长短期记忆模型LSTM》

《漫谈RNN之长短期记忆模型LSTM(续)》

《漫谈RNN之序列建模(机器翻译篇)》

《漫谈RNN之序列建模(机器造句篇)》

《漫谈RNN之序列建模(机器说图篇)》

《基于注意力模型的TIMIT语音识别系统》(升级版)

《时序分类算法之Connectionist Temporal Classification(CTC)》

 
 
 
 
 
 
来源:张泽旺 深度学习每日摘要
智造家