使用递归神经网络生成古典音乐

如今,训练有素的神经网络可以做令人惊奇的事情,但是在这一领域的实验仍在继续发现新的事物。例如,程序员丹尼尔·约翰逊(Daniel Johnson)发布了有关使用神经网络生成古典音乐的实验结果

不幸的是,您不能在GT上嵌入音频文件,因此您必须提供直接链接以收听其中一个结果:http : //hexahedria.com/files/nnet_music_2.mp3

他是怎么做到的?

丹尼尔·约翰逊(Daniel Johnson)说,他专注于不变性的性质。现有的大多数用于音乐生成的神经网络都是时间不变的,但不是音符不变的。因此,仅移调一个步骤将导致完全不同的结果。对于大多数其他应用程序,此方法效果很好,但不适用于音乐。在这里,我想实现和谐。

丹尼尔(Daniel)只发现了一种流行的神经网络,它在多个方向上都具有不变性:这是用于图像识别的卷积神经网络。



作者改编了卷积模型,为每个像素添加了具有自己内存的递归神经网络,并用注释替换了像素。因此,他收到了一个时间和音符都不变的系统。



但是在这样的网络中,没有获得和弦的机制:在输出时,每个音符是完全独立的。

为了实现音符的组合,Johnson使用了RNN-RBM之类的模型,其中神经网络的一部分负责时间,另一部分负责辅音和弦。为了规避RBM的局限性,他提出了两个轴的介绍:时间和注释(以及用于计算方向的伪轴)。



使用Theano图书馆作者根据他的模型生成了一个神经网络。具有时间轴的第一层在输入时采用以下参数:位置,音高,周围音符的值,先前的上下文,节奏。然后,基于短期记忆(LSTM)的自生成块被触发:一方面,循环连接沿时间轴定向,另一方面,沿音符轴定向。在最后的LSTM块之后,有一个用于发布最终结果的简单非重复层,它具有两个输出值:演奏特定音符的可能性和发音的可能性(即该音符将与另一音符组合的可能性)。

在训练期间,我们使用了从古典钢琴Midi Page MIDI集合中随机选择的一组短音乐片段然后,我们对数进行了一些处理,以使输出中的交叉熵参数至少不会太低。为了保证层的专业性,我们使用了诸如dropout的技术,当在训练的每个步骤中意外地排除了一半的隐藏节点。

实际模型由时间上的两个隐藏层(每个300个节点)和沿着音符轴的两个层组成,分别用于100和50个节点。培训是在Amazon Web Services云中的g2.2xlarge虚拟机中进行的。

结果



该程序的源代码发布在Github上

Source: https://habr.com/ru/post/zh-CN382711/


All Articles