Press "Enter" to skip to content

机器学习-Music Generation

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

Music generation是微软实践空间站发布的项目之一,这些项目是从微软多个前沿科技中抽出一小部分所孵化出来的项目,我猜测Music generation是从微软小冰作曲唱歌这一块拿出的一小部分做为课题研究。项目链接:https://studentclub.msra.cn/project/institute/9


一、Music Generation背景介绍

该问题简单来说,需要我们训练网上下载的midi音乐旋律,建立自己的模型,让该模型能够自动的生成优美的旋律。

任务模型图

二、问题难点 – How to get loss?

这个问题比较特殊,一般的机器学习模型都有评判的依据,该依据与模型生成的结果产生loss,然后修正参数从而优化之前的模型。而该任务却没有评判的依据,生成的音乐并不知道好还是不好,这也是该项目中最难的地方之一。

How to get loss?

三、问题解决

1. GAN网络(方案一)

面对这种我称之为“无中生有”问题,我们首先想到的是GAN网络,GAN网络所使用的是生成器和判别器博弈的思想达到两者收敛后,即可使用生成器生成我们想要的东西,这与该问题十分符合,我们也想“培养”一个作曲家(Generator)和一个音乐人(Discriminator),希望这二者相互博弈来训练到达一个平衡,最终我们即可拆分出这个作曲家(Generator)下来用来生成音乐。但是直接硬套GAN网络让实验的结果很不好,产生的音乐基本上没有任何旋律可言。通过研究我们发现问题的所在出现在Generator上,一个随机初始化的Generator很难收敛到我们的目标情况,有时甚至会出现震荡出现不收敛情况。因此,一个想法萌芽,一个经过预训练好的Generator是我们想要得到的。

GAN模型

2. 从GAN网络到AutoEncoder自编码网络(方案二)

GAN和AutoEncoder这两个不大相关的网络是怎么联系到一起的呢?针对之前的问题,项目难点为没有评判指标,无法产生loss优化model。首先我们定义训练集中的音乐为“专业音乐”,受GAN网络启发,当音乐丢到GAN网络中训练时,生成器(Generator)用来生成音乐,判别器将生成器生成的音乐和训练集中的音乐进行区分,生成器希望判别器将自己的音乐判别为“专业音乐”,而判别器则希望判别训练集中的音乐为“专业音乐”,从而导致生成器的音乐越来越接近训练集中的“专业音乐”。重点来了(用加粗表示=  =),从GAN网络中能得到以下两点启发:
1. GAN网络最终最多只能学出和训练集接近的音乐。
2. GAN网络相当于使用训练集音乐做为评判标准,认为训练集音乐就是最好的音乐。

因此我们巧妙的将数据集本身做为评判的依据,我们认为数据集本身就是最好的音乐,因此我们生成的音乐和数据集本身音乐做比较就ok了。因此我们使用了autoencoder自编码网络取得了较好的效果,实验发现生成的音乐还是不错的,保持着部分训练集的旋律,能明显的听出有节奏的midi旋律。自编码网络虽然结构简单,但效果却非常不错。不少朋友可能会问自编码网络往往用来提取特征、或者会问自编码网络目的是想训练出一个输入和输出一样的网络用该方法是否得到的音乐和训练集一样等问题。第一个问题的解答是我认为能解决问题的方法即是好方法,墨守成规往往得不到好的解决方案;第二个问题的解答是实验表明用自编码网络生成的音乐是和训练集相似的,它学到了训练集中音乐的旋律、音色、高低中音以及音乐使用乐器等,通过实验会发现生成后的音乐非常有意思,能听出明显的节奏旋律、音色、所使用乐器等(实验代码将附在后面github上)。

AutoEncoder自编码网络

3. (Transfer Learning)简单介绍

为了引出我们的终极解决方案,这里要简单的介绍一下迁移学习。迁移学习(Transfer Learning)简单来说指一个预训练的模型被重新用在另一个任务中。迁移学习在机器学习中存在着广泛的使用,例如一个处理图片的深度卷积网络,该网络在训练过程中要花费大量的时间,若能将别人预训练好的模型进行简单的改造,保留其中核心的部分不变来得到自己的模型将节省大量的不必要的时间和机器的开销,迁移学习在其中就起到了很大的作用。我没有过深的研究过迁移学习,我们希望解决方案一GAN模型由于生成器(Generator)出现问题所导致整个模型生成音乐能力较差,因此,我们将使用到迁移学习来解决该问题。

4. Auto-GAN网络模型提出(方案三)

首先丢出我们的Auto-GAN模型:

Auto-GAN网络模型

Auto-GAN网络模型与GAN网络模型类似,区别于多加了左边这一部分。左边这一部分是我们的AutoEncoder自编码网络模型,首先对其进行预训练(Pre training),接着将预训练后的自编码网络模型迁移到GAN网络中,让其做为GAN网络的生成器(Generator),这样组成的模型会碰撞出怎样的火花呢?实验表明,我们的方向是正确的,使用预训练AutoEncoder自编码网络做为生成器后的GAN网络生成的音乐达到了不错效果。参照DCGAN的命名方式(由于使用深度卷积网络做为生成器以及判别器,命名为DCGAN),我们将我们的模型称为Auto-GAN网络模型。

四、附件内容

由于没法上传生成好的音乐,大家只能去我的Github中下载来听效果如何了。
GitHub链接: https://github.com/n291371205/midi

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注