520研究了好久,有点小失望啊。 虽然最终出来的结果机器人创作的音乐差别并不大。 但是再深入看了算法的代码之后,觉得也没有我想象的那么智能。
接下来将分两步介绍,在开始研究该算法前我的理解,和该算法的音乐制作的原理:
我的理解:
首先,音乐不同于图片识别。对于音乐包含两个元素: 顺序和单音;
关于单音,肯定不会以字母的形式表达,应该会给每个单音一个数字标签;
关于顺序,虽然还没有学习过RNN算法,但是类似LSTM算法的作用也听说过。所以可以预见,该算法将肯定会,收集一些音乐,学习每个音乐的顺序;
关于神经网络,最后肯定是通过某种类型的神经网络学习,但是如何预测呢? 神经网络预测时,输入值是什么呢?
音乐创作就是一个预测问题,但是是以什么结构进行预测呢? 一个单音一个单音预测,还是10个 10个预测呢?
算法实践:
数据收集:
我们需要学习的是音乐的“顺序”,我们将100个音节定义为一个“顺序”单元(100是人为定的)
所以训练收据收集的目的是获取更多的 “顺序”单元
首先,收集了92首单乐器的音乐,钢琴曲。
然后,将92首钢琴曲,用Music92 分解为上一篇提到的乐谱格式。
然后,将92首钢琴曲的音阶组合成一个包含56807个音阶列表
最后,每隔一个音阶,切割100个单音组合成的序列。 最终得到 (56807-100+1)个训练样本
训练数据收集的过程,可以简单理解为,将92首钢琴曲组合在一起,然后再切割的过程。 但是这个处理方式有一个问题,就是可能存在 不同钢琴曲的衔接,造成 音阶顺序并不代表音乐。
神经网络结构:
要说明神经网络结构,需要先说明,神经网络的目的。
该算法制作音乐的方法,很“直接”,就是预测 ”下一个音阶“。 简单来说,就是输入100个音阶,输出一个预测的音阶。
那么从神经网络的目的,我们就能得知:
神经网络的输入层为100个单元
神经网络的输出层为314个单元(这92首歌有314个不同的和弦或者音阶)
神经网络隐藏层,为 循环神经网络结构 LSTM(还未完整学习)
训练及预测:
训练就不多讲了,直接进入预测环节。
按照该神经网络的模式,是输入100个音阶,然后预测1个音阶。 那么该算法是如何处理的呢?
首先,该算法从我们用于训练的(56807-100+1)个样本中随机抽取一个,输入神经网络(100个音阶),然后预测出第101个音阶。
然后,将原来100个音阶的第一个删除,再加上原来第101个音阶,形成新的100个音阶;
然后,循环以上操作100次,那么剩下的100个音阶都是预测得出的。
评价: 不知道其他音乐制作的算法是如何运作的,仅评价该算法
首先,用于预测的初始100个音阶是人类音乐。 所以从根源上,其就不是完整的机器音乐;
其次,该算法的机器音乐实际上,只是将原人类音乐(100个音阶)进行了非常复杂的变形。其并不能体现机器创造力;
最后,在神经网络训练完成后,输入的原始100个音阶,就决定了预测出的100个音阶。 所以旋律是否也会和原100音阶有一定联系;
结论,仅就该算法, 只是将原音乐以100音阶为单元进行了复杂的变形,背后并没有创造力的体现。 不过,LSTM算法还是很有意思的,虽然很复杂。
领取专属 10元无门槛券
私享最新 技术干货