OpenAI研究 缪斯网
我们创建了 MuseNet,这是一个深度神经网络,可以用 10 种不同的乐器生成 4 分钟的音乐作品,并且可以结合从乡村音乐到莫扎特再到甲壳虫乐队的风格。MuseNet 并未根据我们对音乐的理解进行明确编程,而是通过学习预测数十万个 MIDI 文件中的下一个标记来发现和声、节奏和风格的模式。MuseNet 使用与 GPT-2 相同的通用无监督技术 , GPT-2 是一种 经过训练以预测序列中的下一个标记(无论是音频还是文本)的大型 变换器模型。
样品
由于 MuseNet 知道许多不同的风格,我们可以以新颖的方式融合几代人。A[A]
如果您对使用变形金刚创建 AI 生成音乐的其他项目感兴趣,我们建议您查看 Magenta 的钢琴生成作品。
我们很高兴看到音乐家和非音乐家将如何使用 MuseNet 创作新作品!1个
在 简单模式下 (默认显示),您会听到我们预先生成的随机未精选样本。选择一个作曲家或风格,一个著名作品的可选开始,然后开始生成。这使您可以探索模型可以创建的各种音乐风格。在 高级模式下 ,您可以直接与模型交互。完成将需要更长的时间,但您将创建一个全新的作品。
开始 于
MuseNet 的一些限制包括:
- 您要求的工具是强烈的建议,而不是要求。MuseNet 通过计算所有可能的音符和乐器的概率来生成每个音符。模型会发生变化,使您更有可能选择乐器,但它总是有可能选择其他东西。
- MuseNet 在风格和乐器的奇怪配对(例如肖邦与贝司和鼓)方面遇到了更多困难。如果您选择最接近作曲家或乐队惯常风格的乐器,世代会更加自然。
作曲家和乐器代币
我们创建了作曲家和仪器令牌,以更好地控制 MuseNet 生成的样本种类。在训练期间,这些作曲家和乐器标记被添加到每个样本之前,因此模型将学习使用这些信息来进行音符预测。在生成时,我们可以调节模型以通过拉赫玛尼诺夫钢琴开始等提示开始以所选风格创建样本:
或者用钢琴、贝斯、吉他和鼓的 Journey 乐队提示:
我们可以可视化来自 MuseNet 的嵌入,以深入了解模型学到了什么。在这里,我们使用 t-SNE 创建各种音乐作曲家和风格嵌入的余弦相似度的二维图。
长期结构
MuseNet 使用Sparse Transformer的重新计算和优化内核 来训练一个具有 24 个注意力头的 72 层网络——对 4096 个令牌的上下文进行充分关注。这种长上下文可能是它能够记住乐曲中的长期结构的原因之一,例如以下模仿肖邦的示例:
它还可以创建音乐旋律结构,如模仿莫扎特的示例所示:
音乐生成是测试稀疏变换器的有用领域,因为它位于文本和图像之间的中间地带。它具有文本的流动标记结构(在图像中,您可以回头看 N 个标记并找到上面的行,而在音乐中,没有固定的数字可以回头看上一个小节)。然而,我们可以很容易地听到该模型是否正在捕获数百到数千个标记的长期结构。如果音乐模型通过改变节奏弄乱了结构,那么它会更加明显,如果文本模型进行短暂的切线则不太清楚。
数据集
我们从许多不同的来源收集了 MuseNet 的训练数据。 ClassicalArchives 和 BitMidi 为这个项目捐赠了他们的大量 MIDI 文件,我们还在网上找到了几个收藏,包括爵士乐、流行音乐、非洲、印度和阿拉伯风格。此外,我们还使用了 MAESTRO 数据集。
Transformer 在序列数据上进行训练:给定一组音符,我们要求它预测即将到来的音符。我们尝试了几种不同的方法来将 MIDI 文件编码为适合此任务的标记。首先,chordwise 方法将一次发声的每个音符组合视为一个单独的“和弦”,并为每个和弦分配一个标记。其次,我们尝试通过只关注音符的开头来压缩音乐模式,并尝试使用字节对编码方案进一步压缩它。
我们还尝试了两种不同的方法来标记时间的流逝:要么根据乐曲的节奏缩放标记(以便标记代表音乐节拍或节拍的一小部分),要么标记以秒为单位的绝对时间。我们找到了一种结合了表现力和简洁性的编码:将音高、音量和乐器信息组合到一个标记中。
结合了音高、音量和乐器的样本编码。
bach piano_strings start tempo90 piano:v72:G1 piano:v72:G2 piano:v72:B4 piano:v72:D4 violin:v80:G4 piano:v72:G4 piano:v72:B5 piano:v72:D5 wait:12 piano:v0:B5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:4 piano:v0:G1 piano:v0:G2 piano:v0:B4 piano:v0:D4 violin:v0:G4 piano:v0:G4 wait:1 piano:v72:G5 wait:12 piano:v0:G5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:5 piano:v72:B5 wait:12
在培训期间,我们:
- 通过升高和降低音高来移调音符(在稍后的训练中,我们减少了移调的数量,以便几代人保持在各个乐器的范围内)。
- 增加音量,调高或调低各种样品的总音量。
- 增加时间(当使用以秒为单位的绝对时间编码时),有效地稍微减慢或加快片段。
- 在令牌嵌入空间上使用 mixup
我们还创建了一个内部批评者:在训练期间要求模型预测给定样本是否真正来自数据集,或者它是否是模型自己的过去几代之一。该分数用于在生成时选择样本。
嵌入
我们添加了几种不同类型的嵌入来为模型提供更多的结构上下文。除了标准的位置嵌入之外,我们还添加了一个学习嵌入来跟踪给定样本中的时间流逝。这样,所有同时发声的音符都被赋予了相同的时序嵌入。然后我们为和弦中的每个音符添加一个嵌入(这模拟了相对注意力,因为模型更容易了解到音符 4 需要回顾音符 3,或者在前一个和弦的音符 4)。最后,我们添加两个结构嵌入,告诉模型给定的音乐样本在较大的音乐作品中的位置。一个嵌入将较大的部分分成 128 个部分,而第二个编码是随着模型接近(结束)标记从 127 到 0 的倒计时。
我们很高兴听到人们创造了什么!如果您创作了自己喜欢的作品,您可以将其上传到Instaudio等免费服务 ,然后将链接推给我们(MuseNet 演示有一个推文按钮来帮助完成此操作)。
如果您有兴趣了解更多关于 OpenAI 的音乐作品,请考虑 申请 加入我们的团队。请随时通过 电子邮件向我们 发送有关 MuseNet 演示的建议。如果您有兴趣更深入地使用 MuseNet 作曲,或者如果您有想要添加到训练集中的 MIDI 文件,我们也很乐意听取您的意见。
MuseNet 于 2019 年 4 月 25 日举办了一场实验音乐会,在 OpenAI 的Twitch 频道上进行了直播,之前没有人(包括我们)听过这些曲目。
脚注
如果您对使用变形金刚创建 AI 生成音乐的其他项目感兴趣,我们建议您查看 Magenta 的钢琴生成作品。↩︎
参考
要使用 MuseNet 创建的输出,请将此博客文章引用为
佩恩,克里斯汀。“缪斯网”。 OpenAI,2019 年 4 月 25 日,openai.com/blog/musenet
请注意:我们不拥有音乐输出,但请您不要为此付费。虽然不太可能,但我们不保证音乐不受外部版权声明的影响。↩︎