• 语音识别算法阅读之sFSMN-vFSMN


    论文:

      Feedforward Sequential Memory Networks:A New Structure to Learn Long-term Dependency
    思想:
      因为RNN类结构,包括LSTM,在训练时采用BPTT进行反向传播,容易引发梯度消失和爆炸的问题,造成训练不稳定;此外,RNN是一种时序依赖结构,使得其在训练时无法并行化计算,训练和预测效率不高;于是,本文提出了一种替代方案,前馈序列记忆网络FSMN,FSMN的启发来源于:任何一个无限脉冲响应IIR滤波器都可以通过一个高阶有限脉冲响应FIR滤波器进行近似代替;RNN结构中的循环层可以看做是一个一阶IIR,其理论上可以通过FIR进行近似替代;FSMN就是这样一个替代的FIR滤波器,在网络的隐层额外添加了作为FIR的前馈记忆模块,能够将上下文信息整合到固定长度的编码中,有效处理长时依赖问题;并且其上下文时序宽度可控,使得网络能够适应低计算和低延迟的场景需要。此外,网络是一种纯粹的前馈网络,训练时采用标准的BP,训练稳定且高效;该网络在语音识别和语言建模等序列数据建模领域取得了超过LSTM的效果和性能
    模型:
      FSMN模块中,隐层的输出一方面输入到下一个隐层,另一方面输入到前馈记忆模块中进行时序信息建模;最后两者的输出编码进行合并作为下一个隐层的输入;此外,根据编码系数的不同,FSMN结构又可分为scalar FSMN(sFSMN)和vectorized FSMN(vFSMN);
      FSMN结构可以看做由多个滤波器组成,每个滤波器对一个时序编码的信息过滤,最后将所有过滤后的时序编码进行加性组 合,能够将上下文时序依赖信息整合到固定长度的编码中,较好的对长时依赖进行建模。
    • sFSMN/vFSMN:sFSMN的编码系数为一个常数,也可以看做是一个与隐层编码等长且每个维度数值相同的常数向量;而vFSMN的编码系数采用向量化的系数,其每个维度数值不同,可以看做多个不同的维度滤波器组合而成,从而提升建模能力。假设t时刻l层的隐层输出为h(t,l),那么相应的sFSMN和vFSMN的计算公式分别为:
    单向sFSMN
    单向vFSMN
      上面为单向FSMN结构,即时序信息仅来自于N个历史时间步的隐层编码,扩展到双向FSMN结构为:
    双向sFSMN
    双向vFSMN

         N1,N2分别表示历史和未来的时间片个数

       最后,隐层输出和FSMN模块的输出进行组合输入到下一个隐层:
    • attention-based的FSMN:sFSMN和vFSMN都是与上下文时序信息无关的编码系数;因此,论文提出了一种与上下文相关的attention-based的FSMN结构,该结构可以自主学习当前时间片与每个上下文时间片的相关性程度,从而更好的对当前时刻进行建模和预测;不过从实际效果来看,attention-based的FSMN不如vFSMN结构
     
    • GPU计算加速:因为FSMN采用前馈结构,其计算可以转化为矩阵乘法运算,通过GPU进行加速;对于上下文宽度为N的单向记忆模块和N1,N2的双向记忆模块,可以表示为T*T的矩阵:
      对每一个时间步的H,记忆模块的运算可以通过矩阵乘法得到:
      H由整个输入序列组成,近一步扩展到一个mini-batch的k个序列,可得:
      反向传播计算各参数的梯度如下:
     
     
     
      其中,e ̃H为 ̃H的统计误差
    训练:
    • 语音识别基线系统:
    1. 数据集:Switch-board (SWB),309小时Switchboard-I和20小时Call Home;99.5%train 0.5%dev;测试集:Hub5e00 1831utts
    2. GMM-HMMs

          39维PLPs+CMVN

          HMM包含8991个建模状态(三音素),每个状态40个高斯成分

          训练:先MLE(最大似然估计)训练,然后MPE(最小音素错误)准则序列化训练

          解码时采用3-gram LM

    1. DNN-HMMs[1]

          123维log fbank,输入由上下文语音帧拼接而成(5+1+5)

          6个隐层,每个隐层结点数2048,隐层激活函数为sigmoid或ReLU

          训练由GMM-HMMs提供对齐,sigmoid DNN(DNN-1)采用RBM(玻尔兹曼机)预训练,ReLU DNN(DNN-2)采用随机初始化,然后统一采用交叉熵训练

    1. LSTMP-HMM[2]

          123维fbank

          3*LSTMP(2048-512)

          训练策略采用截断的BPTT

    1. BLSTMP-HMM

          123维fbank

          3*BLSTMP(1024forward+1024backword,512)

          训练策略采用截断的BPTT

    1. FSMN

          sFSMN/vFSMN

            123fbank,输入的上下文窗口为(1+1+1)

            6*full_connected layer(2048,ReLU激活)

          attention-based FSMN

            39PLPs

            6*full_connected layer(2048,ReLU激活)

            历史和未来时间片长度均为40

    • 语言模型基线系统:
    1. 数据集:PTB;English wiki9
    2. PTB:

        词汇表大小为10k,其余词汇映射为<UNK>

        LSTM-LM[3]:1*LSTM

        LSTM-LM:2*LSTM

        s/vFSMN:1* linear layer(200)+2*hidden layer(400)+ 第一个hidden layer连接单向记忆模块(历史时间片个数N=20)

        训练策略:SGD;mini-batch 200;初始学习率0.4;当dev的困惑度p降低为1时,继续训练6个epoch,每一个epoch的学习率降为上一个epoch 的1/2;momentum (0.9) /weight decay (0.00004)

    1. wiki9

        词汇表大小为80k,其余词汇映射为<UNK>

        n-gram:3-gram/5-gram,modified Kneser-Ney smoothing

        RNN-LMs,1*LSTM(600)

        FNN-LM/FOFE-LM[4]:1*linear layer(200)+3*hidden layer(600,ReLU);FNN_LM输入为one-hot特征,FOFE-LM输入为FOFE code特征

        FSMN-LM:1*linear layer(200)+3*hidden layer(600,ReLU);单向记忆模块历史时间片个数N=20

        训练策略:SGD;mini-batch 500;初始学习率0.4;当dev的困惑度p降低为1时,继续训练6个epoch,每一个epoch的学习率降为上一个epoch 的1/2;无momentum/weight decay机制

    实验结果:
    • 语音识别任务中,vFSMN取得了最好的识别结果;BLSTM结构的效果要好于sFSMN结构;同时FSMN结构要比BLSTM结构训练速度快3倍以上;
    • 对于双向FSMN,当N1=50,N2=50时,取得了最好的识别结果;从结果来看,并不是N1,N2越大识别效果越好,这表明当前帧仅仅只与有限范围内的上下文时序信息相关,更远范围内的时序信息对识别无用;此外,当设置未来时间片长度N2=10时,WER并没有损失太多,利用这一点可以有效的节约计算和降低输出延迟
    • 在本文实验中,attention-based FSMN相对于vFSMN而言,并没有带来识别效果的提升,反而有所下降(FACC,帧分类精度)
    • 无论在PTB还是在wiki9数据集上,相比于n-gram、RNN-LM、LSTM-LM、FOFE-LM,sFSMN和vFSMN的语言模型困惑度均最小,这证明了FSMN在语言模型方面的有效性;
     
    • 在语言模型方面,vFSMN跟sFSMN效果几乎相当,并没有语音识别领域那样的优势;论文作者通过可视化vFSMN的编码系数发现,其每个维度的系数大小非常相近,几乎等价于sFSMN;并且vFSMN和sFSMN的平均编码系数也非常相近,这间接证明了vFSMN跟sFSMN效果相当的原因
    总结:
      本文提出了一种前馈序列记忆网络FSMN,该网络具有如下特点:
    • 隐层包含序列记忆模块,该模块能够对上下文时序依赖信息进行建模;并且上下文时序宽度可以控制,从而节约计算和降低延迟;实验结果表明,FSMN相比于主流的BLSTM能够更好的对时序进行建模
    • 此外,FSMN是一种纯粹的前馈网络结构,支持并行化的矩阵运算,相比于BLSTM结构能够明显降低训练时间
    Reference:
  • 相关阅读:
    第一章Struts1
    Java
    论坛入口forum.php
    【Discuz系列教程2】论坛入口forum.php
    【Discuz系列教程3】核心函数class_core.php
    discuz 系统函数库function_core注释
    java 每日习题(四)求101-200之间的素数
    java 每日习题(三)兔子问题
    java 每日习题(二) 用decimalFormat格式化输出
    java 每日习题(一)
  • 原文地址:https://www.cnblogs.com/zy230530/p/13677721.html
Copyright © 2020-2023  润新知