龙空技术网

人工智能:作曲?we can do it

品玩 168

前言:

眼前朋友们对“算法demo”大致比较关切,兄弟们都想要知道一些“算法demo”的相关知识。那么小编在网上网罗了一些关于“算法demo””的相关文章,希望姐妹们能喜欢,看官们一起来学习一下吧!

人工智能可以作曲吗?理论上是否可行?哪种程度上可以代替人类?本期品玩知科技,邀请了知乎答主@谢圜来讲述人工智能与音乐的那些事:

计算机音乐领域,是一个广阔的领域。

其主要的研究方向包括音乐识别、音乐信息处理、音乐旋律与节奏分析、音频音乐检索、音频数据挖掘与推荐、音乐情感计算、音乐结构分析、算法作曲、自动编曲、说话人识别、语音增强、音频信息安全等。

2017年,英伟达公司发布了AIVA人工智能作曲模型,随后迅速得到商用,广泛用于网络视频的自动配乐。也正是这时候,音乐人工智能领域进入深度学习时代,深度学习算法成为本领域在国际工业界中的核心技术,被索尼、Spotify、苹果等公司使用在其音乐产品上;字节跳动招募了大量相关人才,研发了火山小视频和抖音应用的音乐推荐、音乐搜索算法,得到广泛使用;腾讯音乐部门将音乐信息检索的算法应用在社交互动领域,使得用户获得了更好的音乐社交体验。

其中最引人注目的topic,就是自动作曲。随着这波深度学习大潮,自动作曲技术也取得了很大的进展。

音乐生成的起源

早期,莫扎特曾经创作过一首《骰子音乐》,通过丢骰子的方法自动选择小节组合:组合出来的完整音乐仍然悦耳,但是创作的过程带有一定的随机性。

一个在线的demo:Mozart Dice Game​mozart.vician.cz

1950年代,第一批计算机发明后,出现了第一批计算机音乐。最早的音乐构建了一个马尔科夫过程,使用随机模型进行生成,辅以rule-based的方法挑选符合要求的结果。

当然这类方法生成的音乐质量不高。随着机器学习的发展,算法应该从音乐材料中自动地学习出一些规律,得到自然的音乐。

两种音乐生成

人类大致有两种方法参与自动音乐生成:

自动生成。基于各种技术进行全自动音乐生成,而人类仅指定风格参数。如NVIDIA的AIVA就是一个典型的例子。辅助作曲。FlowConmposer是一个典型的例子。这里算法为人类的作曲做出建议和补充,进行共同作曲。

目前大部分的算法都属于第一类方法。第二种方法在很多情况下是第一种方法的组合和变体。

一个例子

2019年3月21日,Google Magenta组贡献了一个交互式算法demo,称为Bach Doodle,通过学习J. S. Bach的四重奏,算法可以由用户指定第一声部,然后自动计算给出剩余的三个声部。

(虽然很难听,但是Magenta在computer music领域黑不动)

我们以这个算法的雏形和前身“MiniBach”算法开始。

To specify the problem, 我们形式化决定算法仅生成四个小节的音乐。

如何将音乐转换为符号表示,其实有很多种方法。被公认的主流方法之一是piano-roll及其变体。midi可以表示128个不同的音高,将129指定为rest,130指定为sustain(持续),则音乐可以用一个130*N的矩阵表示。N取决于分辨率和音乐实际长度。主流设置是将16分音符作为最小的分辨率,那么一个4/4拍的两小节音乐可以被表示为130*32的矩阵。

然而minibach作为早期模型,没有采用成熟的表示法,而是将21个音高*16个step*4个小节=1344,一共1344个node,使用了一个多分类器进行学习:

音乐人工智能的先驱者们

下面直接进入神经网络相关的模型:一波星星之火随着深度学习的浪潮而兴起。

首先是Todd的时间窗口-条件循环结构。

