OpenAI MuseNet
OpenAI 推出了 MuseNet,这是一种深度神经网络,能够生成最长四分钟、包含 10 种不同乐器的音乐作品。该模型能够融合多种音乐风格——从莫扎特和肖邦到披头士和乡村音乐——而无需显式编程音乐理论,而是通过在大规模 MIDI 文件数据集中预测下一个 token 来发现模式。
架构与技术基础
MuseNet 构建在大规模 transformer 模型之上,使用与 GPT-2 相同的通用无监督技术。它专门利用 Sparse Transformer 的重新计算和优化内核,以支持具有 24 个注意力头的 72 层网络。
关键技术规格包括:
- 上下文窗口: 对 4,096 个 token 的上下文进行全注意力,使模型能够保持长期的音乐结构和旋律一致性。
- 训练目标: 模型被训练为在序列中预测下一个 token,无论数据是音频还是文本。
- 领域应用: 音乐作为 Sparse Transformer 的测试基准,因为它在文本(流动的 token 结构)和图像(固定的空间关系)之间架起了桥梁,使得节奏或旋律的结构错误高度可闻。
控制机制:作曲家和乐器 token
为了让用户对输出有控制力,OpenAI 实现了作曲家和乐器 token。这些 token 在训练期间会被预置到样本前面,使模型能够将特定风格或乐器与由此产生的音符预测关联起来。
在生成时,这些 token 作为条件器起作用。例如,提示可以指定 "Rachmaninoff 钢琴起始" 或 "乐队 Journey,包含钢琴、贝斯、吉他和鼓" 的组合。虽然这些 token 作为强烈的建议,但它们不是严格的要求;MuseNet 会在所有可能的音符和乐器上计算概率,这意味着它可能会偶尔偏离请求的乐器编配。
数据集与标记化
MuseNet 在来自 ClassicalArchives、BitMidi、MAESTRO 数据集以及覆盖爵士、流行、非洲、印度和阿拉伯风格的各种在线收藏的数十万个 MIDI 文件上进行了训练。
标记编码
OpenAI 在确定一种将音高、音量和乐器信息组合成单个 token 的简洁格式之前,尝试了多种编码方法。其他尝试的方法包括:
- 和弦方式: 为同时发声的每组音符分配一个单独的 token。
- 压缩模式: 仅关注音符的起始并使用字节对编码。
- 时标记: 在使用绝对时间编码时,测试基于节拍的 token(音乐拍子)和以秒为单位的绝对时间。
训练增强
为了提高鲁棒性,训练过程包括:
- 音高转移: 提高和降低音高(在后期阶段减少,以使乐器保持在其自然范围内)。
- 音量增强: 调整样本的总体音量。
- 时序增强: 在使用绝对时间编码时,略微加快或减慢曲目速度。
- Mixup: 在 token 嵌入空间中应用 mixup。
- 内部评论家: 一个训练用于区分实际数据集样本和模型过去生成内容的判别器,用于在生成过程中选择更高质量的样本。
结构嵌入
除了标准的位置嵌入,MuseNet 还使用几种专门的嵌入来提供结构上下文:
- 时序嵌入: 一个学习得到的嵌入,用于跟踪时间的流逝,确保同时发声的音符共享相同的时序嵌入。
- 和弦嵌入: 每个和弦中每个音符的嵌入,帮助模型学习音符之间的相对注意力。
- 全局结构嵌入: 两个嵌入,用于在更大的作品中定位模型:一个将作品划分为 128 部分,另一个则在模型接近结束 token 时从 127 递减到 0 的倒计时。
Sources
- OriginalMuseNet