自回归模型,如WaveNet和WaveRNN,虽然能达到高的音频保真度,但有一个明显的缺点:推理速度慢,因为它们是按序列、逐样本生成的过程。即使生成几秒钟的音频也可能耗时很长,这使其难以用于实时应用。基于流的模型提供了一种不同的方法,可以实现并行波形生成,大幅缩短合成时间,同时保持高质量。用于波形生成的归一化流基于流的模型属于生成模型系列,称为归一化流。其基本设想是学习一个可逆映射 $f$,它存在于一个简单的基本分布 $p_Z(z)$(通常是标准高斯分布)与复杂的目标分布 $p_X(x)$(真实音频波形的分布)之间。如果我们能从 $p_Z(z)$ 中采样 $z$ 并计算 $x = f(z)$,就能生成逼真的音频。反之,给定一个音频样本 $x$,我们可以计算 $z = f^{-1}(x)$,并评估其在基本分布下的似然度。变换 $f$ 被构建为一系列更简单的可逆函数:$f = f_L \circ \dots \circ f_2 \circ f_1$。为了使模型能够通过最大似然进行训练,必须满足两个条件:变换 $f$ 必须易于可逆;计算 $f^{-1}$ 应高效。雅可比矩阵 $\frac{\partial f}{\partial z}$ 的行列式必须高效计算。变量变换公式使我们能够计算数据点 $x$ 的精确对数似然: $$ \log p_X(x) = \log p_Z(z) + \log \left| \det \left( \frac{\partial f^{-1}(x)}{\partial x} \right) \right| $$ 等效地,使用反函数定理: $$ \log p_X(x) = \log p_Z(f^{-1}(x)) - \log \left| \det \left( \frac{\partial f(z)}{\partial z} \right) \right|_{z=f^{-1}(x)} $$ 训练涉及在数据集上最大化此对数似然。WaveGlowWaveGlow是基于流的神经声码器的一个显著实例,其灵感来源于最初为图像生成开发的Glow模型。它在梅尔频谱图的条件下,直接将高斯分布映射到语音波形。结构: WaveGlow采用单一的网络结构,可执行正向 ($x \to z$) 和反向 ($z \to x$) 两种变换。其核心组成部分是:仿射耦合层: 这是流的构建模块。它们将输入数据 $z$(或中间激活)分成两半,$z_a$ 和 $z_b$。其中一半($z_a$)通过一个变换网络(通常是像WaveNet的非因果扩张卷积那样的卷积网络)来计算缩放参数 $s$ 和偏置参数 $t$。这些参数随后使用仿射变换来变换另一半($z_b$):$z'_b = s \odot z_b + t$。第一半保持不变:$z'_a = z_a$。此操作易于可逆:$z_b = (z'_b - t) / s$。重要的是,此变换的雅可比行列式仅仅是缩放因子 $s$ 的乘积,使其计算高效。WaveGlow对音频略作修改,根据梅尔频谱特征应用此变换。可逆1x1卷积: 在耦合层之间,可逆1x1卷积用于置换特征图的通道。这使得来自不同通道的信息能够在随后的耦合层之间混合,从而提升模型的表示能力。1x1卷积的雅可比行列式也易于计算。digraph G { rankdir=LR; node [shape=box, style=filled, fillcolor="#e9ecef", fontname="sans-serif"]; edge [fontname="sans-serif"]; subgraph cluster_waveglow { label = "WaveGlow 变换 (单步)"; bgcolor="#f8f9fa"; style="dashed"; Z_in [label="输入 z (或特征)"]; Split [label="通道拆分", shape=ellipse, fillcolor="#bac8ff"]; Za [label="z_a"]; Zb [label="z_b"]; ConvNet [label="卷积网络 (例如,扩张卷积)\n梅尔条件", fillcolor="#a5d8ff"]; Params [label="s, t"]; Affine [label="仿射变换:\nz'_b = s * z_b + t", shape=ellipse, fillcolor="#bac8ff"]; Zpa [label="z'_a = z_a"]; Zpb [label="z'_b"]; Concat [label="通道拼接", shape=ellipse, fillcolor="#bac8ff"]; InvConv [label="可逆 1x1 卷积", fillcolor="#91a7ff"]; Z_out [label="输出 z'"]; Z_in -> Split; Split -> Za [label=" 部分 1"]; Split -> Zb [label=" 部分 2"]; Za -> ConvNet; Mel [label="梅尔频谱图", shape=cds, fillcolor="#ffec99"] Mel -> ConvNet [style=dashed]; ConvNet -> Params; Zb -> Affine; Params -> Affine; Za -> Zpa [style=invis]; # Helper for layout Affine -> Zpb; Zpa -> Concat [style=invis]; # Helper for layout Zpb -> Concat; Concat -> InvConv; InvConv -> Z_out; # Align parts for clarity {rank=same; Split; ConvNet;} {rank=same; Za; Zb; Params;} {rank=same; Zpa; Affine;} {rank=same; Zpb; Concat;} } Noise [label="高斯噪声 z", shape=cylinder, fillcolor="#b2f2bb"]; WaveGlowNet [label="WaveGlow 网络\n(多步 f)", fillcolor="#74c0fc"]; Audio [label="音频波形 x", shape=cylinder, fillcolor="#ffc9c9"]; Noise -> WaveGlowNet [label=" 逆变换 f(z, mel)"]; WaveGlowNet -> Audio; # Connect Mel to the overall network concept MelGlobal [label="梅尔频谱图", shape=cds, fillcolor="#ffec99"] MelGlobal -> WaveGlowNet [label=" 条件"]; }概述了WaveGlow在推理时的变换过程。高斯噪声通过仿射耦合层和可逆1x1卷积的多个步骤,以梅尔频谱图为条件,生成输出音频波形。每个步骤都是可逆的,从而可以通过最大似然进行训练。训练与推理: WaveGlow通过最大化真实音频波形在其对应梅尔频谱图条件下的对数似然进行训练。这涉及将音频 $x$ 通过正向变换 $f^{-1}$ 得到 $z = f^{-1}(x|\text{mel})$,然后最大化 $\log p_Z(z)$ 加上所有层的对数行列式之和。推理是高度并行且高效的。您从标准高斯分布中采样一个随机向量 $z$,提供条件梅尔频谱图,并对网络进行单次正向传播,得到 $x = f(z|\text{mel})$。由于操作(卷积、仿射变换)可以在GPU上有效并行化,合成速度明显快于自回归模型。FloWaveNetFloWaveNet是另一种基于流的声码器结构,与WaveGlow有相似之处,但其耦合层使用不同的结构,在仿射耦合块中融入了WaveNet扩张因果卷积的构想。与WaveGlow一样,它旨在通过学习从噪声到音频的可逆变换,在声学特征的条件下实现快速、并行的波形合成。优点与考量优点:快速推理: 主要优势。并行生成使合成速度比自回归模型快几个数量级。高保真度: 能够生成高质量、听感自然的语音,通常可与自回归模型媲美。精确似然训练: 训练基于最大化数据的精确对数似然,提供了一个稳定且理论有据的目标函数,这与GANs不同,GANs可能更难训练。考量:模型大小: 基于流的模型可能相当庞大,因为它们内部堆叠了耦合层和变换网络。训练成本: 训练这些模型需要大量的计算资源和大型数据集,与其他大型深度学习模型类似。稳定性: 尽管能够实现高保真度,但有时可能被认为略逊于最佳自回归模型,可能会生成偶尔的伪影,尽管这一差距已大幅缩小。基于流的声码器,如WaveGlow,代表着神经语音合成的重大进展,在音频质量和推理速度之间取得了极佳的平衡。它们在现代TTS系统中得到广泛应用,在这些系统中低延迟并非首要限制(与流式ASR不同),但快于实时合成的能力非常受欢迎。它们为自回归模型缓慢的生成速度以及基于GAN的声码器可能不太稳定的训练提供了一个有说服力的替代方案。