WaveNet相关原理及细节介绍

时间:2024-04-02 18:48:45

        Neural vocoder层出不穷, 但是WaveNet仍然是重中之重。作为后续变种的基础和参考对比目标,还是需要先对WaveNet进行比较深入的了解,才能为后续演变后的vocoder的学习打下基础。这边文章算是查学习了网上很多相关资料的综合版本,做个云笔记,大家一起讨论学习。文章大概的一个形式是顺着原文的走势, 翻译的基础上加上细节的展开。

摘要:

       文章主要提出了一个能够生成原始音频波形的深度神经网络,叫做WaveNet。它是一个完全的概率自回归模型,即基于之前已经生成的所有样本,来预测当前音频样本的概率分布。文章将会展示WaveNet可以在每秒数万采样率的音频数据上高效的进行训练。当WaveNet被应用到语音合成方面时,不论是英文还是中文普通话,人类听众评价其在自然度上,相比于之前最好的参数式以及拼接式系统,可以获得当前业内最佳的性能。只使用一个WaveNet模型的情况下,可以以相同的保真度捕获很多说话人的特征,并可以在给出说话人身份的条件下,在多说话人之间进行切换。当WaveNet模型应用于音乐合成,文章发现其可以产生新颖的高真实度的音乐片段。同时,文章还展示了其作为判别模型,在音素识别中所获得的可观的结果。

       注:目前文中所介绍的WaveNet的三个基本应用,TTS,音乐合成以及音素识别。但是后面的侧重方向是面向TTS以及作为Vocoder的介绍,所以不相关的部分就先略去了。

介绍:

       受近年来对图像、文本等复杂分布进行建模的神经自回归生成模型的启发,本文研究了原始音频的生成技术。使用神经网络架构作为条件概率分布的乘积对像素或者单词的联合概率进行建模取得了最佳效果。

       值得一提的是,这些架构可以对上千个随机变量的概率分布进行建模,如PixelRNN中的64 * 64的像素。文本要关注的是,类似的方法能否可以宽带的原始音频波形上完成该任务。这些音频信号具有非常高的短时分辨率,每秒至少16000个样本。

 

WaveNet相关原理及细节介绍

       本文将介绍WaveNet,一个基于PixelCNN架构的音频生成模型。本文展示了WaveNet可以生成原始语音信号,其自然度由人类裁判进行主观评分,这在之前的语音合成领域从未报道过。为了处理原始音频生成中所需的大跨度时间依赖问题,本文基于扩大因果卷积开发了新的框架,使其具有非常大的感受野。本文展示的模型可以基于多说话人进行训练,通过给出说话人身份,可以产生不同风格的语音。

WaveNet:

       本文介绍了一个用于直接生成原始音频波形的新的生成模型。音频波形的联合概率可以分解成如下条件概率分布的乘积:

WaveNet相关原理及细节介绍

       因此,每一个语音样本都依赖于之前时间步的所有样本。

       与PixelCNNs类似,条件概率分布是通过若干卷积层进行建模的。网络中没有下采样层,模型的输出与输入具有相同的时间维度。模型使用softmax层输出下一个样本在类别上的分布,使用最大对数似然方法对参数进行优化。由于对数似然易于处理,我们在验证数据集上对超参数进行优化,可以容易测定模型是否过拟合或者欠拟合。

扩大因果卷积

