Day 20: 人工智慧在音乐领域的应用 (AI作曲-基因演算法三 突变)

昨天我们讲完了音乐间是如何彼此交配并生出子代,今天我们接着来讲出生後的子代必须面队的充满挑战的一生。
https://ithelp.ithome.com.tw/upload/images/20211003/201405563zHaB3QfhQ.jpg

突变 (Mutation)

所有经过亲代交配後所生出来的子代,一出生後马上就要被抓去做人体实验开始进入准备突变的流程,
就跟昨天我们聊到设定个体时我们要先决定产生多少个体一样,在实验之前我们会先决定突变的机率 (Mutation Rate)。通常来说,如果没有特别的需求下,突变机率会被设定成个体的长度分之一,以我们长度为八个音符的个体来说,机率就会被设定为1/8,也就是12.5%。它代意思的是在这八个音符中,期望会有其中一个产生突变而转换成其他的音符,而发生突变的音符能转换的则是所有可能音符的随机一个
https://ithelp.ithome.com.tw/upload/images/20211003/20140556eXD7FQHKsN.jpg

我们一样延续昨天的例子来做说明:
昨天我们选出来的两位男女主角 (亲代) 在经过交配之後产生了两个子代
亲代个体1 : [0, 2, 0, 9, 15, 24, 16, 10]
亲代个体2 : [6, 2, 9, 17, 17, 17, 3, 17]

子代个体1 : [0, 2, 9, 17, 17, 17, 16, 10]
子代个体2 : [6, 2, 0, 9, 15, 24, 17, 3, 17]

而这两个子代出生後,都各自有机率发生突变,而机率就是从第一个音符最後一个音符一个一个轮流用12.5% 的机率去看是否成功发生突变,如果突变成功,则从原先的音符转换成0-24之中的任意音符(我们在Representation中设定我们的所有可能音符为中音Do [0]高两个八度的Do [24] )。
因此以子代个体1来说,我们可以想像成我们有一颗八面骰以及一颗二十五面骰,接着我们从第个音符0开始,先骰八面骰决定是否要突变 (突变成功的机率只有1/8),如果突变成功,我们接着骰二十五面骰来决定他要从0突变成哪一个音符;接着我们再对第个音符2做同样的骰子判断,直到个音符都接受过了这个可能突变的过程。而所有亲代交配出来的子代,都要经过这个过程,直到一百个子代都完成突变的试炼为止。

我们透过程序的乱数将子代1与子代2的突变结果产生出来,大家可以比较看看亲代经过交配後产生出来的子代,以及子代再经过突变後,彼此间的相似度:
亲代个体1 : [0, 2, 0, 9, 15, 24, 16, 10]
亲代个体2 : [6, 2, 9, 17, 17, 17, 3, 17]

子代个体1 : [0, 2, 9, 17, 17, 17, 16, 10]
子代个体2 : [6, 2, 0, 9, 15, 24, 17, 3, 17]

子代个体1(突变後) : [0, 2, 9, 1, 17, 17, 16, 10]
子代个体2(突变後) : [6, 2, 0, 9, 15, 24, 17, 3, 22]

突变的目的

为了虐对手
https://ithelp.ithome.com.tw/upload/images/20211004/20140556KxRHjX4Etc.jpg

https://ithelp.ithome.com.tw/upload/images/20211004/20140556D9uc88ZhKd.jpg
哥吉拉大战金刚

如果还记得前面我们在讲解一些有趣的AI演算法的内容的话,里面都有提到这些演算法都有一些机制去想办法跳脱局部最大值 (Local Maximum),而突变在基因演算法里扮演的就是类似的机制。
想像一下如果今天整个群体里面的个体在经过好几个世代的演化之後,每个个体里面都只剩下中音Do [0], 中音Re [2] 以及 中音Mi [4] 这三个音
个体一: [0, 0, 2, 4, 0, 4, 2, 2]
个体二: [4, 0, 4, 4, 0, 2, 2, 0]
个体三: [2, 2, 2, 4, 4, 0, 2, 4]
.
.
.
个体一百: [4, 4, 0, 4, 2, 2, 0, 4]
那麽不管你让它彼此在怎麽样的交配 (Crossover),里面的音符不管怎麽样做交换,始终也无法摆脱只有这三个音的情况。而这个时候突变的机制就有机会让已经陷入这三个音泥沼的情况做出突破,只要发生任何一次突变後有音符从这三个音之中突变成其他音符,而突变得结果又能够比原先这三个音的组合得到更好的评价,那个这个突变後的基因就有很高的机会存活下来并继续传宗接代

突变率的设定

前面我们提到,突变机率通常会被设定成个体的长度分之一,原因是因为虽然突变能够帮助个体们跳脱局部最大值 (Local Maximum) 以达到探索(Exploitation) 的目的,但是如果突变的频率过高,则很容易导致整个演化的过程无法往最好的状态前进,原因是因为在随机突变的状况下,并无法保证只要发生突变必定会往好的方向移动,太过频繁的突变反而会容易导致已经渐入佳境的个体们偏离正轨,导致需要更长时间的演化来达到最佳解

https://ithelp.ithome.com.tw/upload/images/20211004/20140556Bl79stJDaI.png

https://ithelp.ithome.com.tw/upload/images/20211004/20140556nquyyEg9fB.png

这几天我们详细的解释了基因演算法里面的各种运作方法以及参数设定,那麽明天开始我们要来聊聊基因演算法里面最重要的一块:

如何评估音乐的好坏来决定演化方向

Day 21见。


<<:  21 "准备完成" 用 PubSub 同步更新网页

>>:  [Day 30] 最後一天了,来复习看看我们学了些什麽

进击的软件工程师之路-软件战斗营 第六周

学习进度 游戏专题 Delay 地图编辑器使用 (自学)人物移动&转向 (自学)子弹360度...

JS 24 - 请求支援前,要先发送请求!

大家好! 发送请求时,各位有没有多写好几行程序码的经验呢? 今天就是要简化如此复杂的动作。 我们进入...

第 06 天 有甚麽事先练再说( leetcode 105 )

https://leetcode.com/problems/construct-binary-tr...

D6(9/6)-永丰金(2890)

注:发文日和截图的日期不一定是同一天,所以价格计算上和当日不同,是很正常的。 声明:这一系列文章并无...

Day17 Elastic APM (一)

接下来将要来介绍如何运用APM(Application Performance Monitoring...