使用VQ-VAE(向量量化的变分自编码器)进行音乐生成.
- paper:Jukebox: A Generative Model for Music
- arXiv:link
训练
作者训练了三个具有不同时序分辨率的VQ-VAE模型,模型结构如下:
- 将音频$x_t$通过编码器,得到隐张量$h_t$,张量长度代表不同的时序分辨率;
- 同步训练一个Codebook $e_k$,将张量$h_t$所包含的每一个向量按照相似性量化为Codebook中存在的向量$e_{z_t}$;隐变量$z_t$表示量化的对应关系;
- 将$e_{z_t}$通过解码器生成音频$D(e_{z_t})$。
该模型训练时,损失函数由三部分组成:
- $L_{recons}$表示生成音频$D(e_{z_t})$和原始音频$x_t$的重构误差;
- $L_{codebook}$表示训练Codebook时,其中的向量$e_{z_s}$和经过编码器得到的隐向量$h_s$之间的误差,其中$sg$表示固定梯度(stop gradient);
- $L_{commit}$表示编码器输出的隐向量$h_s$和Codebook之间的误差,其中$sg$表示固定梯度(stop gradient)。
采样
训练好的模型生成音乐时不需要编码器部分;从隐变量$z_t$的先验中采样喂入解码器。根据不同的任务输出需求使用不同的采样方法。
原始采样法 Ancestral sampling
随机生成一段音频,采用如下所示的原始采样法:
- 先从高斯噪声中采样并和条件信息(genre, artist, timing, lyrics)组合,通过一个网络得到$z^{top}$;
- 将$z^{top}$和条件信息组合,通过一个网络得到$z^{middle}$;
- 将$z^{middle}$和条件信息组合,通过一个网络得到$z^{bottom}$;
- 最终音乐生成使用时序分辨率最高的$z^{bottom}$作为隐变量。
窗口采样法 Windowed sampling
要生成长度超过模型预设长度的音频,采用窗口采样法:
采样一段隐变量后,选择75%的重叠率在其后采样新的变量:
预先采样法 Primed sampling
先将已有的一段音频转换成VQ-VAE格式的张量,在其基础上进行采样: