使用d-Vector的流程

本文基于Deep Speaker: an End-to-End Neural Speaker Embedding System论文进行阐述。

1 预处理 Preprocessing

  1. 读取.wav文件,把它读进一个数组中.
  2. 遍历数组,分chunk检查(50ms),如果该chunk是静音(使用能量检测),那么省略该chunk.
  3. 如果数组长度不够(音频长度不够1.6s),那么在末尾补0。

2 特征提取 Feature Extraction

  1. 先分帧25ms, 移帧10ms, sample rate 16k, 滤波器64个,也就是mfcc有64维。
  2. 使用python自带的fbank()将filter-bank提取出来,然后normalize,得到的特征的维度是:(num_frames,64, 1)

3 CNN 训练 Training

3.1 预训练

使用部分数据来预先训练,使得收敛更快。不是强制。
输入应当是当前的语音所有的帧提取出来的mfcc放在一起,输入进去。y_label应该是one-hot对应说话人。
注意的是,在建立CNN模型的class中,没有加入输出层softmax,因为我们只想要last hidden layer's activation output。因此,在训练的时候,需要加上一层softmax output layer。
Loss function 使用 categorical-crossentropy loss
C = -\frac{1}{n}\sum_x[ylna + (1-y)ln(1-a)]
求导数:
C'(w_j) = \frac{1}{n}\sum_xx_j(\sigma(z) - y)
C'(b) = \frac{1}{n}\sum_x(\sigma(z) - y)
好处是当误差大的时候更新步伐大,小的时候步伐小,因为取决于实际值和预期值之间的差距,也就是只是取决于误差大小。

3.2 训练

  1. 可以分batch来训练,使用triplet loss的方法。这一步在百度的论文中很关键:挑选出两个不同的说话人,一个说话人挑选两个音频,也就是一个anchor一个positive,另一个说话人挑选出一段作为negative。
  2. 在挑选postive 和 negative的时候,为了提升网络的性能,可以使用预训练训练好的网络,分别看一看embedding,尽量在每一组中,选择最不相似的postive,和最相似的negative,这样能够cover极端情况。


    DNN.png
  3. 一般使用6层,该论文使用的是5层,一层input, 3层hidden layer, 1层output。
  4. 从最后一层隐藏层中得到向量并且使用L2归一。也就是说,对于属于新发言者的给定话语的每一帧,我们使用训练好的DNN中的标准前馈传播计算最后隐藏层的输出激活,然后累积这些激活以形成该发言者的新紧凑表示,也就是 d-vector. L2归一化的解释可以参考附加链接。这样能够使得向量中的每一个值都在一定范围内。
  5. 如果一个说话人注册了多次语音,那么使用这些 d-vector 的平均值来表示说话人。

使用最后一层隐藏层而不是输出层的原因:

  1. 首先,我们可以通过修剪输出层来减少运行时的DNN模型大小,这也使我们能够在运行时使用大量开发说话人而不增加DNN大小(举例说明,我们训练在10000个人或者1000个人的情况下,可以只通过修改最后的softmax层的大小,前面的结构保持不变,这样实现了增加训练类比和数目,特征向量不变)
  2. 使用最后一层隐藏层更能被推广,因为softmax很敏感,一般用来表达哪一个说话人而不是特征向量。

3 DNN 训练中可以加入的技术

3.1 使用Dropout防止过拟合(Overfitting)

我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。


Dropout.png

流程:

  1. 首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变(图3中虚线为部分临时被删除的神经元)


    image.png
  2. 然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)
  3. 恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有所更新)
  4. 重复

为什么dropout防止过拟合?

  1. 取平均的作用: 先回到标准的模型即没有dropout,我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉一半隐藏神经元导致网络结构已经不同,整个dropout过程就相当于对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。
  2. 减少神经元之间复杂的共适应关系: 因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征。从这个角度看dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。

3.2 Maxout激活函数

本来传统的MLP算法在第i层到第i+1层,参数只有一组,然而现在在这一层同时训练n组参数,然后选择激活值最大的作为下一层神经元的激活值。


Figure.png
  1. 要计算i+1层,则是:
    z=W*X+b
    out=f(z)
    f是激活函数,可以是tanh, sigmoid等等。
  2. 使用maxout的话,则是在中间插入隐藏层。maxout本身是一层,但是内在有好几层隐藏。此时 k = 5
    image.png

    z1=w1*x+b1
    z2=w2*x+b2
    z3=w3*x+b3
    z4=w4*x+b4
    z5=w5*x+b5
    out=f(max(z1,z2,z3,z4,z5))
    所以采用maxout的时候,参数个数成k倍增加。它的拟合能力非常强,可以任意逼近凸函数。一般和Dropout一起配合使用。

4 思考

4.1为什么d-vector比i-vector更适应嘈杂环境?

  1. Dropout 和 Maxout使得它在不同环境下适应更快。
  2. GMM 最多只能处理7-9frames,但是DNN可以处理40frames的背景

4.2

混合系统的性能表现比i-vector 和 d-vector都要更好。

5 Reference List

  1. L2范数归一化概念和优势
    https://www.cnblogs.com/Kalafinaian/p/11180519.html
  2. 深度学习中Dropout原理解析
    https://blog.csdn.net/program_developer/article/details/80737724
  3. [论文品读]·d-vector解读(Deep Neural Networks for Small Footprint Text-Dependent Speaker Verification)
    https://blog.csdn.net/xiaosongshine/article/details/89102964
  4. 深度学习(二十三)Maxout网络学习
    https://blog.csdn.net/hjimce/article/details/50414467
  5. Deep Speaker: an End-to-End Neural Speaker Embedding System
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 预处理 Preprocessing 与 i-vector 一样。 2 特征提取 Feature Extract...
    RanleyYu阅读 3,427评论 0 0
  • 承接前面的《浅谈机器学习基础》、《浅谈深度学习基础》和《浅谈自然语言处理基础》,主要参考了《解析深度学习:语音识别...
    我偏笑_NSNirvana阅读 23,648评论 6 67
  • DNN的整个步骤流程如图所示。NN和很多经典机器学习模型(如KNN、SVM)不同,它经过训练后在训练集上的表现未必...
    单调不减阅读 808评论 0 0
  • 第二个Topic讲深度学习,承接前面的《浅谈机器学习基础》。 深度学习简介 前面也提到过,机器学习的本质就是寻找最...
    我偏笑_NSNirvana阅读 15,725评论 7 49
  • 记录一下个人看了王小草深度学习笔记之后的理解,目录如下, Overview 先来看看人工智能Artificial ...
    chenfh5阅读 930评论 0 1