大数据文摘出品
作者:曹培信、易琬玉
Open AI开发的MuseNet上线啦!
MuseNet是一个深度神经网络,它可以用10种不同乐器,生成不同风格的音乐作品,从乡村音乐到莫扎特再到披头士。
比如生成一首Lady Gaga风格的Someone Like You钢琴曲,或者是用各种乐器生成一个贝多芬版的哈利波特主题曲交响乐。
其实Musenet并没有按照人类对音乐的理解进行明确的编曲,只是通过学习在大量的MIDI文件来预测下一个token,从而生成和声、节奏和风格的模式,但是效果还是相当惊艳的。
下面跟随文摘菌来实测一下。
首先打开链接:
https://openai.com/blog/musenet/
样本
由于 MuseNet 学习了许多不同风格,可以用新颖的方式融合几代音乐。比如,这个模型给出了肖邦夜曲的前6个音符,但是被要求生成一个由钢琴、鼓、贝斯和吉他组成的流行风格的曲子。整个的效果还是很让人信服的,感兴趣的朋友不妨去听听看。
在简单模式(默认显示)中,通过下拉菜单可以选择不同的曲风和曲目进行排列组合,试听预先生成的样本。在高级模式下,可以直接与模型交互,创造出一个全新的作品。不过这个过程需要更长的时间。
如果你选择最接近作曲家或乐队通常风格的乐器,跨世代曲风的融合会更自然。
文摘菌试玩得到的Gaga风格的《Someone Like You》
作曲家和乐器标记
在生成时,可以通过“拉赫玛尼诺夫钢琴”的提示来调整模型以创建所选风格的样本:
或者提示Journey 乐队,钢琴、贝斯、吉他和鼓:
开发人员创建了作曲家和乐器令牌,以便更好地控制MuseNet生成的样本种类。在训练期间,这些作曲家和乐器标记被预先添加到每个样本,因此模型可以学习使用这些信息进行音符预测。还可以将 MuseNet 的嵌入可视化,以深入了解模型所学到的内容。
比如,使用 t-SNE 来创建各种音乐作曲家和风格的地图。
长期结构
Musenet 使用Sparse Transformer的重新计算和优化内核,来训练一个包含24个注意头的72层的网络。这使得它能够记住一段长时间结构,还可以创造音乐旋律结构。
音乐生成位于文本和图像之间的中间地带, 它具有流动的文本标记结构。所以,音乐生成是一个可以测试Sparse Transformer的有用领域。在图像中,可以返回 n 个标记并找到上面的行,而在音乐中,没有一个固定的数字来返回前面的度量值。
数据集来源
开发者从许多不同的来源收集了 MuseNet 的培训数据。ClassicalArchives 和 BitMidi捐赠了大量 MIDI 文件,还有一些从网上找的爵士乐、流行音乐、非洲音乐、印度音乐和阿拉伯音乐。此外,还有 MAESTRO 的数据集。
Sparse Transformer是按顺序数据训练的: 给定一组音符,要求它预测之后的音符。
在弦乐理论种,同一时间发出的所有音符组合视为一个单独的"和弦",开发者们为每个和弦指定一个标记。并且尝试仅关注音符的开头来压缩音乐模式,使用字节对编码模式进一步压缩音符。
这里还尝试了两种不同的时间标记方法: 一种是根据乐曲速度调整的标记(这样标记就代表了一个音乐节拍或一个节拍的一小部分) ,另一种是以秒为单位的绝对时间的标记。
开发人员着手于一种将表达性和简洁性结合起来的编码: 将音高、音量和乐器信息组合成一个单一的令牌。
训练期间的一些笔记:
1.通过提高音调和降低音调来转换音调。(在后来的训练中,减少了音调的转换量,以便使每一代都保持在单独的音调范围内)
2.增加容量,调高或调低各种样品的总体容量。
3.增加计时(使用绝对时间),有效地稍微减慢或加快作品。
4.在令牌嵌入存储上空间上使用混合。
开发人员还创建了一个内部批评程序:在训练期间,模型被要求预测给定的样本是否真的来自数据集,或者它是否是模型的过去几代中的一个。这项评估可以用于生成时的样本选择。
不同的嵌入给模型提供更具结构性的上下文
除了标准的位置嵌入之外,还添加了一个可学习的嵌入,用于跟踪给定样本中的时间流逝。这样,同时发出声音的所有音符都被赋予相同的时间嵌入。
然后,在一个和弦中为每个音符添加一个嵌入(这模拟了相对注意力,因为模型更容易学习到音符4需要回顾音符3,或者回顾前一个和弦的音符4)。
最后,开发人员添加了两个结构嵌入,它们告诉模型给定的音乐样本在较大的音乐作品中的位置。一个嵌入将较大的部分分成128个部分,而第二个编码是从127到0的倒计时,因为模型接近(结束)令牌。