译者 | thinkdeeper

编辑 | 鸽子

有没有想过,未来你也可以像周杰伦、林俊杰、李宗盛一样成为创作型的音乐人?你要的,只是感觉,其他的,人工智能的研究人员已经帮你做好了。

如果你以为这只是一篇耸人听闻的文章,你就大错特错了。这是一篇技术性非常强的文章,从历史的源头出发告诉你,为什么人工智能未来将替代作曲家。

如果你对人工智能有一定的了解,又是一位音乐爱好者,那么这篇文章,会让你受益良多。

人工智能到底是如何一步步取代了作曲家

要说到自动作曲,这个历史可就相当久远了。

从某种意义上说,第一个自动生成音乐来自大自然:中国的风铃,古希腊的风琴,或日本的水乐器。

不过,从18世纪起,自动生成音乐方式开始变成了算法。

“Musikalisches Würfelspiel”,这是一个使用骰子的系统,它可以从预先组合的纸片选项中随机地选几片“生成”音乐。

https://en.wikipedia.org/wiki/Musikalisches_W%C3%BCrfelspiel

点击看一段视频,感受感受吧。

https://youtu.be/fK2MCXpDWB4

MusikalischesWürfelspiel的例子。

二十世纪初,自动合成音乐的算法再次升级。


彼时,马尔科夫链开始正式用于建模概率系统,也可用于新音乐的合成。

它比骰子系统更随机。

这体现在两个方面:首先,它可以从现有内容来构建,而不需要事先进行组合好的音乐片段。其次,马尔可夫链不是假定每个片段具有相等的概率,而是根据上下文编码概率的变化来自行确定。

“Remixing Noon” by Rev Dan Catt: 马尔可夫链通过散文训练的可能路径的可视化

Iannis Xenakis曾在他1958年的“ Analogique ”中使用马尔可夫链,并在“ 程序化音乐:作曲的思想和数学 ”中描述了这个过程。来看看他当时转换矩阵的细节,正是这些矩阵定义了产生某些音符的概率。

第3章“马可夫随机音乐:应用”

音乐合成的算法还在持续升级。

1981年,David Cope开始将马尔可夫链和其他技术(音乐语法和组合)组合成他称之为智能音乐的半自动系统Emmy。

https://soundcloud.com/machinelearningmusic/mazurka-after-chopin-by-david-cope

这是David Cope用Emmy合成的音乐,更多请点击这里

http://artsites.ucsc.edu/faculty/cope/mp3page.htm

可是,基于一定训练集的马尔可夫链只能产生存在于原始数据中的子序列,想要产生新的怎么办呢?

http://nbviewer.jupyter.org/gist/yoavg/d76121dfde2618422139

这就需要更高级的算法了。

这就需要用到循环神经网络(RNN)了,它可以产生新的、没有在训练集出现的序列。

1989年,由Peter M. Todd,Michael C. Mozer和其他人开发的RNN,首次使用RNN制作音乐,但受到短时依赖的限制,训练序列不能太长。

http://www.indiana.edu/~abcwest/pmwiki/pdf/todd.compmusic.1989.pdf

来看看RNN做的音乐,欣赏一下吧。

https://soundcloud.com/machinelearningmusic/after-bach-by-michael-c-mozer

由Michael C.Mozer 的CONCERT系统产生的Bach风格的三个简短的作品。

2002年,Doug Eck 从普通RNN切换到“长短时记忆网络”(LSTM)。利用这个方法,便可以简短的音乐片段来即兴创作蓝调。

他曾在笔记中写到这么一句:“只要有人愿意倾听,LSTM就能够以良好的节奏和正确的调式来演奏蓝调。”

欣赏一下LSTM制作的音乐吧。

https://soundcloud.com/machinelearningmusic/lstm-blues-improvisation-composition-4-by-doug-eck

更多不同音乐可以参考这里。

http://www.iro.umontreal.ca/~eckdoug/blues/

Doug是Google Brain  Magenta团队的带头人,自2016年初以来,他们一直在致力于机器学习和创造力相关的代码开发。