Todd的目标是以迭代的方式产生单音旋律(monophoic melody)。他的第一个设计是time-window结构,通过滑窗的方法,逐段地反复地进行旋律生成,上一段的输出作为下一段的输入。这是一个非常直接且朴素的想法。注意,这个idea是在1989年产生的,距离LSTM的正式诞生还有26年。

他还设计了Sequential结构,输入层分为两部分,分别是context和plan。context是生成的历史旋律,而plan是预先设置的需要网络学习的特定旋律的名字。

Todd的这个模型影响深远,甚至可以看作是conditional network结构的先驱。

Todd后续还陆续提及了一些想法,希望得到解决,他们包括:

音乐的分层结构(structure and hierarchy)。这个问题至今没能得到完美的解决。2019年Google Magenta的MusicVAE试图在这个问题上有所突破,这也是我研究的课题之一。

多时钟结构。这个问题后面被ClockworkRNN和SampleRNN等模型尝试解决。

第二个提到的人是Lewis,他提出了基于refinement的方法(Creation by Refinement, CBR),提出通过梯度下降的方式训练模型。Lewis人工构建了正确的和没那么正确的旋律,通过我们现在熟知的方法进行网络训练。

Lewis的算法可以是看作最大化一些目标属性,以控制生成模型的各类方法的前身。现代的诸多算法都使用了类似的机制,如DeepHear最大化与给定目标的相似度,DeepDream最大限度地激活特定单元,等等。

有意思的是,这个网络使用梯度下降和反向传播机制进行训练,而且是在1988年。

此外,Lewis颇有创意地提出了一种attention机制和一种hierarchy方法。这个方法简单来说,有点类似于一类形式语法规则,如ABC变为AxByC,在不改变现有token的情况下,使用attention地方式选择位置,然后进行拓展。

与综述一样,我们从下面五个方向展开介绍:

目标。即我们要生成什么,是旋律,伴奏,还是和弦?要生成的是乐谱还是音频?是单声部的还是多声部的?在各个小领域中这些问题都有不同的人在努力研究。如Gus Xia老师就致力于研究人机交互的自动伴奏方法。表示。即如何表示音乐。对于原始音乐的表示包括五线谱、midi message、Piano-roll等,而音乐的高层表示也有很多,比如GTTM表示法。模型结构。这个模型是RNN模型、VAE模型、GAN模型,还是多种模型的组合、改进、变化?要求。即对生成结果的质量评估,如流畅性、创造性、一致性等。策略。如逐步迭代、encoder-decoder方法等不一样的生成方式。

要注意上面五个方法并不是正交的。

首先来聊聊音乐的表示法。音乐主要以两种形式表示:audio和symbolic。所以前几年相关的基础研究,有的会说自己是“symbolic domain music generation”,最近见得少了。

audio。audio主要有:信号波,频谱(通过FFT得到)。这两种表示都很常见,尤其是在做transcription这类相关任务时。symbolic。主要包括midi文件里的midi message,piano-roll,文本格式。piano-roll的一个结构图如下图所示:

而文本格式中最被广泛使用的为ABC notation。现在还有活跃的社区在收集ABC标注的数据集:

也有相关的网站提供了ABC格式在线渲染乐谱的demo,有兴趣的话可以访问这个网站,体验一下ABC notation和乐谱的对应关系:

在一些格式中,模型会遇到编码问题。比如说音高pitch,既可以用一个实数表示,也可以用一个one-hot向量表示,甚至可以通过二进制来表示。目前one-hot是最为广泛的采用方法。

下面,我们来认识一些基本的模型。这些模型包括:

前馈网络RNN循环结构,包括递归的循环和采样策略。将采样策略应用上时,可以使得生成的音乐有更多的不确定性。RNN模型中,每一步输出的音高由softmax决定,而softmax本身是一个概率函数,采样策略用它来取得不确定的输出。

之后是一些复合架构。复合的方法可以分为下面几种:

