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