Magenta团队将基于LSTM的方法应用于鼓模式生成,旋律生成和复音音乐合成。

目前,他们已经开发了与人类表演者一起演奏即兴二重奏的系统,以及能产生有表现力的音量变化和节奏感工具。

https://soundcloud.com/machinelearningmusic/performance-rnn-by-magenta

原始帖子的更多示例音频请查看链接1。无限播放音乐请点击链接2。

1.https://magenta.tensorflow.org/performance-rnn

2.https://tambien.github.io/deeplearnjs/demos/performance_rnn/

训练这些系统遇到的经常性困难之一是如何设计音乐的特征表示。

虽然为RNN设计的编码可以把文本进行转换,但与文字不同的是,音乐中的单一时刻可以包含多个符号:它可以是和弦,也可以是各种音的组合,还可能有长时间无音乐播放。这些差异需要通过仔细制定音乐的特征表示,或者通过修改数据集和设计能够学习其中所有变化的架构来解决。

以数据驱动的算法面临的其他重大挑战还包括:要使用哪些数据?谁的音乐合适等?

任何自动化运行的系统都需要接受大量数据训练,可是这样的话,系统最后的预测结果风格往往更倾向于训练数据。

在音乐中,这意味着会产生很多和巴赫,贝多芬和其他老欧洲男人相似风格的音乐。由于数据也由研究人员选出,他们是一个相对同质化的群体,所以也导致了音乐的同质性。

虽然LSTM比普通的RNN或马可夫链能更好的处理长片段问题,但是在产生简短音乐片段和产生完美作品之间仍然存在差距。一些不需要大量的技巧和手动调整的方法还没有出现。不过,Jukedeck,Aiva,Amper等人的创业公司正在努力解决这个问题。

大公司也没闲着。

来自索尼计算机科学实验室的FrançoisPachet,现在在Spotify,从他的Continuator到最近的Flow Machines都在一直研究算法合成音乐。

以下为相关的音乐链接:

https://youtu.be/ynPWOMzossI

“Continuator”(2000)由FrançoisPachet设计,可以自动学习学习音乐家演凑的音乐。

https://youtu.be/LSHZ_b05W7o

这是在索尼CSL研究项目中,由FrançoisPachet主导的“Daddy's Car”(2016)。这是一个能自主产生音乐或与人类艺术家合作的人工智能系统。

IBM也在做类似尝试。

IBM Watson团队开发了一个名为Watson Beat系统的,可以根据旋律提示以有限数量的样式生成完整的曲目

https://soundcloud.com/ibmresearch/fallen-star-amped

Watson团队的其他研究人员与Alex Da Kid合作,根据社交媒体和文化挖掘的数据,为音乐提供主题和灵感。

以上介绍了三种制作音乐的算法:骰子游戏,马尔科夫链和RNN。不过,它们可不是制作算法音乐的唯一方法。

神经网络在音乐上的表现,最近远超人们的想象。

随着Andrej Karpathy的一篇非常受欢迎的文章“ 循环神经网络无法解释的惊人效果 ” 发布出来,RNNs逐渐流行了起来。

Andrej Karpathy表示,一个相对简单的神经网络(char-rnn)可以稳定重现任何类似“look and feel”这样的文字,不管是莎士比亚文集还是C ++语言。正如骰子游戏的流行是由于对数学兴趣和音乐的完美追求。

Andrej的文章出现的同时,让人们对神经网络的兴趣开始激增。

有些人受到char-rnn的启发,开发出专门用于音乐工作的架构。值得注意的例子是Daniel Johnson和Ji-Sung Kim、Christian Walder创造性地使用了LSTMs:他们从预先定义的节奏开始,让神经网络预测音高。

一些爱好者甚至把char-rnn用到了极致,他们直接使用原始的音频数据。

https://youtu.be/eusCZThnQ-U

Joseph L. Chu,在30分钟的“ 日本流行摇滚乐队 ”数据集上的训练结果

https://youtu.be/q0ZdSAkGo48

Priya Pramesi在Joanna Newsom数据集上的训练结果。

不幸的是,char-rnn难以抽象表达原始声音的特征。

