Day 26: 人工智慧在音乐领域的应用 (AI作曲 - 生成对抗网路 Gan (干) )

今天我们来聊聊生成对抗网路 (Generative Adversarial Network, GAN) ,发音为

GAN是Ian Goodfellow在2014所提出,在GAN问世之後,因为大幅突破了以往神经网路的的学习,因此大大引起了高度的关注与讨论,此外,饱受争议的Deepfake更是让Gan好好的曝光了一番,有兴趣的朋友可以自行Google一下Deepfake到底在做什麽,但建议不要在上班时间 (NSFW~~~~)。
https://ithelp.ithome.com.tw/upload/images/20211010/20140556aLW2ShNjGG.png

GAN是什麽

到底GAN是什麽,而其中又有什麽特别的特质呢?
首先我们先来介绍GAN里面的两个主要元素: GeneratorDiscriminator
GeneratorDiscriminator 两个都是个别的神经网路,Generator的功用是用来创作,而Discriminator的功用则是用来检验Generator创作出来的成品
举例来说,今天我们有一位新手画家 (Generator),由於是新手,所以它很随意的照着自己心之所向随意创作。而它画完的作品则是送给他一位好朋友新手监赏师 (Discriminator)监定,但由於监赏师也是新手,所以它也还没有能力准确的评断新手画家画的作品是否是好的,在这个时候我们的新手画家与新手监赏师,简单来说就是
https://ithelp.ithome.com.tw/upload/images/20211010/20140556g6Ebk2rbvs.png
因此我们先针对新手监赏师做训练,对於Discriminator,我们会给他一系列的画并且告诉他这些画是来自真实世界的(是好的画),而新手监赏家手上则有另一部分来自新手画家创作出来的画,於是慢慢的,新手监赏家对於分辨画的好坏的能力越来越强,与此同时,他也将这些资讯回馈给他的好朋友新手画家,并告诉新手画家你画的东西根本狗屁不通,请针对某些项目去做强化。
https://ithelp.ithome.com.tw/upload/images/20211010/201405565RON7zYjMb.png
而新手画家得到这些回馈之後也会随之作出调整,慢慢的,新手画家与新手监赏家在这过程之中彼此扶持教学香肠
https://ithelp.ithome.com.tw/upload/images/20211010/20140556jMNsRwLUAV.png
最後新手画家已经进步到可以画出几可乱真的画作而骗过新手监赏家的监定。
透过这样的模式,我们可以训练出各种不同的Generator来达成不同目的,例如上面提到的作画、影像生成以及音乐创作等等。

一些GAN的应用范例:
Gan1
Gan2
Gan3

GAN 作曲

那麽回到我们的主轴 - 如何透过这样的机制来实现作曲呢?
首先跟上面的作画一样,我们让新手作曲家 (Generator) 随兴的创造他喜欢的旋律,与此同时我们开始训练新手音乐评论家 (Discriminator) ,而这个时候我们必须选择要教导Discriminator什麽样的音乐风格,他才能依此训练自己的评监能力进一步引导Generator做出相对应风格的乐曲。
例如,我们每次告诉新手音乐评论家好的音乐片段都是来自莫札特的作品,长久训练下,新手音乐评论家就能够分辨出新手作曲家的音乐与莫札特的音乐,进一步的教导新手作曲家要如何做出莫札特的音乐
https://ithelp.ithome.com.tw/upload/images/20211010/20140556F5rHN9JsO1.png

最後我们总结一下这几天介绍的几个神经网路作曲:
循环神经网路 RNN 能够有效的处理音乐片段并以此预测接下来的音符来实现作曲的目的,然而缺点是缺乏长期记忆因此无法准确的判断出音乐的曲式与结构;
长短期记忆 LSTM 则进一步改良RNN的缺点,利用控制阀记忆的特性,有效的将重要的资讯存入长期记忆里;
生成对抗网路 GAN 则是针对创作评监分别作训练,透过输入特定风格的音乐片段,进一步引导Generator创作出相近风格的音乐

那麽,介绍AI方法作曲的部分我们就到这边画下尾声,明天开始我们一起来看看现在市面上有哪些已经成熟且方便使用的AI作曲应用。
https://ithelp.ithome.com.tw/upload/images/20211010/20140556DeWttwYwAy.png


<<:  Day28 - 如何埋 GA (Google Analytics)

>>:  # Day26--要移花接木就是要rebase~

4.MYSQL语法简介

在SQL中写法很重要,因为写法会影响着最後输出的结果 如果我们要写出自己的资料库就一定要先了解他们的...

D12: 工程师太师了: 第6.5话

工程师太师了: 第6.5话 杂记: 串列链结是一种资料结构,可用来存取一连串有顺序的资料,读取较慢,...

Flutter基础介绍与实作-Day22 旅游笔记的实作(3)

我们今天要接续昨天的划分4个区域开始,我们今天先从北部开始吧! 一样先来建立资料夹 lib/scar...

学习架构

从基础到进阶,逐步学习成为一个专业 iOS App 开发者 ...

Week33 - 利用Golang Server与Nats实作简单的Pub/Sub demo [Server的终局之战系列]

嗨大家好,这次要来实作简单的Pub/Sub demo,整体的程序码在Nats-Pub-Sub-Sim...