本文首发于: 行者 AI
音乐是一门艺术,是一种通用语言。笔者把音乐定义为不同频率音调的汇合。旋律生成是一个在起码人为干涉下创作一首旋律的过程。
与基于规定的旋律生成算法不同,基于深度学习的旋律生成算法,能够从旋律数据集中主动的学习如何生成旋律。
本文将从上面几个方面介绍基于深度学习的旋律生成算法:
- 以后支流旋律生成算法的一些缺点
- 可能解决上述缺点的旋律生成算法介绍
1. 旋律生成算法的一些缺点
旋律生成算法须要解决以下几点缺点:
- 可管制
旋律生成算法不是随便让深度学习模型生成音符,而是须要解决在肯定的限度条件下,生成可管制的旋律。
- 结构性
这里的结构性指旋律的方向性以及旋律的结构特征。现有旋律生成算法生成的旋律不足旋律曲线的方向性,同时不足主歌、副歌、桥段等音乐曲式结构特征。
- 多样性
生成的旋律与现有的训练数据之间可能相似性可能较高,存在剽窃的危险。
- 交互性
现有的旋律生成算法通常是简略的间接生成旋律,然而通常的旋律作品须要作者进行重复的试听、打磨。现有的旋律生成计划短少这样的交互机制。
2. 可能解决上述缺点的旋律生成算法介绍
现有的旋律生成算法能够局部解决上述缺点,上面别离介绍几种现有的旋律生成算法。
2.1 可控制性
旋律生成算法的可控制性指的是,在模型生成旋律的同时,会依据额定的输出,生成的与之相指定的旋律后果。可供选择的输出包含:旋律曲线、和声进行、音乐流派、地位相干特色点(例如每一大节的某个音符与输出雷同)等信息维度。
Anticipation-RNN [[1]](vscode-webview-resource://38a46fbd-b23c-4402-8819-205c9efa9fe6/file///Users/liuxinzhong/Desktop/%E6%AD%8C%E5%94%B1%E6%97%8B%E5%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/articles/%E6%97%8B%E5%BE%8B%E7%94%9F%E6%88%90%E7%AE%97%E6%B3%95%E7%AE%80%E8%BF%B0.md#refer1)
《Anticipation-RNN Bach melody generation》是一个应用 RNN 网络的、局部可控的旋律生成算法。其次要思维是在一些要害地位输出音符的管制信息,从而达到生成局部可控旋律的目标。
该算法的次要构造如下图:
该算法由两条 RNN 模型组成:_Token-RNN_以及_Constraint-RNN_。其中 cici 示意与地位相干的限度,oioi 示意_Constraint-RNN_的输入。oioi 与 si−1si−1 同时输出 Token-RNN,输入以后地位的音符信息 sisi。
_Constraint-RNN_的输出包含_C_(管制以后地位的音符)以及_NC_(不管制以后地位的音符)。该算法能够让用户应用_C_管制特定工夫节点的音符,不须要管制的音符地位用_NC_示意。
例如用户想要管制特定地位(例如每个大节的第一个音符)的音符,那么就能够将_Constraint-RNN_模型的对应地位的输出音符的具体信息(例如音高,时长,力度等),其余地位输出 NC 符号示意不对音符进行管制,从而管制生成的旋律。
Unit selection and concatenation melody generation [[2]](vscode-webview-resource://38a46fbd-b23c-4402-8819-205c9efa9fe6/file///Users/liuxinzhong/Desktop/%E6%AD%8C%E5%94%B1%E6%97%8B%E5%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/articles/%E6%97%8B%E5%BE%8B%E7%94%9F%E6%88%90%E7%AE%97%E6%B3%95%E7%AE%80%E8%BF%B0.md#refer2)
应用 unit selection 做旋律生成的根本思维是从一个用户提供的高质量的旋律库中提取旋律(通常以大节为单位),而后将挑选出的旋律连接起来造成旋律。
该算法的次要构造如下图:
该算法当中蕴含一个自编码器(提取旋律的隐变量)以及两个 LSTM 模型(用来评估两条旋律是否能被连贯到一起)。该模型首先确定第一个种子旋律(通常是音乐的第一大节旋律),而后以种子旋律为根底,顺次从旋律库中调选最合适的旋律组合成最终的旋律。评估旋律是否适合的规范有两个:一个是以后旋律与下一条旋律的隐变量是否合乎,另一个是以后旋律的最初一个音符与下一条旋律的首个音符连贯到一起是否适合。这两个规范别离由两个不同的 LSTM 模型负责。
2.2 结构性
旋律生成算法面临的另一项挑战是:大多数旋律生成算法的后果不足结构性。也就是说,模型生成的旋律可能听起来像是训练数据集里的旋律,然而这些旋律不足一些段落层次感(例如流行音乐的主歌、副歌等不同局部)。
MusicVAE multivoice generation [[3]](vscode-webview-resource://38a46fbd-b23c-4402-8819-205c9efa9fe6/file///Users/liuxinzhong/Desktop/%E6%AD%8C%E5%94%B1%E6%97%8B%E5%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/articles/%E6%97%8B%E5%BE%8B%E7%94%9F%E6%88%90%E7%AE%97%E6%B3%95%E7%AE%80%E8%BF%B0.md#refer3)
《MusicVAE multivoice generation》是可能解决结构性问题的一种旋律生成算法, 其构造如下图所示:
MusicVAE 采纳了分级生成的形式来管制生成的后果的结构性。与惯例的旋律生成算法不同,该模型在应用 encoder 提取旋律的 latent code 之后,增加了一层 Conductor 层。这一层的每一个节点示意一个大节,每个节点上面别离连贯了一个 RNN 模型用来生成对应大节的旋律。
当应用 MusicVAE 生成旋律数据时,该模型能够保障由模型输出的旋律和模型输入的旋律具备雷同的段落个性。
2.3 多样性
多样性是指旋律生成算法生成的旋律与现有的旋律之间是否存在适度相似性,以防止一些版权问题。
MidiNet [[4]](vscode-webview-resource://38a46fbd-b23c-4402-8819-205c9efa9fe6/file///Users/liuxinzhong/Desktop/%E6%AD%8C%E5%94%B1%E6%97%8B%E5%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/articles/%E6%97%8B%E5%BE%8B%E7%94%9F%E6%88%90%E7%AE%97%E6%B3%95%E7%AE%80%E8%BF%B0.md#refer4)
MidiNet
是一个基于生成反抗网络的旋律生成算法。该算法由_Generator CNN_,_Discriminator CNN_以及_Conditioner CNN_三个局部组成,具体构造如下图所示:
其中_Conditioner CNN_的输出是之前大节的旋律信息(包含音符序列或者和声进行),输入是解决过后对应的高维度向量,这些向量能够作为_Generator CNN_的额定管制输出。
为了达到旋律生成的多样性,用户能够在应用_Generator CNN_生成旋律时,给不同的_CNN_层增加_Conditioner CNN_对应层的输入,如果用户须要对旋律增加更多的限度,那么能够给_Generator CNN_中更对的层增加_Conditioner CNN_对应的输入,反之亦然。这样能够达到用户管制生成旋律的多样性的成果。
2.4 交互性
在大多数现有的旋律生成算法当中,旋律生成是主动实现的,很少有模型蕴含与用户交互的生成形式,这就导致,旋律生成模型不反对批改或者是从新生成局部已生成后果,旋律生成模型只能从新生成整段旋律。然而作曲家作曲时的工作流程是靠重复的批改,而后能力失去最终的作品。能够这么说,现有的大多数旋律生成算法对于音乐工作者的帮忙是极少的。
DeepBach chorale generation [[5]](vscode-webview-resource://38a46fbd-b23c-4402-8819-205c9efa9fe6/file///Users/liuxinzhong/Desktop/%E6%AD%8C%E5%94%B1%E6%97%8B%E5%BE%8B%E6%95%B0%E6%8D%AE%E5%BA%93/articles/%E6%97%8B%E5%BE%8B%E7%94%9F%E6%88%90%E7%AE%97%E6%B3%95%E7%AE%80%E8%BF%B0.md#refer5)
《DeepBach chorale generation》 是反对部分旋律生成的一种旋律生成算法,具体架构如下图所示:
该计划的次要原理是训练时思考旋律的正向与逆向两个方向的旋律数据,因而 DeepBach 应用了两个 LSTM 网络,其中一个网络提取待预测工夫点之前的信息,另一个网络提取待预测工夫点之后的信息,模型的输入是以后工夫点的旋律。也就是说,该算法反对旋律的补全,用户能够在生成残缺段旋律之后,从新生成不称心的旋律局部,从而达到算法与用户的可交互性。
参考文献
[1] Hadjeres G, Nielsen F (2017) Interactive music generation with positional constraints using anticipation-RNN. arXiv:1709.06404v1
[2] Bretan M, Weinberg G, Heck L (2016) A unit selection methodology for music generation using deep neural networks. arXiv:1612.03789v1
[3] Roberts A, Engel J, Raffel C, Hawthorne C, Eck D (2018) A hierarchical latent vector model for learning long-term structure in music. In: Proceedings of the 35th international conference on machine learning (ICML 2018). ACM, Montre ́al
[4] Yang LC, Chou SY, Yang YH (2017) MidiNet: a convolutional generative adversarial network for symbolic-domain music gen- eration. In: Proceedings of the 18th international society for music information retrieval conference (ISMIR 2017). Suzhou, China
[5] Hadjeres G, Pachet F, Nielsen F (2017) DeepBach: a steerable model for bach chorales generation. arXiv:1612.01010v2
PS:更多技术干货,快关注【公众号 | xingzhe_ai】,与行者一起探讨吧!