在机器学习中,这与“过拟合”有关:模型可完全地拟合训练数据,但不能有效地泛化到没有被训练的新样本。

在开始训练的时候,模型无论在训练或测试数据上表现都不佳,经过多次迭代训练后,两者表现越来越好。但是如果训练太长时间,尽管训练误差一直在降低,但对测试数据会变得更糟。研究人员应在达到这个平衡点之前停止训练。但过拟合对生成音乐这类问题并不是很重要。

在2016年9月DeepMind发表了他们的WaveNet研究,据说可以为每一个样本建立音频的更高层次的特征。

WaveNet架构中使用的卷积图

在8位值的范围内,单个样本的概率分布

他们使用卷积网络,而不是使用循环神经网络来学习表示。卷积网络学习通过很多卷积核。它们通常用于图像处理,但WaveNet会将时间视为空间维度。

https://soundcloud.com/machinelearningmusic/wavenet-music-samples-1-6

WaveNet经过YouTube上钢琴音乐训练得到的。

可以看一下作者们的背景,WaveNet有一些有趣的前辈。

  • Sander Dieleman是音乐音频端到端学习(2014年)的第一作者,这是一个少见的早期例子,它使用神经网络逐个处理原始音频用于类型分类。

  • Aäronvan den Oord是Pixel Recurrent Neural Networks(2016)的第一作者,介绍了逐像素生成图像的网络。

  • Alex Graves,除了对语音和循环神经神经网络有长期的研究外,还在2015年3月展示了一种端到端训练的神经网络,用于合成语音。

关于WaveNet研究,我最喜欢事之一就是Sageev Oore制作这段钢琴曲,他当时在谷大脑里休假。

https://youtu.be/xTVwYFpK5Mo

Sageev Oore 表演WaveNet生成的音乐 “sample_3.wav”

在2017年4月,Magenta在WaveNet上创建了NSynth,这是一种分析和生成单音乐器声音的模型。他们与谷歌创意纽约实验室合作,一起创建了一个由nsynth驱动的“Sound Maker”实验。

Demonstration of linear interpolation between two sounds compared to NSynth interpolation.

2017年2月,由Yoshua Bengio领导的蒙特利尔团队发布了SampleRNN。这项研究受到来自Ishaan Gulrajani的实验的影响,他们在原始音频上训练了一个分层版本的char-rnn。

SampleRNN架构的简化图:分较慢的时间尺度(层2和3),较快的时间尺度(层1)。均采用相同的上采样比。

https://soundcloud.com/samplernn/samplernn-blizzard-mu-law-1

SampleRNN从一个人(Blizzard数据集)声音数据中训练了超过一百个小时后的结果。

https://soundcloud.com/samplernn/samplernn-music-1

SampleRNN在贝多芬的所有32首钢琴声中进行训练的结果。

https://soundcloud.com/psylent-v/samplernn-tangerine-dream-1

Richard Assar以Tangerine Dream这首曲子为训练数据,并训练了32小时。

SampleRNN和WaveNet都花费了非常长的时间来训练(超过一周),没有优化(如fast-wavenet),它们比实时生成的速度慢许多倍。为了减少训练和生成时间,研究人员使用16kHz和8位的音频。

但是对于像Google或百度这样的公司来说,音频生成的主要应用就是文字转声音,而快速生成是必不可少的。2017年3月,Google发布了他们的Tacotron,该研究使用光谱表示作为中间输出步骤,使用一系列字符(文本)来作为输入生成音频。

Tacotron架构,涉及技术包括注意力,双向RNN和卷积

Tacotron 演示示例与WaveNet类似,具有一些小的差异。逐帧生成音频的最后合成步骤依赖于Griffin-Lim的构建,这对于复音(单音的组合)和噪声来说鲁棒性不强,可以说这是一个缺陷。百度在Deep Voice 2研究中用到了Tacotron架构,通过添加一些特殊的结束状态来提高音频质量。虽然有很多与语音合成有关的其他研究,但和音乐相关的比较少。

下一个研究领域在哪里?

