TDNN方法学习

 TDNN方法简介

  • TDNN(Time Delay Neural Network,时延神经网络)是用于处理序列数据的,比如:一段语音、一段文本
  • 将TDNN和统计池化(Statistics Pooling)结合起来,正如x-vector的网络结构,可以处理任意长度的序列

x-vector的网络结构

x-vector是用于文本无关的说话人识别的,因此需要处理任意长度的序列,其网络结构如下图所示:

TDNN方法学习_第1张图片

输入:每个特征图表示一帧,特征图的通道数为24,表示一帧的特征数(原文是24维fbank特征),特征图的分辨率是1,在这里需要明确:语音是1维数据,因此特征图并不是二维图,而是一个值,24个特征图堆叠起来构成24维fbank特征。

  • frame1
    • frame1的特征图经过1维卷积得到,卷积核大小inchannels × kernelsize × outchannels = 24 × 5 × 512
    • frame1的每个特征图下面连接的5条线,表示卷积核。这5条线不是5根细线,而是5根麻花线,每根麻花线由inchannels = 24根细线组成,每根细线连接一个特征。每根细线的权重都是一样的,每根麻花线的权重不一样。
    • kernelsize=5,对应闭区间[ t − 2 , t + 2 ]一共5帧的上下文,也可以表示为{ t − 2 , t − 1 , t , t + 1 , t + 2 } ,之所以表格说frame1的输入是120,是因为将5帧上下文的特征都计算进去了5 × 24 = 120。
    • outchannels=512,表示卷积核的厚度是512,可以理解为5根麻花线堆叠了512次,每次堆叠都得到新的5根麻花线,都符合“每根细线的权重都是一样的,每根麻花线的权重不一样”。5根麻花线同时运算,得到一个值,从而frame1的每个特征图其实也是一个值,且通道数为512,对应表格中的frame1的输出是512。
  • frame 2
    • frame2的特征图经过1维膨胀卷积得到,卷积核大小inchannels×kernelsize×outchannels=512×3×512
    • 不要被膨胀卷积吓到了,膨胀卷积的kernelsize=3,表示3根麻花线中,第2根麻花线连接第t帧,第1根麻花线连接第t-2帧,第3根麻花线连接第t+2帧,对应表格中的{ t − 2 , t , t + 2 } 共3帧的上下文,这就是膨胀卷积和标准卷积的不同之处,隔帧连接
    • 在PyTorch中,1维卷积的api为
torch.nn.Conv1d(inchannels,outchannels,kernelsize,stride=1,padding=0,dilation=1,groups=1,bias=True,paddingmode=′zeros′,device=None,dtype=None)

其中,dilation=1表示标准卷积,frame2的膨胀卷积需要设置dilation=2

  • frame3、frame4没有引进新的运算。frame3需要设置dilation=3,而frame4的卷积核大小inchannels×kernelsize×outchannels=512×1×512,因为kernelsize=1,所以与MLP(dense layer)没有本质区别,卷积核通过在每一帧上移动,实现全连接,因此可以看到有些代码实现用kernelsize=1的卷积替代全连接。
  • 从frame1到frame5,每次卷积的步长stride都等于1,从而对每一帧都有对应的输出,也就是说,对于任意长度的帧序列,frame5的输出也是一个同等长度的序列,长度记为T,而由于frame5的outchannels=1500,所以表格中统计池化的输入是1500 × T
  • 统计池化的原理颇为简单,本质是在序列长度T这一维度求均值和标准差,然后将均值和标准差串联(concatenate)起来,所以池化后,序列长度T这一维度消失了,得到了1500个均值和1500个标准差,串联起来就是长度为3000的向量
  • segment6、segment7和Softmax都是标准的MLP,不再赘述
  • 最后segment6输出的512长度的向量,被称为x-vector,用于训练一个PLDA模型,进行说话人识别,可以计算一下,提取x-vector所需的参数(参数量并不能代表计算量,因为输入网络的是任意长度的帧序列)

TDNN方法学习_第2张图片

TDNN方法学习_第3张图片

你可能感兴趣的:(学习,深度学习,人工智能)