论文笔记:DiffWave: A Versatile Diffusion Model for Audio Synthesis
1. Introduction
以往的波形模型大多着眼于带有信息的局部调节器的音频合成任务,只有很少的一部分关注无条件生成;自回归模型(例如 WaveNet)倾向于在无条件情况下生成人造的类似单词的声音或劣质样本。
扩散模型可以用一个没有可学习参数的扩散(加噪)过程从训练数据中获得"白化"的潜变量。**因此,在训练中不需要引入额外的神经网络。**这避免了由两个网络联合训练而产生的具有挑战性的"后向崩溃"或"模式崩溃"问题。
DiffWave模型的几个优点:
- 它是非自回归的,可以并行合成高维波形。
- 它很灵活。与流模型相比,它不施加任何架构约束 ,这使得神经声码器占用空间小,但仍能生成高保真语音。
- 它使用单个基于 ELBO 的训练目标来进行高保真合成,没有任何辅助损失。
- 它是一种多功能模型,可为条件和无条件波形生成任务均生成高质量音频信号。
训练过程算法:
2. 快速采样
- 普通采样算法:
采样时最有效的去噪步骤发生在t = 0附近。 由此可以设计一个快速采样算法,使用比训练时用的T(如200)少得多的去噪步骤 T i n f e r T_{infer} Tinfer(如6)进行采样。
快速采样的核心思想是通过精心设计方差调度,将T步的反向过程"折叠"为
T
i
n
f
e
r
T_{infer}
Tinfer步过程。
-
γ \gamma γ与 η \eta η:
这里 γ \gamma γ对应公式(5)中的 α \alpha α, η \eta η对应 β \beta β,计算方式与公式(4)相同:
公式(4)(5):
{ η t } t = 1 T i n f e r \{\eta_t\}^{T_{infer}}_{t = 1} {ηt}t=1Tinfer为用户自定义的方差调度,可以独立于训练方差调度 { β t } t = 1 T \{\beta_t\}^T_{t = 1} {βt}t=1T,因此该快速采样算法不需要修改训练过程,只需重用训练好的T较大的模型检查点即可。 -
t s a l i g n t^{align}_s tsalign
在采样过程的步骤s中, ϵ θ ( ⋅ , t ) \epsilon_\theta(\cdot,t) ϵθ(⋅,t)中的 t t t是通过对齐来自 { η t } t = 1 T i n f e r \{\eta_t\}^{T_{infer}}_{t = 1} {ηt}t=1Tinfer和 { β t } t = 1 T \{\beta_t\}^T_{t = 1} {βt}t=1T的噪声水平 α ˉ t \sqrt{\bar{\alpha}_t} αˉt和 γ ˉ s \sqrt{\bar{\gamma}_s} γˉs来实现的。理想情况下我们希望 α ˉ t = γ ˉ s \sqrt{\bar{\alpha}_t}=\sqrt{\bar{\gamma}_s} αˉt=γˉs,但这并不总是可能的。因此在实际应用中要通过以下公式得到对齐的扩散步长t,记为 t s a l i g n t^{align}_s tsalign:
如果 γ ˉ s \sqrt{\bar{\gamma}_s} γˉs的大小介于两个连续的训练噪声水平 α ˉ t + 1 \sqrt{\bar{\alpha}_{t+1}} αˉt+1和 α ˉ t \sqrt{\bar{\alpha}_t} αˉt之间,则要对它们做插值得到 t s a l i g n t^{align}_s tsalign。
3. DiffWave模型结构
DiffWave采用了WaveNet驱动的前馈双向空洞卷积架构,该网络是非自回归的,因此从隐元 x T x_T xT生成长度为L的音频 x 0 x_0 x0需要进行 T T T轮正向传播,其中 T T T (例如50)远小于波形长度 L L L。
DiffWave模型包括堆叠的
N
N
N个残差层,残差通道数为
C
C
C,这些残差层被分为
m
m
m个blocks,每个block包含
n
=
N
m
n=\frac{N}{m}
n=mN层。每个残差层使用一个内核大小为3的双向空洞卷积,在每个block中的每一层上进行2倍膨胀,即
[
1
,
2
,
4
,
⋅
⋅
⋅
,
2
n
−
1
]
[ 1 , 2 , 4 , · · · , 2^{n-1}]
[1,2,4,⋅⋅⋅,2n−1]。最后对所有残差层的输出进行跳跃连接。
3.1 扩散步长嵌入
将扩散步长 t t t作为输入的一部分是很重要的,因为模型需要对不同的 t t t输出不同的 ϵ θ ( ⋅ , t ) \epsilon_\theta(\cdot,t) ϵθ(⋅,t)。
这里对每个扩散步长
t
t
t使用一个128维的编码向量:
然后对时间嵌入使用3个全连接层,其中前两个全连接层在所有的残差层之间共享参数,最后一个为残差层特定的FC,它将第二个FC的输出映射为C维嵌入向量。最后将这个嵌入向量在长度L上进行广播,并将其添加到每个残差层的输入中。
3.2 条件生成
-
局部调节器
这里将DiffWave作为基于mel语谱图的神经声码器进行测试。
首先通过转置的二维卷积将mel谱图上采样到与波形相同的长度。在一个层特定的1 × 1Conv将其mel - band映射到2C通道后,在每个残差层中添加该调节器作为空洞卷积的偏置项。
-
全局调节器
此时,条件信息由全局的离散标签给定。
对其使用维度 d l a b e l = 128 d_{label} = 128 dlabel=128的共享嵌入,然后在每个残差层中用层特定的1 × 1Conv将 d l a b e l d_{label} dlabel映射到2C通道,并在每个残差层的空洞卷积后添加此嵌入作为偏置项。
3.3 无条件生成
在无条件生成任务中,模型需要在没有条件信息的情况下生成一致的语句。
网络的输出单元具有大于语句长度
L
L
L的感受野大小
r
r
r是很重要的。实际上我们需要
r
≥
2
L
r\geq2L
r≥2L,由此最左边和最右边的输出单元具有覆盖整个
L
L
L维输入的感受野。
对于堆叠的空洞卷积层,输出的感受野大小为:
r
=
(
k
−
1
)
∑
i
d
i
+
1
r=(k-1)\sum_id_i+1
r=(k−1)∑idi+1,其中
k
k
k是内核大小,
d
i
d_i
di是第
i
i
i层残差层的膨胀因子。作者发现使用更深的层和更大的膨胀周期会导致生成样本的质量下降,这对于WaveNet来说尤其如此。事实上,即使是中等大的感受野大小(如6139)在WaveNet中也没有得到有效的使用,它倾向于关注更短的上下文(如500)。
而DiffWave在扩大输出 x 0 x_0 x0的感受野方面具有优势:通过在反向过程中从 x T x_T xT迭代到 x 0 x_0 x0,感受野大小可以增加到 T × r T × r T×r,这使得DiffWave适用于无条件生成。
4. 实验
4.1 神经声码器任务
DiffWave在语音质量方面与强大的 WaveNet 声码器相匹配(MOS:4.44 与 4.43),同时合成速度更快几个数量级,因为它只需要几个连续步骤(如6)即可生成很长的波形。
小型 DiffWave 具有 2.64M 参数,在没有工程内核的 V100 GPU 上合成 22.05 kHz 高保真语音(MOS:4.37)的速度比实时速度快 5 倍以上。尽管它仍然比最先进的基于流的模型慢,但它的占用空间要小得多。作者期望未来通过优化其推理机制来进一步提速。
4.2 无条件和类条件波形生成任务
在通过多项自动和人工评估测量的音频质量和样本多样性方面,DiffWave 在具有挑战性的无条件和类条件波形生成任务中显着优于 WaveGAN和 WaveNet。
5. 展望
-
由于DiffWave潜在具有非常大的感受野,推动模型生成更长的语句将是有意义的。
-
优化推理速度将有利于该模型在TTS(text-to-speech)中的应用