组合。将现有的结构堆叠在一起,如Bi-LSTM,RBM-RNN,C-RNN-GAN,MusicVAE等模型。

C-RNN-GAN的结构

细化。即对结构做出约束,添加人为的inductive bias,使得模型有所偏向和专门化。如VAE中,对latent Z做额外的约束,使得Z满足高斯分布和一些特定的条件,从而隐式引导模型往需要的方向学习。嵌套。嵌套一个模型到另外一个架构中,成为一个子单元。MusicVAE同样也采用了这种做法。模式(Pattern)。即引入一个外部的pattern到模型中,使模型能够处理pattern层面的信息。

下图是流行模型的分类归属:

我们再讨论一些改进的架构。

VAE。VAE是现在音乐生成模型中最流行的架构之一。基础的VAE和嵌套的VAE结构如下图:

有工作试图将latent Z解耦,利用多个encoder和decoder进行表征学习的工作,如ISMIR 2019的音色分离模型:

事实上得到latent Z之后,可以通过多种方法对Z进行decoding,得到音乐。比如说sample一个符合原分布的向量,再交给Decoder进行VAE的解码工作。当然,插值等方法也是可以使用的。

目前一个研究热点问题是对VAE中的latent Z进行解释、分离,以达到表示学习的目的。如ISMIR 2019上一篇音乐节奏风格迁移的文章,就是将latent Z的不同部分分别约束,强制latent vector包含特定的含义。

简单的说了一下VAE之后我们再讨论GAN模型。GAN模型近年来远没有VAE模型多见,而更多地用作弱监督环境下提升质量的方法。前几年的MidiNet就是GAN模型:

正如我之前提到的,对网络的中间变量进行采样,然后对生成的结果做迭代的细化,也是生成的一个策略。DeepBach采用了类似的策略:

在实际使用中,DeepBach可以指定重新生成音乐的任意部分,无需重新生成整个内容:

无独有偶,Bach Doodle的原文CocoNet,也采用了相似的方法。网络通过反复擦除不同地方的结果,让网络进行补完,之后采样,再补完,迭代地细化结果:

最后闲聊一些别的。

音乐生成领域非常广阔,从计算机音乐顶会ISMIR每年CfP时的说明就可以看出来,有很多值得研究的主题。

在这些主题中,纯粹的音乐生成其实并不是最热门的方向。在音乐信息检索、音乐转录、哼唱识别、音乐学研究等领域,也有无数学者孜孜不倦地努力着。

此外,计算机音乐也与NLP、数据挖掘等领域紧密相关。KDD、ICML等会议都曾出现过相关论文和workshop。

欧洲比较著名的研究机构,包括Queen Mary的C4DM,规模和整体科研实力都是在欧洲数一数二的:

法国的IRCAM:

西班牙的UPF-MTG:

北美斯坦福的CCRMA:

纽约大学的MARL:

麦吉尔大学的CIRMMT:

亚洲新加坡国立大学:

日本京都大学:

遗憾的是,我们国家在计算机音乐领域还远没有发展起来。

近年来我们成立了自己的社区,有了自己的会议:

与我比较熟的同行们,主要来自下面的实验室:

北京大学陈晓鸥老师的数字音频研究所:

复旦大学李伟老师的实验室:

北京邮电大学李圣辰老师的实验室:

上海纽约大学夏光宇老师的实验室:

至于工业界,主要是腾讯的QQ音乐:

以及字节跳动的抖音:

可以明显地感觉到,国内和国外,不管是工业界还是学术界,都有着数量上的明显差距。国内的计算机音乐方兴未艾,这对所有从业者来说,既是挑战,也是机会。

“品玩知科技”系知乎科技和 PingWest品玩 联合出品的精品栏目,知乎科技是知乎科技数码领域的官方机构号。针对科技热点新闻和好玩儿的数码体验,第一时间为用户带来可信赖的解读。

标签: #算法demo