目前音乐自动生成正在探索的一个领域是基于语料库与帧级表示相结合来进行合成。

拼接合成是语音合成中常见的方法。这些技术也在纹理合成的声音设计中用了很长一段时间。

不过这种基于语料库的方法有个重大缺陷,它无法产生一个从来没有出现在原始语料库中的音频“片段”。

比如,在基于所有巴赫音乐的语料库训练模型中,巴赫从来没有写过C小调大7和弦,那么你将永远不会生成C小调大七和弦,即使该模型会产生和弦中的每个音符,即使它甚至学习如何表示相应的帧,也不会进行合成这些和弦。

为了克服这个限制,也许在逐帧的细粒度建模和音频分解的研究中,还有一些东西需要探索。

在研究方法方面,我至少看到两个反复出现的问题。

首先,我们应该使用什么样的特征表示?

有很多种表示方式,比如直接使用声音原始数据,还是转换成频谱,或者把声音按照音高进行离散表示。我们使用哪种方式呢?构建这样的系统我们需要多少领域专有知识?

第二,我们如何与这些系统进行交互?

因为从大量的音乐数据中学习的模型,生成的音乐会与作为训练数据的风格相似。我们希望模型来产生和训练语料类似的音乐,还是创新出不同风格的?对于如何构建完整的作品,还是如何即兴创作。我认为这些问题不只有一个答案,我们应该扩大想象力来探索声音特征表示和模型交互。

未来,音乐人真的会失业吗?

未来,当人工智能足够强大,强大到可以以假乱真,可以替代人类作曲家时,音乐人会不会真的失业?

研究人员通常比较倾向的说法是,他们是“不试图取代人类”,他们只是试图“建立新工具”,鼓励音乐家将人工智能及算法视为合作者,“辅助”人类创作。

那如果有一天,在没有任何人类的参与下,人工智能自己创造了一个完整的曲子,这个曲子还在人群中广为流传,这到底是好事还是坏事呢?

如果哪一天,人工智能强大到,只要你告诉它你想要什么样的感觉,他就可以照你的感觉来编辑曲子,那我们岂不是人人都能秒变作曲家?

也许到时候,再不会有周杰伦林俊杰李宗盛这些音乐天才了,因为,你,就是那个天才!

作者 | Kyle McDonald

原文

https://medium.com/artists-and-machine-intelligence/neural-nets-for-generating-music-f46dffac21c0

课程预告

一百天人工智能工程师学习计划——全程实战案例,从机器学习原理到推荐系统实现,从深度学习入门到图像语义分割及写诗机器人,再到专属GPU云平台上的四大工业级实战项目。100天内完美掌握人工智能工程师必备技能。

☞ 点击阅读原文,查看详细课程信息。