WaveNet相关原理及细节介绍

       WaveNet的主要成分为因果卷积。通过使用因果卷积,可以确保模型在对数据建模的时候不会违反数据的顺序:模型在t时刻输出的预测p (xt+1 | x1; :::; xt)不会依赖任何一个未来时刻的数据xt+1; xt+2; : : : ; xT,如图2所示。对图像而言,与因果卷积等价的是遮蔽卷积,可以在使用前通过构建一个遮蔽张量与卷积核进行点乘来实现。对于音频这样的一维数据来说实现起来更简单,将正常卷积的输出偏移几个时间步骤即可。 

       在训练阶段,由于真实数据x的所有时间步都是已知的,因此可以并行地进行所有时间步的条件概率预测。在模型生成阶段(也就是测试阶段)推断阶段,所预测结果是顺序串行的:当每一个样本被预测后,其被传回网络用于下一个样本的预测。

       由于使用因果卷积的模型中没有循环连接,通常训练起来比RNN更快,特别是对于很长句子的训练。然而,因果卷积存在的一个问题是它需要很多层,或者需要很大的卷积核来增大其感受野。例如,在图2中,感受野只有5(= 层数 + 卷积核长度 - 1)。因此,本文使用扩大卷积(dilated convolution)使感受野增大几个数量级,同时不会显著增加计算成本。

       扩大卷积(也称为带洞卷积),是卷积核在应用于面积比自身长度大的数据上进行卷积时跳过输入值(跳步)的卷积方法。这与通过扩大卷积核并且用零补齐的效果是一样的,但是本文这样的效率更高。相比于正常卷积,扩大卷积可以有效地使网络执行粗粒度的卷积操作。这与下采样或者跳步卷积类似,只是这里的输出保持与输入同样大小。作为特例,扩大因子=1的扩大卷积就是标准卷积。图3描绘了扩大因子为1,2,4,8的扩大因果卷积。扩大卷积之前在不同的背景中被使用过,如信号处理,图像分割。

WaveNet相关原理及细节介绍

 

       堆叠式扩大卷积使得网络只通过少数几层便拥有了非常大的感受野,同时保留了输入分辨率和计算效率。本文中,扩大系数每层都翻倍直到上限,然后重复循环,如:1; 2; 4; : : : ; 512; 1; 2; 4; : : : ; 512; 1; 2; 4; : : : ; 512。

       这种设置的背后有两个直觉。首先,扩大因子随着深度增加而指数增长,这可以使感受野呈指数级增大。例如每一组1;2;4;:::;512这样的卷积模块都拥有1024大小的感受野, 可视为一个与1*1024卷积等价的更高效的(非线性)判别式卷积操作 。其次,将多组这样的卷积模块堆叠起来会进一步增大模型容量和感受野大小。

       注:这里首先要再强调一下使用扩大卷积的原因。这是因为想要把一句话生成的够通顺, 模型需要考虑字与字、词与词、句子与句子之间的连贯,因此至少需要回看几秒之前的语音信号。然而,就16k的采样而言,每秒语音信号就有16000个采样点,用原始方法的话,几秒的语音信号就会使得模型复杂到无法训练。因此,引入扩大卷积在不增加计算复杂度的同时,可以增加所关联的时间范围,这里给一个帮助理解的图在下面。 如文中所指出的,9层的扩大卷积作用相当于1层1*1024的卷积核,但是前者更好训练,非线性表征能力更强。另外,卷积可以分为线性和非线性,其中线性的因果卷积就相当于是LPC。最后,之所以放个动图在上面,是为了帮助对整个过程的理解,大家可以边看动态过程边细细体会。

WaveNet相关原理及细节介绍

Softmax分布

       对于单个音频样本的条件概率分布建模的一个方法是使用混合模型,如混合密度网络或者条件高斯尺度混合模型(MCGSM)。然而,van den Oord等人指出softmax分布倾向于更有效,即便数据是隐含式的连续数据(图像的像素光照强度或者音频采样值)。原因之一是类别分布更灵活,并且由于对数据的形状没有预先假设,所以它更容易对任意分布进行建模。

       因为原始音频通常保存为16位整数序列(每个时间步),对每个时间步骤的所有可能的分类,softmax层将需要输出65536个类的分布概率,为了更容易处理,我们先对数据实施一个mu律压扩变换,然后量化成256个可能值:

WaveNet相关原理及细节介绍

       这里−1 < xt < 1 并且mu = 255。与简单的线性量化相比,这个非线性量化处理可以对数据进行更好的重构。特别是对于语音数据,本文发现这样重构后的信号听起来非常接近原始信号。

