作者 | 琥珀

出品 | AI科技大本营(id:rgznai100)

基于深度神经网络进行语音合成、音乐风格迁移,正成为不少致力于“让人人成为音乐家”的研究人员所追求的事情。像此前我们报道的微软小冰作词又作曲,AI帮清华博士写说唱歌词晋级,甚至不久前中央音乐学院招音乐AI方向博士生。不久前,为了纪念著名作曲家巴赫诞辰,Google 根据巴赫合唱和声训练而成的机器学习模式 Coconet 吸引了不少人前来围观。

最近,OpenAI 最新研发的 MuseNet 的深度神经网络,可以制作 4 分钟时长的音乐作品,其中涵盖 10 种不同的乐器(如钢琴、鼓、贝斯、吉他),甚至还能将诸如乡村风格、莫扎特风格、甲壳虫乐队风格的音乐融合起来。

首先需要说明的是,MuseNet 并没有根据人类输入的对音乐理解进行显式编程,而是通过学习预测成千上万个 MIDI 文件的下一个 token 来发现和弦、节奏和风格的模式。MuseNet 采用了无监督神经网络语言模型 GPT2.0(是的,就是此前被誉为可以 BERT 媲美的 NLP 模型 GPT2.0,普遍观点是,经过预训练可以预测上下文,无论是音频还是文本。)

据悉,5 月 12 日将正式开放 MuseNet 语言生成工具的试用版本。(以下为学习了肖邦作曲风格的英国女歌手 Adele 的 Someone Like You 的 AI编曲录音。)

传送门:

https://openai.com/blog/musenet/

过程原理

在简单模式(默认显示)中,用户会听到预设生成的随机未切割样本;然后选择某作曲家或风格下的著名作品片段,即可生成各种风格的音乐。

在高级模式下,用户可直接与模型交互。这个过程需要完成的时间会更长,但用户可以创建一个全新的作品。

  • 注意:MuseNet 通过计算所有可能的音符和乐器的概率来生成每个音符,模型会倾向采用你选择的乐器,但也可能会选择逼得乐器;同样,MuseNet 也会搭配不同风格的乐器,如果用户自行选择最接近作家或乐队常用分风格或乐器,产生的音乐会更自然。

研究人员还创建了作曲家和乐器的 token,以便更好地控制 MuseNet 生成的样本类型。训练期间,这些作曲家和乐器 token 将预先添加到每个样本中,因此模型将学习利用该信息进行音符预测。生成音乐时,可以调整模型,如拉赫玛尼诺夫的钢琴曲为前提,以创建选定风格的音乐。

研究人员还将 MuseNet 中的嵌入进行可视化,以深入了解模型所学到的内容。他们采用了 t-SNE 创建各种风格嵌入的余弦相似性。(如下 2D 图像所示,可查看某个特定作曲家或风格之间的关系。)

利用 Sparse Transformer 记住长期结构

MuseNet 使用 Sparse Transformer 的重算和优化内核来训练一个具有 24 个注意力头的 72 层网络,并将全部注意力放在 4096 个 token 的上下文中。这个长文本的目的是能够记住一个片段中的长期结构。或者,它还可以创建音乐旋律结构。

音乐生成是测试 Sparse Transformer 的一个有用域,因为它位于文本和图像的中间位置。它具有文本的 token 结构。在图形中,你可以查看 N 个 token,而在音乐中,查看之前的起点没有固定数。此外,还可以很容易听到该模型是否在按照成百上千个 token 顺序来获取长期结构。

数据集

研究人员收集了不同来源的 MuseNet 训练数据(ClassicalArchives、BitMidi、MAESTRO ),涵盖爵士乐、流行乐,以及非洲、印度和阿拉伯等不同风格的音乐。

首先,研究人员采用 transformer 在序列数据上进行训练:给定一组音符,要求它预测其他即将出现的音符。在尝试了几种不同方法后将 MIDI 文件编码为适用于此任务的 token。

在这种其中,他们采用和弦方法,将每次听到的音符组合视为单独的 “和弦”,并为每个和弦指定一个 token。然后,通过仅关注音符开头压缩音乐模式,并尝试使用字节对编码方案进行近一步压缩。

研究人员还尝试了标记时间推移的两种不同方法:一是根据音乐节奏进行缩放的 token,代表节拍或节拍的一小部分;二是以绝对时间为单位来标记 token。他们采用了一种结合了表现力和简洁性的编码方式:将音高、音量以及乐器信息组合称一个 token。

在训练中,

  • 通过提高和降低音高来调换音符。(之后的训练中,减少了调换数量,使得每个乐器都有生成的音符。)

  • 提高音量,调高或降低不同样本的整体音量。

  • 增加时间,当使用以秒为单位的绝对时间编码时,可有效稍微减缓或加速片段。

  • 在 token 嵌入空间中使用 mixup。

研究人员还创建了一个内部评测,在训练中,通过模型预测给定的样本是否来自数据集还是之前生成的样本,进行评判。

嵌入

为了给模型提供更加结构化的上下文,研究人员还添加几种不同类型的嵌入。

除了标准位置嵌入外,还有学习到的嵌入,可在给定的样本中追踪时间推移;然后,他们还在每个和弦中的音符添加了嵌入;最后,他们添加了两个结构化嵌入,该嵌入可表明模型既定的音乐样本在较大音乐片段中的位置。

(本文为AI科技大本营整理文章,转载请微信联系 1092722531)

长三角开发者联盟

代码就是力量,长三角的开发者联合起来!

加入「长三角开发者联盟」将获得以下权益

长三角地区明星企业内推岗位
CSDN独家技术与行业报告
CSDN线下活动优先参与权
CSDN线上分享活动优先参与权

扫码添加联盟小助手,回复关键词“长三角2”,加入「长三角开发者联盟」。

