大数据文摘出品
编译:毅航、Virgil、Charlene、Jonykai、Aileen
音乐的诞生甚至早于语言,人类对于音乐的探索却从未停止。从最初的“音乐骰子”到如今火遍二次元的宅男女神“初音未来”,算法与音乐之间的故事,才刚刚开始。
算法与音乐的结合在最近几年中取得了很大进展,突然火了起来。谷歌语音助手的“人声”预约让人们大呼,谷歌AI成精了;IBM Waston创作的歌曲甚至获得了格莱美音乐奖……
人们希望借助自然的力量,更自动地创作音乐,这种想法实际上早已出现。
从某种程度上说,第一首自动生成音乐来自于大自然:中国的风铃、古希腊的风弦琴、日本的水琴窟等。
但是,算法音乐真正出现,是在17世纪的时候。有人发明了这个名叫“音乐骰子(Musikalisches Würfelspiel)”的游戏,它能通过掷骰子选择音乐片段,再合成出钢琴片曲。
☟“音乐骰子”游戏示例
https://v.qq.com/x/page/h1343td3b90.html
早期的算法音乐发展史
马尔可夫链模型成形于19世纪早期,它被用于模拟概率系统,也可以用来生成全新的音乐作品。
比起骰子游戏的原理,马尔可夫链作曲在两个方面都更胜一筹:第一,马尔可夫链只需现成的音乐片段即可作曲,而不用专门谱写可互换音乐片段;第二,马尔可夫链根据音乐内容来编码音乐片段的概率分布,而非假设所有的片段具有相同的概率。
“*中午”(Remixing Noon) ,作者为Rev Dan Catt:一条基于散文训练出的马尔可夫链的路径
Iannis Xenakis在他1958年的专辑《模拟》(Analogique)中就使用了马尔可夫链来作曲。在他的文章《合成音乐:乐曲中的思想与数学》里详细描述了每个音符的概率转移矩阵。
☟第三章“马尔可夫的随机音乐:应用”(节选)
https://v.qq.com/x/page/e1343co9tml.html
《模拟A和B》Iannis Xenakis
1981年,David Cope开始利用算法作曲来解决其创作瓶颈的问题。他将马尔可夫链和其它技术(音乐语法和音乐组合学)结合成一个半自动作曲系统,他称之为“音乐智能实验”或Emmy。Davi写了论文和专利来详细描述Emmy,甚至把源码传到了GitHub上。Emmy在学习、模仿其他作曲家方面很出名。
☟Emmy模仿肖邦玛祖卡舞曲的音频
https://soundcloud.com/machinelearningmusic/mazurka-after-chopin-by-david-cope
神经网络应用于音乐创作
基于一组乐谱上训练出的马尔可夫链只能产生原始数据中存在的子序列,而递归神经网络(RNNs)却可以推断出现存子序列中没有的东西。1989年,Peter M.Todd, Michael C, Mozer和其他伙伴第一次尝试使用递归神经网络生成音乐。但是由于RNN只能生成在短期内连贯的音乐,因此生成的质量一般。
☟由CONCERT系统生成的三段巴赫风格的音乐
https://soundcloud.com/machinelearningmusic/after-bach-by-michael-c-mozer
2002年,Doug Eck用“长短期记忆(LSTMs)”神经元替代标准的RNN神经元,从而改进了这种方法。Doug利用该架构在一段短录音的基础上即兴创作了一段布鲁斯。他写道:“非常令人赞叹,只要有人愿意听,LSTM就能以不错节奏和恰当的构曲来演奏布鲁斯音乐。”
Doug现在在谷歌大脑带领Magenta团队,自从2016年初,他们就一直致力于开发、分享与机器学习和创造力有关的代码。Magenta已经利用Doug的基于LSTM的方法进行鼓型生成、旋律生成和复调音乐生成。他们已经构建了能够与人类演奏者一起即兴创作二重奏的系统,以及能够生成富有动感、节奏合适的复调音乐的工具。
☟打开链接欣赏音乐
https://soundcloud.com/machinelearningmusic/performance-rnn-by-magenta
训练这些系统时常常遇到的难题是如何确定音乐的表示方式。编码一个RNN模型可能从文本材料的一个隐喻开始:RNN会处理一系列随着时间或空间(纸张)排列的状态(字母)序列。
但是不同于文本,音乐里的一个瞬间含义更加丰富,它可以是一个和弦,或者是各种特性的组合以此获得更好的表达。除此以外,音乐里还可能有长时间的无声或长度不一的小节。这些不同可以通过下面的方式来解决:人为构建更为合适的表示、数据增强以及设计合理的架构以保证能学习到所有的规律。
数据驱动的算法作曲所面临的另一个挑战是,用什么数据来训练?哪位音乐家的音乐有代表性?当任何自动化的创新系统需要在大量文化作品上训练时,系统往往会受那些数据量最多的文化数据的支配。
以音乐为例,巴赫、贝多芬等早期欧洲音乐大师的音乐会占音乐训练数据的大半(除了一些英国和爱尔兰民谣)。另一方面,数据是由研究人员来选取的,而研究人员们也是相对同质化的群体。
虽然LSTMs能够比标准RNN或马尔科夫链更好地保持长期一致性,但在生成短语和生成整个乐谱之间还是有差距,这一点仍需依靠手工调整。像Jukedeck, Aiva, Amper等初创公司正试图填补这种手工调整的、按需生成的公式化音乐的市场空白。
有些公司甚至已经发行了整张唱片作为营销。大公司也加入战局。François Pachet之前在索尼计算机科学实验室(Sony Computer Science Laoratories)工作,目前任职于Spotify,他研究算法生成音乐已经很长时间了,从他开发的“延续者Continuator”系统到最近的 “流动机器”Flow Machine。
https://v.qq.com/x/page/t1343jo7k5z.html
“延续者(Continuator)”旨在“利用风格一致、自动学习的音乐材料拓展音乐家的技术能力”
☟打开链接观看欣赏音乐
https://youtu.be/LSHZ_b05W7o
由“流动机器”创作的《爸爸的车》(2016)是François Pachet在 Sony CSL组织的一个研究项目。“流动机器”计划去“研究和开发出能够自主或与人类艺术家合作产生音乐的人工智能系统”。《爸爸的车》的编曲、歌词和制作都由作曲家Benoît Carré完成。
尽管这些研究机构的技术都是独有的,但我们仍然可以根据它们背后的研究人员猜测出它们的关系。比如Flow Machine很可能与Continuator用的相近的方法,即比起Doug Eck更像David Cope一些。
如果对基于RNN的辅助重奏或者连续性音乐生成感兴趣,可以去看下Mason Breton的Deep Musical Dialogue或者谷歌Magenta的AI Duet。二者都是由使用者输入一段音乐,然后模型就会为你生成和谐的和声。
IBM的Watson团队开发了一个系统叫做Watson Beat可以在有限的音乐类型中基于旋律生成完整的歌曲。
☟打开链接欣赏相关音频
https://soundcloud.com/ibmresearch/fallen-star-amped
上面的音乐是Watson的其他研究人员和英国歌手Alex Da Kid合作,基于从社交媒体中挖掘出的数据来为音乐寻找主题和灵感。这首曲子在格莱美还得了奖。
骰子游戏、马尔可夫链和RNN并不是唯一用程序创作音乐的方法。有一些机器学习工作者们同样尝试了hierarchical temporal memory(分层时序记忆),和principal components analysis(主成分分析)。
但我在这里更关注神经网络,因为它们是主流的研究方向。尽管这样,在神经网络里还有一些小分支被我忽略了,比如用restricted Boltzmann machines(RBM,受限玻尔兹曼机)在四小节爵士乐的小节及整首歌曲的创作,又或混合RNN-RBM模型以及混合autoencoder-LSTM models(自编码器-长短期记忆模型),还有neuroevolutionary strategies (神经进化策略)。
斯坦福学者Andrej Karpathy 在2015年5月发表博客The Unreasonable Effectiveness of Recurrent Neural Networks(RNN不讲道理地有效) 之后,RNN的威力才被众人所知道。Andrej在该文章中用了一个相对简单的神经网络叫char-rnn可以创造出十分逼真的文本,内容从莎士比亚风格的文章到C 的代码。
就如同骰子游戏在理论主义复兴和人们对数学的兴趣中火了一把一样,Andrej的文章正好在神经网络的风潮中应运而生,重新激起了人们对RNN的兴趣。一些人就把Andrej的模型应用到了音乐符号生成上。
☟打开链接观看欣赏音乐
https://youtu.be/RaO4HpM07hE
由Bob Sturm创作“8个简短音乐”,用了char-rnn和23000个爱尔兰乡村音乐的谱子生成。他还领导着其它研究组织进行类似的创作。
有些人受char-rnn的启发,改变了其中的结构使得更适用于创作音乐。一些值得注意的成果有Daniel Johnson和Ji-Sung Kim。
Daniel Johnson:
http://www.hexahedria.com/2015/08/03/composing-music-with-recurrent-neural-networks/
Ji-Sung Kim:
http://www.hexahedria.com/2015/08/03/composing-music-with-recurrent-neural-networks/
Christian Walder以一种特殊的方式使用LSTM:用一个已经设计好的节奏作为起步,让神经网络去补充中间的音符。这种方法弥补了在其他模型中缺失的全局结构,但同时也限制了模型的可能性。
到目前为止,上述所有的例子都是基于音乐的符号来表示音乐的,一些爱好者们已经在想如何直接把原始的音频信号作为char-rnn的输入。
☟打开链接观看欣赏音乐
https://youtu.be/eusCZThnQ-U