门控**单元:

        本文使用了与gated PixelCNN所使用的相同的门控**单元:

WaveNet相关原理及细节介绍

        这里*代表卷积操作,sigma前面的符号代表点乘。sigma(·)是sigmoid函数,k是层数索引,f和g是滤波器和门,W是可学习的卷积核。我们在最初的试验中观察到,对于音频信号建模,这个非线性操作显著优于ReLU**函数。

残差和跳步连接:

WaveNet相关原理及细节介绍

       网络结构中使用了残差和参数化跳步连接,以加速收敛,以使得梯度下降能在更深的模型中传播。 在图4中展示了模型中的一个残差模块,网络中会将多个这样的模块堆叠在一起。

       注:这里可能是全文最难理解的部分了,再加上后面的条件输入,基本上就已经看蒙了。

       首先,说下具体的连接方式到底是啥样的,这里给一张网上的图,虽然是用于ASR的,但是中间模块的WaveNet可以帮助对细节和连接方式的理解。

WaveNet相关原理及细节介绍

       随后,说下门控**单元中为啥使用tanh以及sigmoid并且最后要乘在一起?语音波形作为输入信号,会在+1和-1之间来回震荡。因而,我们希望输出仍是一个语音信号波形,即在+1和-1之间来回震荡。如果使用了ReLU,我们会发现值域中并不包括小于零的部分,那么语音信号中的0~-1的部分就缺失了。

WaveNet相关原理及细节介绍

       因此,文中使用了值域包含+1至-1之间的正负对称的奇函数tanh。 

       而sigmoid的值域在0~+1之间,tanh的输出为波形,再乘以一个 介于0~1的值,那么这样就是相当于改变了波的振幅。

引入条件的WaveNet

      给定一个额外的输入h,WaveNet可以根据给定的输入对语音信号的条件分布建模,则公式(1)就变成为如下:

WaveNet相关原理及细节介绍

       基于额外的变量进行条件建模,我们可以引导WaveNet模型的生成来产生具有所期望特点的音频。例如,对于多说话人的设置,我们可以将说话人身份作为模型的额外输入,来选择输出某个特定说话人的音频。类似的,对于TTS任务,我们需要额外的关于文本的信息作为模型的额外输入。

       基于额外变量进行条件建模有两种不同的方式:全局条件和局部条件。全局条件的特点是,通过单一的隐式表达h作为额外输入,在所有时间步上影响输出分布,例如被嵌入到TTS模型中的说话人身份。因此,公式(2)的**函数则变成了:

 

WaveNet相关原理及细节介绍

       这里V*,k(懒得插公式图片了)是一个可学习的线性投影,VT*,k h变量则是在所有时间节点上传播。

       对于局部条件的建模,本文中涉及到第二个时间序列ht,可以是比语音信号更低采样的特征,例如TTS模型中的语言学特征。本文首先使用转置卷积网络(上采样)将音频信号映射到一个新的时间序列y = f(h),使其与语音信号具有相同的分辨率,然后在**单元中使用,如下所示

WaveNet相关原理及细节介绍

       这里Vf,k*y是一个1*1卷积。作为转置卷积网络的替代方法,也可以使用Vf,k*h,然后沿时间重复这些值,但是在本文的实验中,这个方法的表现稍差一些。

       注:这部分需要进一步理解局部条件输入。首先是理解在TTS任务中,文本是如何转成语音的。这里使用了反卷积:Transpose Conv.。其做法是先训练一个CNN的语音转文字模型(STT)h = F(y),然后转换成反卷积模型y = f(h),通过这个反卷积模型,将文字转换成语音。然而,反卷积产生的语音品质非常糟糕,因此一般不直接拿来使用,而是作为WaveNet的条件引入。因此,可以把WaveNet看作为一个修饰器,将人工产生的(反卷积结果)的语音修饰为更接近人类的声音。而在TTS的训练过程中,输入x则是作为ground truth的真实语音。这里的Vf,k以及Vg,k是一个1*1的卷积核,但是其真实作用有推断是作为改变声道数目(合并声道或是提升通道)的作用,因此有猜测这里会产生不只一种语音,会产生数个声道不同测色的声音,通过这个可训练的1*1的卷积做线性组合,混合出更多种类的声音当局部条件。 加入条件后的门控**单元如下所示:

