Skip to main content

使用MusicVAE生成和插值音乐片段

使用变分自动编码器对短音乐片段的分布进行建模的简介
Created on February 19|Last edited on July 12

我们来看看这个有趣的例子,看看MusicVAE如何在两首著名的儿童歌曲“ 一闪一闪小星星”和“ 玛丽有只小绵羊”之间平滑地插值。




Twinkle img
card
musicvae_twinkle
Twinkle Twinklw
This run didn't log audio for key "Twinkle Twinklw", step 0, index 0. Docs →
Run set
6


导言

上一份报告中,我们研究了Music Transformer如何从零开始生成一分钟长的钢琴演奏。但是,Music Transformer中的可控制性是有限的。例如,它不支持创造性的应用,比如混合和匹配两首不同的乐曲(通常称为插值)。

在这份报告中,我们将研究Roberts等人撰写的MusicVAE论文,该论文提议对音乐片段的潜在分布进行建模,以使它可以在不同音乐片段之间应用平滑插值。这也是变分自动编码器在符号音乐生成域中的首次应用之一。

背景——变分自动编码器(VAE)

在深入研究MusicVAE之前,我们首先讨论变分自动编码器的关键点。

autoencoder是一种神经网络体系结构,可以通过无监督的方式学习数据点的低维紧密表示。它由一个encoder和一个decoder组成,encoder将输入数据点XX投影到(较低)维度zz上,decoder的目标是在压缩的低维特征向量给定的情况下重建数据点。自动编码器是一种神经网络体系结构,可以通过无监督的方式学习数据点的低维紧密表示。它由一个编码器和一个解码器组成,编码器将输入数据点XXX投影到(较低)维度zzz上,解码器的目标是在压缩的低维特征向量给定的情况下重建数据点。

训练自动编码器是通过优化损失函数来完成的,该函数促使网络重构输入的数据点,即:

L=MSE(fdecode(fencode(X)),X)L = MSE(f_{decode}(f_{encode}(X)), X)

变分自动编码器(VAE)具有与自动编码器非常相似的特征,但是其隐变量分布p(z)必须符合标准的高斯分布,即z∼N(μ,σ2)z \sim N(\mu, \sigma^2)z∼N(μ,σ2)。因此,从VAE中的数据生成角度来看,数据点是通过两步过程生成的:

  1. 首先,从先验p(z)p(z):z∼p(z)z \sim p(z) 中采样一个隐代码
  2. 通过隐代码: X∼p(X∣z)X \sim p(X|z)解码生成数据点

为了增强此属性,训练VAE的目标函数是使用以下公式最大化边际似然率p(X)p(X)的证据下限(ELBO):

L=Eq(z∣X)[log⁡p(X∣z)]−DKL(q(z∣x)∣∣p(z))L = E_{q(z|X)}[\log p(X|z)] - D_{KL}(q(z|x) || p(z))

如果我们将此损失函数与自动编码器的损失函数进行比较:

  • 第一项都类似于重建损失——在VAE中,后验分布q(z∣X)q(z|X)和似然性p(X∣z)p(X|z) 分别对应于encoder和decoder。

  • VAE损失中的第二项是KL散度项,通常用于度量两个概率分布之间的“差异”。在这里,确定后验分布q(z∣X)q(z|X)接近于先验分布p(z)p(z),后者通常是标准的高斯分布N(μ,σ2).N(μ,σ2).N(\mu, \sigma^2).

简而言之,我们可以将VAE视为“正规化”版本的自动编码器,因为自动编码器不会对编码后的隐变量的分布施加任何约束。因此,编码-解码的过程也略有不同:

  • 在编码过程中,我们编码两个潜在向量,分别表示基础分布的均值和标准差σ,而不是编码单个潜在向量;
  • 然后,将latent vector馈入decoder以重构输入。 在解码过程中,我们首先从分布中采样一个潜在向量(更精确地说,这是通过重新参数化技巧(ϵ∼N(0,I),ϵ∼N(0,I),z=μ+σ⋅ϵ\epsilon \sim N(0, I), z = \mu + \sigma \cdot \epsilon]完成的)。然后,将潜在向量馈入编码器以重构输入。

有关VAE的目标函数(ELBO)的推导及其与变分推理相关的背景的更详细的解释,请参考这篇论文。我们将在接下来的报告中提供有关VAE的详细说明。

为什么用VAE代替自动编码器进行生成?

对于生成性应用中,由于以下原因,VAE通常比自动编码器更受青睐:

1.因为解码器本质上是自回归的(基于先前的步骤生成当前步骤的输出),所以它是一个足够强大的解码器,以至于可能会忽略隐代码。忽略隐代码后,ELBO的KL 散度项很容易被设置为零。这是不理想的,因为模型无法有效地学习隐变量分布。

2.其次,自动编码器隐变量空间通常会导致更多的“潜在孔”,相比之下,由于隐变量空间中的强制性高斯分布,我们可以预期该空间上会有一个“更平滑的表面”。这对于需要隐空间插值的混合匹配应用尤其重要,这意味着在隐空间中“穿越路径”,而“潜在孔”区域将生成不真实的数据输出(例如变形的面部图像、不连贯的音乐片段)。