推荐阅读:

  • 打开阿兹海默之门:华裔张复伦利用RNN成功解码脑电波,合成语音 | Nature

  • Python程序员Debug利器,和Print说再见 | 技术头条

  • 前端程序员别哭,优化性能的经验分享给你

  • 如何使用Python玩转PDF各种骚操作?

  • 人工智能先驱 Nils Nilsson 去世,吴恩达、Yann LeCun 悼念!

  • 关于谷歌云,你应该知道的一切! | 技术头条

  • 养生 996 的崛起:马云竟给他最痛恨的「兔子」站台?

  • 澳洲生活7年, 前阿里程序员谈我们的区块链差距究竟在哪?

  • 她说:为啥程序员都特想要机械键盘?这答案我服!

点击阅读原文,了解CTA核心技术及应用峰会」

程序员拯救乐坛?OpenAI用“逆天”GPT2.0搞了个AI音乐生成器相关推荐

  1. 程序员拯救乐坛?OpenAI 用“逆天”GPT2.0 搞了个 AI 音乐生成器

    作者 | 琥珀 出品 | AI科技大本营(id:rgznai100) 以下为译文: 基于深度神经网络进行语音合成.音乐风格迁移,正成为不少致力于"让人人成为音乐家"的研究人员所追求 ...

  2. 程序员拯救乐坛?OpenAI 用“逆天” GPT2.0 搞了个 AI 音乐生成器

    作者 | 琥珀 出品 | AI科技大本营(ID: rgznai100) 基于深度神经网络进行语音合成.音乐风格迁移,正成为不少致力于"让人人成为音乐家"的研究人员所追求的事情.像此 ...

  3. 近4万Star,登月源码登顶GitHub,这位女程序员“拯救”了阿波罗

    作者 | 伍杏玲 转载自CSDN(ID:CSDNnews) 1969 年 7 月 20 日,"阿波罗 11 号"飞船登月,宇航员尼尔·阿姆斯特朗(Neil Armstrong)成功 ...

  4. 黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难——讲义

    基础课部分讲义 核心课部分讲义 提高课部分讲义 黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难--视频链接

  5. 《程序员》杂志社 2010SD软件开发2.0大会随笔

    <程序员>杂志社 2010SD软件开发2.0大会随笔 出行 做了一个公交车,再转车,沪陈线(再做4站到)就差30秒,没追上,结果只好改做92.92B.953等任意挑了一个,要做11站. 感 ...

  6. 黑马程序员匠心之作|C++教程从0到1入门编程(60 指针-const修饰指针61 指针-指针和数组62 指针-指针和函数63 指针-指针配合数组和函数的案例)

    黑马程序员匠心之作|C++教程从0到1入门编程(60 指针-const修饰指针61 指针-指针和数组62 指针-指针和函数63 指针-指针配合数组和函数的案例) 一.60 指针-const修饰指针 二 ...

  7. “编程能力差的程序员,90%输在这事上!”谷歌AI专家:都是瞎努力!

    Google 人工智能开发者专家彭靖田老师说--超90%的程序员在初学Python 人工智能时,都会遇到下面3个问题: 1.想学人工智能,但不知从何学起,也不知道该选择什么方向... 2.Python ...

  8. @程序员,“10倍工程师”都在追这四大AI风向

    技术的发展,驱动着产业变革,从而改变着我们的生活方式.当5G+AI 时代来临,核心的技术生产力就是开发者:开发者研究前沿的科学创新,推动技术发展,将技术应用于实际场景中. 开发者是企业实现商业价值必不 ...

  9. 程序员过关斩将--请不要误会redis 6.0 的多线程

    " 你对redis的单线程是不是有点误会? " 你对redis 6.0的多线程是不是也有点误会? " redis多线程一定可以提高性能吗? redis官方刚刚发布的6.0 ...

最新文章

  1. 2021-08-29概率论—第四章随机变量的数字特征
  2. PspCidTable 完全解读
  3. 零基础是学java还是python-零基础更适合学习Java还是python?
  4. JAVA教程 第六讲 Java的线程和Java Applet(二)
  5. tkinter 菜单添加事件_Python+tkinter设置Label字体、字号、样式、对齐方式、鼠标形状、响应鼠标事件...
  6. matlab——图像细化
  7. filter2D函数的.depth()变量的设定
  8. 新版手机浏览器_Firefox手机浏览器app下载安装_Firefox手机浏览器软件最新版免费下载...
  9. 使用Kotlin的Android ToggleButton
  10. webapi 参数的请求和接收
  11. google 安裝包 android,googleplaystore安装包
  12. Blender - 武器icon贴图渲染 阴影角度
  13. Arcgis重采样时分辨率的设置
  14. Aspose.Words for .NET使用文档教程(5):如何使用脚注和尾注并设置每页行字数
  15. 坚持学下去!转行程序员的2020年度总结
  16. 关于SIM800C 2G通信模块的电路设计上需要注意的地方
  17. 微软计算机电源怎么接,电源线,详细教您电脑电源线怎么接
  18. 极客时间限时免费开放全部课程!别纠结了选这几门!
  19. 开发中使用到的sql总结
  20. 一篇文章带你走近Android自定义view

热门文章

  1. Error: could not open 'D:\Program Files\Java\jre7\lib\amd64\jvm.cfg'
  2. 详解SSH框架的原理和优点
  3. Shell脚本头定义
  4. Aizu - 0033 Ball
  5. 《少年先疯队》第九次团队作业:Beta冲刺第二天
  6. 【转】linux服务器性能查看
  7. E20180525-hm
  8. 1)头结点,头指针,
  9. 微擎删除分类无法删除解决-select in效率低解决办法
  10. 决策树(chap3)Machine Learning In Action学习笔记