WaveNet相关原理及细节介绍

另外,将WaveNet作为声码器时,需要把局部条件换成为语音特征(如mel特征)。如果明白了上面的内容的话,作为声码器的使用也不难理解。下面附上一张图比较通俗易懂的图,来再次帮助加深理解局部条件引入后的WaveNet。作为声码器使用的WaveNet的更多细节,可以参考以下论文:

[1] Tamamori, A., Hayashi, T., Kobayashi, K., Takeda, K., & Toda, T. (2017, August). Speaker-Dependent WaveNet Vocoder. In Interspeech (pp. 1118-1122).

[2] Hayashi, T., Tamamori, A., Kobayashi, K., Takeda, K., & Toda, T. (2017, December). An investigation of multi-speaker training for WaveNet vocoder. In 2017 IEEE Automatic Speech Recognition and Understanding Workshop (ASRU) (pp. 712-718). IEEE.

[3] Shen, J., Pang, R., Weiss, R. J., Schuster, M., Jaitly, N., Yang, Z., ... & Saurous, R. A. (2018, April). Natural tts synthesis by conditioning wavenet on mel spectrogram predictions. In 2018 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 4779-4783). IEEE.

WaveNet相关原理及细节介绍

上下文堆栈:

       本文已经提出了多种不同的方法来增加WaveNet的感受野大小:增加扩大卷积模块数,模块内使用更多的扩大卷积层,更大的卷积核,更大的扩大因子,或者他们的组合。增加感受野的另外一个补充方法是,使用一个独立的更小的上下文堆栈来处理语音信号的长跨度信息,并局部调试一个更大的WaveNet只用来处理语音信号的更短的局部信息(在结尾处截断)。可以使用多个变长的具有不同数量隐藏单元的上下文堆栈,拥有越大感受野的堆栈其每层含有的隐藏单元越少。上下文堆栈还可以使用池化层来降低频率,这使得计算成本被控制在合理范围,也与用更长的跨度对时间相关性建模会使体量更小的直觉相吻合。

相关实验:

多话者语音生成:

       首先是*形式的语音生成(并没有文本作为条件)。本文使用了VCTK数据集中的英文多说话人语料,并仅基于说话人作为条件建模。模型中的条件为说话人的ID(采用one hot 编码)。数据集总共包含109位不同说话人的44小时语音数据。

       由于模型没有基于文本条件,因此它会产生不存在的但是听起来很流畅、语调逼真的很像人类语言的词语。这与语言或图像的生成模型很相似,其生成的样本咋一看很逼真,细看就不自然了。生成的语音在长跨度上缺乏连贯性,部分是由于受模型感受野大小的限制(大概300毫秒),这意味着模型只能记住它产生的最后2-3个音素。

       单个WaveNet可以通过one-hot编码对任意一个说话人的语音进行建模。这确认了单个模型也能够从数据中捕获所有109人特征的足够强大的能力。我们观察到,与在单人数据集上训练相比,增加训练集的说话人数量可以在验证集上获得更好的性能。这表示出WaveNet的内部表达在多个说话人中是共享的。

       最后,我们观察到,模型从音频中不但提取到了语音特征,还提取到了其他的特征,如音响质量,说话人的呼吸和嘴部动作等。

