Blow 用于非并行原始音频语音转换的单尺度超条件流
摘要
原始音频生成的端到端模型是一个挑战,特别是如果它们必须处理非并行数据,这在许多情况下都是理想的设置。 语音转换是其中一种情况,模型必须在录音中模拟说话者。 在本文中,我们提出了 Blow,一种使用超网络条件 (hypernetwork conditioning) 在原始音频之间执行多对多语音转换的单尺度归一化流。 Blow 是使用单个说话者标识符逐帧使用非并行数据进行端到端训练的。 我们表明 Blow 与现有的基于流的架构和其他竞争基线相比具有优势,在客观和主观评估中获得相同或更好的性能。 我们通过消融研究进一步评估其主要组成部分的影响,并量化许多属性,例如必要的训练数据量或对源或目标说话者的偏好。
Introduction
原始音频波形的端到端生成仍然是当前神经系统的挑战。处理原始音频比处理中间表示要求更高,因为它需要更高的模型容量和通常更大的感受野。事实上,即使在 16 kHz 的采样率下,生成高级波形结构也一直被认为是棘手的,并且只是在自回归模型、生成对抗网络以及最近的,标准化流(normalizing flow)。尽管如此,没有长期上下文信息的生成仍然会导致次优结果,因为现有架构难以捕获此类信息,即使它们采用理论上足够大的感受野。
语音转换是一项任务,即在保留口语内容的同时,将源说话者身份替换为有针对性的不同身份。它有多种应用,主要应用在医疗、娱乐和教育领域。语音转换系统通常是一对一或多对一的,从某种意义上说,它们只能从单个或最多少数几个源说话人转换为唯一的目标说话人。虽然这对于某些情况可能已经足够了,但它限制了它们的适用性,同时也阻止了它们从多个目标中学习。此外,语音转换系统通常以严格监督的方式使用并行数据进行训练。为此,需要输入/输出录音对,相应的源/目标说话人以相对准确的时间对齐方式发音相同的基本内容。收集此类数据是不可扩展的,并且在最好的情况下会出现问题。因此,研究人员正在转向使用非平行数据。然而,非并行语音转换仍然是一个悬而未决的问题,其结果与使用并行数据的结果相差甚远。
在这项工作中,我们探索使用标准化流(normalizing flow)进行非并行、多对多、原始音频语音转换。我们提出了 Blow,这是一种规范化流(normalizing flow)架构,可以学习在最少的监督下端到端地转换录音。它仅使用单独的音频帧,以及在此类帧中表示说话者身份的标识符或标签。 Blow 继承了 Glow 的一些结构,但引入了一些改进,除了产生更好的可能性之外,还证明对有效的语音转换至关重要。改进包括使用单尺度结构、每个块中少量的流、前向-后向转换机制、基于超网络的条件模块、共享说话人嵌入以及许多原始音频的数据增强策略。我们客观和主观地量化 Blow 的有效性,获得与许多基线相当甚至更好的性能。我们还进行了一项消融研究,以量化每个新组件的相对重要性,并评估其他方面,例如对源/目标说话者的偏好或目标分数与训练音频量之间的关系。
## 相关工作
据我们所知,没有使用标准化流进行语音转换的已发表作品,一般只有三个使用标准化流进行音频转换。Waveglow和FloWavenet 同时提出使用归一化流作为从梅尔谱图到原始音频的解码器。 他们的模型基于 Glow,但在仿射耦合网络中具有 WaveNet 结构。 AdaFlow采用标准化流进行音频异常检测和跨域图像转换。 他们建议使用与类别相关的统计数据来自适应地标准化流激活,就像 AdaBN 对常规网络所做的那样。
2.1 归一化流
基于 Barlow 的冗余减少原理,一些学者已经使用了可逆体积保留神经架构。最近,Dinh 等人提出通过图像生成的最大似然执行阶乘学习,仍然使用体积保留变换。 Rezende 和 Mohamed 以及 Dinh 等人介绍了非体积保持变换的使用,前者采用标准化流的术语以及仿射和径向变换的使用。 Kingma 和 Dhariwal 提出了一种利用 1×1 可逆卷积的有效图像生成和处理架构。尽管与生成对抗网络、自回归模型或变分自编码器相比很少受到关注,但基于流的模型具有许多使它们特别有吸引力的优点,包括精确推理和似然评估、高效合成、有用的潜在空间,以及一些节省梯度内存的潜力。
2.2 非并行语音转换
非并行语音转换在使用经典机器学习技术的方法方面有着悠久的传统。然而,今天,神经网络在该领域占据主导地位。一些方法利用自动语音识别或文本表示来从声学中分离内容。这很容易去除源说话者的特征,但进一步挑战了生成器,它需要额外的上下文来正确定义目标语音。许多方法采用声码器来获得中间表示并作为生成模块。这些通常使用变分自编码器、生成对抗网络或两者在中间表示之间进行转换。最后,有一些作品在原始音频上采用了全神经架构。在这种情况下,架构的某些部分可能是经过预训练的,也可能不是端到端学习的。除了语音转换,还有一些处理非并行音乐或音频转换的作品:Engel 等提出了一种用于音符合成和乐器音色转换的 WaveNet 自动编码器;莫尔等人在一般音乐翻译中加入了领域混淆损失,而 Nachmani 和 Wolf 在歌声转换中加入了身份不可知损失;哈克等人使用序列到序列模型进行音频风格转换。
Flow-based 生成模型
基于流的生成模型学习从输入样本 \(x ∈ X\) 到潜在表示 \(z ∈ Z\) 的双射映射,使得 \(z = f(x)\) 和 \(x = f−1(z)\)。 这个映射 \(f\),通常称为归一化流,是一个由神经网络参数化的函数,由 \(k\) 个可逆变换 \(f = f_1 ◦ · · · ◦ f_k\) 组成。 因此,具有相同维度的 \(x\) 和 \(z\) 之间的关系可以表示为
![blow-al1](/images/blow-al1.png)
blow-al1
对于生成方法,我们希望对概率密度 \(p(X)\) 进行建模,以便能够生成真实的样本。 这通常是难以直接处理的,但我们现在可以使用 \(f\) 来模拟精确的对数似然
![blow-al2](/images/blow-al2.png)
blow-al2
对于单个样本 \(x\),并使用变量的变化、反函数定理、组合性和对数属性,我们可以写出
![blow-al3](/images/blow-al3.png)
blow-al3
其中\(∂f_i(h_{i-1})/∂h_{i-1}\) 是\(h_{i-1}\) 处\(f_i\) 的雅可比矩阵,对数行列式测量由\(f_i\) 引起的对数密度的变化。 在实践中,人们选择带有三角雅可比矩阵的变换 \(f_i\) 来实现行列式的快速计算并确保可逆性,尽管这些可能不像更复杂的那样具有表现力。 类似地,为 \(p(z)\) 选择各向同性单位高斯以允许快速采样和直接操作。
已经为图像生成提出了 \(f\) 和 \(f_i\) 的许多结构和参数化,最流行的是 RealNVP 和 Glow 。最近,其他工作提出了在多个上下文中进行更好的密度估计和图像生成的改进。 RealNVP 使用具有批量归一化、屏蔽卷积和仿射耦合层的块结构。它结合了 2×2 挤压操作和交替的棋盘和通道掩码。 Glow 更进一步,除了用激活归一化 (ActNorm) 代替批量归一化之外,还通过可逆的 1×1 卷积引入了通道混合。其架构由 3 到 6 个块组成,由 2×2 挤压操作和 32 到 64 步流程组成,包括 ActNorm、1×1 可逆卷积和仿射耦合的序列。对于仿射耦合,使用了三个带有整流线性单元 (ReLU) 的卷积层。 Glow 和 RealNVP 都具有多尺度结构,可以分解出不同分辨率下 z 的分量,目的是定义不同粒度的中间表示级别。这也是其他图像生成流程和两个现有的音频生成流程所遵循的策略。
Blow
Blow 从 Glow 继承了一些结构,但结合了我们展示的一些修改,这些修改是有效语音转换的关键。主要是使用(1)单尺度结构,(2)每个块中的flow较少,(3)前向后向转换机制,(4)超调节模块,(5)共享说话人嵌入,以及 (6) 一些原始音频的数据增强策略。我们现在提供一般结构的概述(图 1)。
![blow-fig1](/images/blow-fig1.png)
blow-fig1
我们使用具有替代模式和一系列流的步骤的一维 2x 挤压操作(图 1,左)。流的步骤由作为通道混合器的线性可逆层(类似于二维情况下的 1×1 可逆卷积)、ActNorm 和具有仿射耦合的耦合网络组成(图 1,中心)。耦合网络由具有 ReLU 激活的一维卷积和超卷积形成(图 1,右)。耦合网络的最后一个卷积和超卷积的核宽度为3,而中间卷积的核宽度为1(我们使用512×512通道)。相同的说话人嵌入馈送所有耦合网络,并且独立地适用于每个超卷积。按照惯例,我们将输出 z 与单位各向同性高斯进行比较,并优化由 z 的维数归一化的对数似然 L(方程 1)。
4.1 单尺度结构
除了上述处理中间级别表示的能力外,多尺度结构被认为可以促进梯度流,因此有助于训练非常深的模型,如归一化流。在这里,在初步分析中,我们观察到说话者身份特征几乎只出现在较粗略的表示水平上。此外,我们发现,通过去除多尺度结构并跨块携带相同的输入维度,不仅梯度流动没有问题,而且还获得了更好的对数似然(见下文)。
我们认为,梯度仍然流动而不分解块激活的事实是因为损失函数中的对数行列式项仍然在每个流程步骤中分解(附录 A)。因此,一些梯度仍然穿梭回到相应的层和下面。我们以某种方式获得了具有单尺度结构的更好对数似然的事实,因为块激活现在在后续块中进行进一步处理。然而,据我们所知,在当前图像生成流程的基于可能性的评估中似乎忽略了这一方面。
4.2 Many blocks
基于流的图像生成模型处理 32×32 和 256×256 像素之间的图像。对于原始音频,16 kHz 下 256 个样本的一维输入对应于 16 ms,这不足以捕获任何有趣的语音结构。音素持续时间可以在 50 到 180 毫秒之间,我们需要更多的长度来模拟一些音素转换。因此,我们需要增加模型的输入和感受野。为此,基于流的音频生成模型选择了更积极的压缩因子,以及膨胀高达 28 的 WaveNet 式耦合网络。相比之下,在 Blow 中,我们选择使用许多具有相对每个流程步骤很少。特别是,我们使用 8 个块,每个块有 12 个流(8×12 结构)。由于每个块都有 2 次挤压操作,这意味着总共挤压 28 个样本。
考虑内核宽度为 3 的两个卷积,一个 8×12 结构产生大约 12500 个样本的感受野,在 16 kHz 下,对应于 781 ms。但是,为了允许更大的批量大小,我们使用 4096 个样本的输入帧大小(16 kHz 时为 256 毫秒)。如果我们在单词中间切入,这至少足以容纳一个音素和一个音素转换,并且与 WaveNet 等其他成功模型的感受野相当。 Blow 在没有上下文的情况下逐帧运行;我们承认这可能不足以对依赖说话人的长距离韵律进行建模,但我们相信这足以对核心说话人身份特征进行建模。
4.3 前向后向转换
在基于 Glow 的模型中执行图像处理 或类条件 的默认策略是在 \(z\) 空间中工作。这具有许多有趣的特性,包括执行渐进式更改或插值的可能性,以及基于小数据的小样本学习或操作的潜力。然而,我们观察到,对于语音转换,遵循此策略的结果在很大程度上并不令人满意(附录 B)。
我们不使用 \(z\) 来执行身份操作,而是将其视为与身份无关的表示。我们的想法是,指定 \(x\) 的某些实际输入特征的任何提供条件都应该有助于将 \(x\) 转换为 \(z\),特别是如果我们考虑最大似然目标。也就是说,了解输入的条件/特征应该有助于发现被所述条件/特征隐藏的进一步相似性,从而有助于学习。按照这个思路,如果在从 \(x\) 到 \(z\) 的流中的多个层次的条件化逐渐使我们进入一个无条件的 \(z\) 空间(附录 C.3),那么,当用不同的条件从 \(z\) 转换回 \(x\) 时,那还应该逐步将这个新条件的特征印在输出 \(x\) 上。 Blow 使用源说话者标识符 \(y_S\) 将 \(x(S)\) 转换为 \(z\),使用目标说话者标识符 \(y_T\) 将 \(z\) 转换为转换后的音频帧 \(x(T)\)。
4.4 Hyperconditioning
在基于流的模型中引入条件的一个简单的地方是耦合网络,因为不需要计算雅可比矩阵,也没有可逆性约束。 此外,在仿射通道耦合的情况下,耦合网络负责执行大部分转换,因此我们希望它具有强大的表示能力,可能会通过进一步的调节信息来增强。 调节耦合网络的常用方法是向其输入层添加或连接一些表示。 然而,根据我们观察到的连接往往被忽略并且加法不够强大,我们决定直接使用卷积核的权重进行调节。 也就是说,条件表示决定了卷积算子采用的权重,就像超网络所做的那样。 我们在耦合网络的第一层进行(图 1,右)。
使用一维卷积,并给定一个输入激活矩阵 \(H\),对于第 \(i\) 个卷积过滤器,我们有:
![blow-al4](/images/blow-al4.png)
blow-al4
其中 \(∗\) 是一维卷积算子,\(W_y^{(i)}\) 和 \(b_y^{(i)}\) 分别表示条件 \(y\) 施加的第 \(i\) 个内核权重和偏差。 一组 \(n\) 个条件相关的核和偏置 \(K_y\) 可以通过以下方式获得
![blow-al5](/images/blow-al5.png)
blow-al5
其中 \(g\) 是一个适配器网络,它将条件表示 \(e_y\) 作为输入,而这又取决于条件标识符 \(y\)(在我们的例子中是说话者身份)。 向量 \(e_y\) 是一种嵌入,可以在说话者的某些预先计算的特征表示中固定或初始化,或者如果我们需要独立模型,则可以从头开始学习。 在本文中,我们选择独立版本。
4.5 Structure-wise shared embeddings
我们发现每个耦合网络学习一个 \(e_y\) 通常会导致次优结果。 我们假设,给定大量的流程步骤(或耦合网络),独立条件表示不需要关注条件的本质(说话者身份),因此可以自由学习数字的任何组合 无论它们与条件的关系如何,都可以最小化负对数似然。 因此,为了减少模型的自由度,我们决定约束这种表示。 受到 StyleGAN 架构的松散启发,我们设置了一个单一的可学习嵌入 \(e_y\),它在流程的所有步骤中由每个耦合网络共享(图 1,左)。 这减少了参数的数量和模型的自由度,结果证明会产生更好的结果。 遵循类似的推理,我们还使用了最小可能的适配器网络 \(g\)(图 1,右):具有偏差的单个线性层,仅执行维度调整。
4.6 数据增强
为了训练 Blow,我们丢弃无声帧(附录 B),然后用 4 种数据增强策略增强剩余的帧。 首先,我们应用时间抖动。 我们将每个帧 \(x\) 的起始 \(j\) 移动为\(j^′ =j+⌊U(−ξ,ξ)⌉\),其中 \(U\) 是统一随机数生成器和 \(ξ\) 为帧大小。 其次,我们使用随机预加重/去加重滤波器。 由于说话者的身份不会随着简单的过滤策略而改变,我们应用了一个系数 \(α = U (-0.25, 0.25)\) 的强调滤波器。 第三,我们执行随机幅度缩放。 说话人身份也将通过缩放保留,另外我们希望模型能够处理 -1 和 1 之间的任何幅度。我们使用 \(x^′ = U (0, 1) · x/ max(|x|)\) . 最后,我们随机翻转帧中的值。 听觉感知与平均压力水平有关,因此我们可以翻转 \(x\) 的符号以获得具有相同感知质量的不同输入:\(x' = sgn(U (-1, 1)) · x\)。
4.7 实现细节
我们现在概述了与基于流的生成模型的常见实现不同的细节,并进一步让感兴趣的读者参考所提供的代码以全面了解它们。我们还想指出,我们没有对 Blow 执行任何超参数调整。
通用——我们使用 \(10^{−4}\) 的学习率和 114 的批量大小来训练 Blow。如果 10 个时期已经过去,验证集没有改进,我们将学习率退火 5 倍,并在第三个阶段停止训练发生这种情况的时候。我们使用 8×12 结构,具有 2× 交替模式挤压操作。对于耦合网络,我们将通道分成两半,并使用具有 512 个滤波器和内核宽度 3、1 和 3 的一维卷积。嵌入的维度为 128。我们在 16 kHz 下以 4096 帧大小进行训练,没有重叠,并用一个数据增强批次(批次包含来自所有说话者的帧的随机混合)初始化 ActNorm 权重。我们使用 Hann 窗口和 50% 的重叠进行合成,将 -1 和 1 之间的整个话语标准化。我们使用 PyTorch 实现 Blow。
耦合——正如官方 Glow 代码中所做的那样(但在论文中没有提到),我们发现约束来自耦合网络的缩放因子可以提高训练的稳定性。对于具有通道级联的仿射耦合
![blow-al6](/images/blow-al6.png)
blow-al6
其中 2c 是通道总数,我们使用
![blow-al7](/images/blow-al7.png)
blow-al7
其中 \(σ\) 对应于 sigmoid 函数,\(ε\) 是一个小常数,以防止无限对数 -行列式(并在反向传递中除以 0)。
超调节——如果我们严格遵循方程2 和 3,超调节操作可以涉及大量 GPU 内存占用(每个批次元素有 n 个不同的内核)和耗时计算(每个内核和批处理元素的双循环)。 在实践中,这可能会使像 Blow 这样的基于流的非常深的架构无法执行操作。 然而,通过限制核 \(W(i)\) 的维数,使得每个通道都与它自己的一组 \(y\) 卷积内核,我们可以实现较小的 GPU 占用空间和每个适应网络的易于处理的参数数量。 这对应于深度可分离卷积,并且可以通过分组卷积来实现,在大多数深度学习库中都可用。
结论
在这项工作中,我们提出了基于流的生成模型用于原始音频合成的潜力,特别是对于非并行语音转换的挑战性任务。 我们提出了 Blow,一种单尺度超条件流,具有共享嵌入的多块结构,并以向前向后的方式执行转换。 由于 Blow 在这些方面与现有的基于流的生成模型不同,因此它能够胜过那些模型,并与现有的非并行语音转换系统竞争甚至改进。 我们还量化了所提议改进的影响,并评估了训练数据量和源/目标说话者的选择对最终结果的影响。 作为未来的工作,我们希望改进模型,看看我们是否可以处理其他任务,例如语音增强或乐器转换,可能是通过进一步增强超调节机制,或者简单地通过调整其结构或超参数。