MusicVAE

现在,我们深入研究MusicVAE的细节。对于编码器和解码器,MusicVAE选择使用递归神经网络(更确切地说,是LSTM) ,并借鉴了使用递归VAE生成文本的想法。

  • 编码器 q(z∣X)q(z|X) 处理一个输入序列并产生一个隐态序列。均值和标准差μ和σ是通过两个单独的前馈网络(即μ=f1(hT),σ=f2(hT)\mu = f_1(h_T), \sigma = f_2(h_T))使用最终隐态 hT得出的
  • 解码器 p(X∣z)p(X|z)首先使用采样的潜在向量zz设置解码器 RNN的初始状态。然后,它从初始状态自动回归生成输出序列。在训练期间,输出序列会经过训练以重建输入序列。

在这项工作中,MusicVAE用于生成单音旋律和鼓声。在本报告中,我们将重点介绍产生单音的旋律。旋律序列通过(T,130)(T, 130)(T,130)序列矩阵表示,其中130维输出空间(独热向量)包含128个“ 音符开”标记(128个MIDI音高),外加一个“音符关”(释放演奏的音符)和一个“休止”(不演奏)。在这里,MusicVAE在两种不同长度的旋律数据点上进行了实验:2小节 (T=32T = 32)和16小节(T=256T = 256)),我们将在下一部分中讨论两者演奏效果的差异。

普通RNN MusicVAE的问题

作者报告了在MusicVAE中使用普通RNN的两大局限性:

1.因为解码器本质上是自回归的(基于先前的步骤生成当前步骤的输出),所以它是一个足够强大的解码器,以至于可能会忽略隐代码。忽略隐代码后,ELBO的KL 散度项很容易被设置为零。这是不理想的,因为模型无法有效地学习隐变量分布。

2.由于模型将整个序列压缩为单个潜在向量,因此产生了非常紧张的瓶颈。如下表所示,尽管普通递归 VAE能够比较精确地重建2 小节旋律,但作者发现,这种方法在碰到更长的序列(例如16 小节)时开始失效。

解决方案

MusicVAE引入了一种阶层式解码器 ——由于我们正在生成16小节的输出,作者建议首先为每个小节(即[公式])生成一个中间潜在向量(在论文中称为导线)。然后,对于每个小节[z1′,...,z16′]=RNN(z)[z1′,...,z16′]=RNN(z)[z^\prime_1, ..., z^\prime_{16}] = RNN(z),我们使用RNN的另一层,基于该中间潜在向量来生成实际输出。

原因是输出序列越长,潜在态的影响就消失得越多(这类似于长序列中梯度消失的问题)。因此,阶层式解码器首先生成较短的中间隐代码,这有望减轻消失的问题。然后,对于每个小节,仅基于特定小节的中间隐代码来生成输出,该中间隐代码是从潜在向量中得出的。这可以促使生成过程不忽略潜在态,从而可以更好地了解潜在分布。

插值

既然我们已经能够学习旋律的有意义的潜在分布,那么在两个不同的旋律A和B之间进行插值的步骤如下:

  1. 获取A和B的隐代码,即zA,zBz_A, z_B
  2. 在隐空间中的zAz_A​和zBz_B的点之间“滑动”,并在插值路径上获得N个隐代码,即z_\alpha = z_A + \alpha(z_B - z_A).$。

作者证明,与在数据空间上进行插值相比,在隐空间上进行插值可以使源旋律到目标旋律的转换更平滑、更连贯。因此,这证明了学习到的潜在分布能够捕获与音乐片段结构有关的有意义的、紧凑的信息。

生成

在随附的Colab笔记本中,我们使用普通的递归 VAE和MusicVAE生成2小节和16小节的旋律。生成的音频文件以及相应的钢琴声谱图通过Weights and Biases 的 wandb库记录如下。

使用此Colab笔记本再现结果



生成并插值2小节




Run set
6


生成和插值16小节




Run set
6


总结

MusicVAE提供了一种可行的解决方案,用于在紧凑、低维的信息中对音乐片段的分布进行建模,从而能够创造性地从零开始生成旋律,并且能够混合和匹配不同风格的旋律。这种模型能够提高音乐生成系统中的可控性水平,从而使用户在生成所需音乐时具有更精细的控制。

但是,尽管MusicVAE能够生成16小节长度的音乐,它距离生成复音(同时弹奏多个音符,而不是单个音符)、分钟长的序列(如Music Transformer)仍然相去甚远。我们是否可以结合Music Transformer(生成长而连贯的序列)和MusicVAE(高可控性)的优势?在下一份报告中,我们将讨论与此主题相关的其他模型。

如果您想了解更多信息,请参阅原始论文MusicVAE博客文章

请与我们分享一些您的旋律片段和插值!发给我们@weights_biases@gudgud96


Iterate on AI agents and models faster. Try Weights & Biases today.