文本合成语音:

       第二个实验选择TTS。本文使用Google北美英语和中文普通话TTS系统使用的单说话人语音数据集。北美英语数据集包含24.6小时数据,中文普通话数据集包含34.8小时数据,两个数据集都由专业女播音员录制。

       在TTS任务中,首先使用基于从输入文本获得的语言学特征作为WaveNet的局部条件。另外本文还将语言学特征+对数基频(F0)一起作为条件训练了WaveNet。两种语言都训练了外部模型,用来从语言学特征预测对数基频和音长。WaveNet的感受野是240毫秒。还构建了HMM单元选择拼接语音合成器作为基于例句的基线,以及LSTM-RNN统计参数语音合成器作为基于模型的基线。由于使用相同的数据集和语言学特征来训练基线语音合成器和WaveNet模型,结果的性能是有可比性的。

       为了评估WaveNet的性能,我们实施了主观配对比较测试和平均意见得分(MOS)测试。在主观配对比较测试中,听完每一对样本,评分者会选择他们更喜欢哪一个样本,如果没有倾向也可以选择中立。在MOS测试中,听完每一个合成结果,评分者会对语音的自然度进行5分制打分(1:很差,2:差,3:一样,4:好,5:很好),详细情况请参考附录B。

       图5展示了主观配对比较测试的结果之一(全部测试结果请看附录B)。从结果来看,WaveNet在两种语言上都优于基线的统计式和参数式语音合成器。我们发现用语言学特征作为条件所训练的WaveNet,其合成的语音有很自然的断句,但有时候会弄错重音而使韵律不自然。这可能是由于F0轮廓的长时依赖造成的:WaveNet的感受野只有240毫秒,不能捕获这么大跨度的依赖。而同时用语言学特征和F0一起作为条件训练的WaveNet就没有这个问题:预测F0的外部模型以低频(200Hz)运行,所以它可以学到存在于F0轮廓中的大跨度依赖。

WaveNet相关原理及细节介绍

       表1展示了MOS测试结果。从表中可以看出WaveNet的自然度在5分制MOS评分中超过了4分,比基线系统高出一大截。它们是目前MOS得分的最高纪录。合成语音与人类自然语音的MOS得分差距,在美式英语中从0.69下降到0.34(51%),中文普通话从0.42下降到0.13(69%)。

WaveNet相关原理及细节介绍

文本合成语音实验细节:

       使用16k赫兹采样率的语音数据,构建了基于HMM的单元选择语音合成器和WaveNet TTS系统。尽管LSTM-RNN是基于22.05kHz采样率的语音数据训练的,16kHz采样率的语音在合成时使用Vocaine声码器的函数进行了重采样。基于LSTM-RNN的统计参数模型和基于HMM的单元选择语音合成器都是基于16位线性PCM语音数据集构建,而WaveNet语音合成器基于同一数据集的8位mu律编码进行的训练。

       语言学特征包括音素,音节,词,短语以及句子特征(例如音素id,音节重音,词内音节数量,音节在短语中的位置),以及帧位置和音素时长特征。在训练阶段,每5毫秒对这些特征进行音素水平的强制对齐,从而把这些特征与语音信号关联在一起。我们使用基于LSTM-RNN的音长预测模型,以及基于自回归CNN的对数基频(F0)预测模型。使用最小均方差(MSE)训练模型。请注意,WaveNet生成的语音信号没有经过任何后处理。

       主观聆听测试是众包盲测,使用没在训练数据集中出现的100个句子作为评估数据。每一位评测者可以评估最多8个北美英语或最多63个中文普通话句子。测试句子随机选择并播放给测试者。在配对比较测试中,每一对语音样本都是不同模型对同一段文本的合成结果。在MOS测试中,每个句子都隔离的播放给评测者。在配对比较测试中每对句子都由8位评测者打分,在MOS测试中每个句子由八位评测者进行打分。评测者都是说母语的人并且评测是付费的。在进行偏向性和MOS评分时,未使用头戴式耳机的评分(约40%)被排除在外。表2展示了图5种配对比较测试的所有细节信息:

WaveNet相关原理及细节介绍

    以上是关于WaveNet的相关原理及介绍,不过还是推荐大家仔细读论文,然后好好看看code。