语音识别TDNN-F声学模型

参考论文:Semi-Orthogonal Low-Rank Matrix Factorization for Deep Neural Networks(半正交低秩矩阵分解DNN)

一.TDNN-F与TDNN的区别?
1.增加中间层

与图1相比,图2多了维数较低的中间层,即令

将原来的权重矩阵M分解为A矩阵和B矩阵,并且限制B矩阵为半正交矩阵,降低中间层维数,在减少模型参数的同时,依然保持很好的建模能力。kaldi中的例子swbd和librispeech中,采用的结构为1536X160X1536,中间层维度为160。

2.增加跳层连接

跳层连接(skip connections)与残差结构很像,同样是为了减少梯度消失,将之前层输出加到当前层输出作为下一层的输入,每个TDNN-F结构中的跳层连接都发生在1536维度的输出之后。

3.增加dropout

这个比较好理解,如图3,为了防止过拟合,每个TDNN-F结构中还加了dropout层。

二.TDNN-F模块的训练?

前边我们讲TDNN-F是将原来的权重矩阵M分解为两个矩阵A和B,并将B约束成半正交的,那么加了半正交约束的TDNN-F是如何训练的呢?下面我们结合论文和代码着重理解一下这块。

论文中提到,通过scale化M矩阵或采用L2正则项都可以控制各层参数变化的快慢,之前的chain-model只是将L2正则项用到最后一层,因为batchnorm层和dropout层的原因,将L2用到隐层作用不是很明显,通过加"floating"半正交约束,可以将L2用到每个TDNN-F中。(这段不是很理解,可能翻译的也不对)

论文链接:http://www.danielpovey.com/files/2018_interspeech_tdnnf.pdf
代码:kaldi/src/nnet3/nnet-utils.cc
模型结构:kaldi/egs/swbd/s5c/local/chain/tuning/run_tdnn_7q.sh

你可能感兴趣的:(语音识别TDNN-F声学模型)