访问 flyai.club ,一键创建你的人工智能项目
作者 | aliceyangxi
http://blog.csdn.net/aliceyangxi1987/article/details/70790405
今天想来看看 AI 是怎样作曲的。
本文会用 TensorFlow 来写一个音乐生成器。
当你对一个机器人说:我想要一种能够表达出希望和奇迹的歌曲时,发生了什么呢?
计算机会首先把你的语音转化成文字,并且提取出关键字,转化成词向量。
然后会用一些打过标签的音乐的数据,这些标签就是人类的各种情感。接着通过在这些数据上面训练一个模型,模型训练好后就可以生成符合要求关键词的音乐。
程序最终的输出结果就是一些和弦,他会选择最贴近主人所要求的情感关键词的一些和弦来输出。
当然你不只是可以听,也可以作为创作的参考,这样就可以很容易地创作音乐,即使你还没有做到刻意练习 1 万小时。
机器学习其实是为了扩展我们的大脑,扩展我们的能力。
DeepMind 发表了一篇论文,叫做 WaveNet, 这篇论文介绍了音乐生成和文字转语音的艺术。
通常来讲,语音生成模型是串联。这意味着如果我们想从一些文字的样本中来生成语音的话,是需要非常大量的语音片段的 数据库,通过截取它们的一部分,并且再重新组装到一起,来组成一个完整的句子。
生成音乐也是同样的道理,但是它有一个很大的难点:就是当你把一些静止的组件组合到一起的时候,生成声音需要很自然,并且还要有情感,这一点是非常难的。
一种理想的方式是,我们可以把所有生成音乐所需要的信息存到模型的参数里面。也就是那篇论文里讲的事情。
我们并不需要把输出结果传给信号处理算法来得到语音信号,而是直接处理语音信号的波。
他们用的模型是 CNN。这个模型的每一个隐藏层中,每个扩张因子,可以互联,并呈指数型的增长。每一步生成的样本,都会被重新投入网络中,并且用于产生下一步。
我们可以来看一下这个模型的图。输入的数据,是一个单独的节点,它作为粗糙的音波,首先需要进行一下预处理,以便于进行下面的操作。
接着我们对它进行编码,来产生一个 Tensor,这个 Tensor 有一些 sample 和 channel。
然后把它投入到 CNN 网络的第一层中。这一层会产生 channel 的数量,为了进行更简单地处理。
然后把所有输出的结果组合在一起,并且增加它的维度。再把维度增加到原来的 channel 的数量。
把这个结果投入到损失函数中,来衡量我们的模型训练的如何。
最后,这个结果会被再次投入到网络中,来生成下一个时间点所需要的音波数据。
重复这个过程就可以生成更多的语音。
这个网络很大,在他们的 GPU 集群上需要花费九十分钟,并且仅仅只能生成一秒的音频。