Melody RNN总览
本文主要介绍Magenta RNN的模型架构和通过运行Python文件进行训练、生成的方法,以及修改Python文件的参数。
Magenta version:1.1.1
Melody RNN是什么?
Melody RNN是Magenta的自动作曲模型中最简单也是最基本的一个模型。万丈高楼平地起,Magenta就是从这个模型开始,一点点添加内容与架构,最后写就了如今这些种类繁多的自动作曲模型。
Melody RNN,顾名思义,是使用RNN模型对旋律(melody)进行生成的模型。该模型的输入为一段旋律(MIDI格式),而输出则是这段旋律与模型根据这段旋律继续生成的旋律,格式也为MIDI。
然而,Melody RNN也并不是个简单的模型。总的来说,Melody RNN模型是一个基于LSTM(Long short-term memory)网络进行时间序列预测的模型。只不过,我们将音乐转换为时间序列,对音高或事件进行编码,以进行预测。在Magenta的GitHub中对此模型的介绍为:Applies language modeling to melody generation using an LSTM. 事实上,此模型是参考基本的NLP(
Natural language processing)模型,尤其是其中的人工智能写作模型的。
在Melody RNN中,总体的数据表示方式为Pianoroll式,即将音符序列按一定时间间隔(通常是1/4小节)采样,形成时间序列对于见前文所述。其运用监督式学习进行训练,基于最大似然进行训练,目标函数为Softmax。
训练的目标为:输入一定长度的时间序列,预测(即输出)这个序列的下一个点的值。
在Melody RNN中,又分为四种不同的配置(或模型架构),每个架构都有不同的数据表示与RNN结构。这四种配置依次由简到繁,请读者依次阅读:
basic_rnn
:基准架构,音高使用one-hot编码。One-hot码的表示形式为:对于N个类,只有其中的一个位置值为1,其余为0,值为1位置的索引值即为当前编码的类的值。独热码中每个类的含义为MIDI音高,即每个类为一个半音。每个时间点的输入为按最小频率(默认为1/4个四分音符)采样的旋律的独热表示,