周杰伦林俊杰李宗盛快失业了!有了AI,未来人人都能秒变作曲家相关推荐

  1. python 只取数值_快收藏!Python常用操作运算符,都在这了!(下)

    泰迪学院-Python基础 公众号ID:taidixueyuan 还未阅读第一篇的小可爱,在这里可以直接跳转 快收藏!Python常用操作运算符,都在这了!(上) 5. 逻辑运算符 逻辑运算符包含an ...

  2. 美女主播即将失业?韩国首个AI女主播“金柱夏”诞生

    韩国首个人工智能(AI)女主播来了?据外媒报导,韩国MBN电视台推出韩国首位AI主播,并顺利播报了当天的主要新闻和若干条快讯.许多网友看完新闻后感慨,「能以假乱真了」. 据介绍,这位AI女主播以该电视 ...

  3. 又快又贱又失控?机器人教父Rodney Brooks预测AI未来32年历史进程

    点击有惊喜 Rodney Brooks的头衔太多了:澳洲科学院fellow.美国国家工程院院士.国际人工智能协会(AAAI)创始会员.作家.机器人企业家.MIT机器人教授.MIT计算机科学和人工智能实 ...

  4. 计算机键盘高手,键盘中的万能Win键,学会秒变电脑高手!快来看看吧

    原标题:键盘中的万能Win键,学会秒变电脑高手!快来看看吧 "Win键"位于Ctrl和Alt键之间,在使用电脑的过程中我们很少碰触到这个键,偶尔用到的也仅仅是打开开始菜单.关于这个 ...

  5. Selenium+Request+Beautifulsoup(周杰伦,林俊杰歌词爬取)

    爬去JZ的歌词是为了做一个NlLP的任务,这里是在python上使用Selenuim+Requests+BeautifulSoup实现的.使用selenuim是因为会涉及到动态网页抓取,又使用Requ ...

  6. 为了追求更快,CPU、内存、I/O都做了哪些努力?

    背景 曾经,我面试的时候有两个最怕的.一怕问算法,二怕问高并发. 算法这个,刷了不少LeetCode,发现还是有套路可循的,虽不敢说算法能力有多强,至少没有以前那么怕了(才怪). 而第二个,高性能高并 ...

  7. 高糊视频秒变4K,速度比TecoGAN快了9倍!东南大学提出新的视频超分辨率系统

    博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI 把高糊视频变清晰,对于AI而言算不上新鲜事. 但如果是实时处理,而且速度比主流方法还快了9倍呢? 而且计算量降低了,重建图像的质量却还非常能 ...

  8. python读csv最快方法_python读有汉字的csv如何让python变得更快?

    Python和其他脚本语言通常会被摒弃,因为它们相对于一些类似于C语言的编译型的语言来说效率很低.比如下面的斐波纳契数的例子: C语言中:int fib(int n){ if (n < 2) r ...

  9. 支持蓝牙的模拟器_手机外设系列:手机秒变掌机,快约老铁玩一局魂斗罗-蓝牙手柄篇...

    那些年,我们玩过的游戏,你还记得吗? 超级玛利.魂斗罗.炸弹人.90坦克.快打旋风.雪人兄弟...... 玩过这些游戏的小伙伴们,都成了油腻中年大叔了. 还记得下午放学后,约上一两个同学,插上大黄卡, ...

最新文章

  1. TensorFlow被曝存在严重bug,搭配Keras可能丢失权重,用户反映一个月仍未修复
  2. Docker系列 八.Docker下 Mysql 启动慢查询日志
  3. gitlab邮箱验证 邮箱提醒设置
  4. 微信一次发两个ajax请求,微信浏览器发送ajax请求执行多次解决方法
  5. 类属性、类方法;私有属性、公有属性;私有方法、公有方法;静态属性、静态方法;python的命名规范__xx__\__xx\_xx(自用笔记)
  6. centos 对某ip开放 防火墙端口_CentOS7 firewalld防火墙指定IP与端口访问
  7. ubuntu安装python3、setuptools、ipython
  8. linux 内存管理 ppt,Linux内存管理 Memory Manager.ppt
  9. WPF依赖属性(续)(4)依赖属性与数据绑定
  10. 从DT时代云栖大会聊聊恒生电子
  11. WSAData结构体的作用
  12. matlab 地址中有变量,在matlab中符号变量
  13. QQ企业邮箱和QQ邮箱之间的区别
  14. dcdc低压升压直流稳压高压负电压输出12v24v转-50V100V110V150V200V250V300V350V400V500V
  15. 判断站点访问的终端类型(移动端还是pc端)的方法(转)
  16. 怀揣巨资等了一季 陈天桥距门户野心咫尺之遥
  17. diy nas配置推荐2019_5款NAS 系统横向测评,看看哪款最适合你!
  18. python设置单元格宽度_python – 在Excel中调整单元格宽度
  19. 如何将大数组转成BIN文件
  20. linux下Found a swap file by the name解决

热门文章

  1. C++内存分配和管理
  2. 计算机电缆djyvp工艺,计算机电缆dJyvP相关办法.pdf
  3. COGS 2769. mk去撸串
  4. nodejs端口被占用。
  5. Linux之socket套接字编程20160704
  6. MongoDB修改器的使用1
  7. bzoj1854: [Scoi2010]游戏
  8. MongoDB安装指南
  9. 【转】MFC消息映射详解(整理转载)
  10. 【直播】林锦弘:CV赛事高分经验分享