Day 23: 人工智慧在音乐领域的应用 (AI作曲-基因演算法六 总要敬老尊贤吧?)

今天我们来把整个基因演算法作曲系列做一个完结。
前几天我们花了很多篇幅一一讲解整个基因演算法作曲的各种细节,包含个体与参数的设定、Crossover与Mutation的实做以及Fitness Function该如何设计,今天我们就来看看最後的适者生存、不适者淘汰 (Survivoe Selection) 的部份。

流程复习:
(1) 产生个体 (Individual)
(2) 交配 (Crossover)
(3) 突变 (Mutation)
(4) 评分 (Fitness Evaluation)
(5) 适者生存不适者淘汰 (Survivor Selection)
(6) 选出最强的个体成为最佳解

我们来整理一下这几天我们做好设定的实验参数以及其他设定:
在我们经过前面五个步骤之後,我们手上有的应该是
参数:
个体 (Representation): 八个音符所组成的音乐。
个体数量 (Population Number): 100个。
音符范围: 0~24的数字 (中音Do到高两个八度的Do)。
交配的方法: Two-Point Crossover。
交配的机率 (Crossover Rate): 0.9。
(这个部份我前面讲Crossover的时候漏掉了,但因为交配机率通常都是设定为比较高的值且相较於突变机率影响的没有太大,所以就在这边快速做个补充说明就好。)
突变的方法: 随机突变 (Random Mutation)。
突变的机率 (Mutation Rate): 1/8。
适应值函数: 基於乐理规则所设计出来的评估。
演化的世代 (Generation): 100代。

个体:
100个亲代以及每个亲代对应的适应值(Fitness Score)
100个经历过突变的子代以及对应的适应值(Fitness Score)

而接下来我们就要进到步骤(5)的适者生存不适者淘汰 (Survivor Selection)
这个部份其实非常的单纯且直观,就如字面上的意思,我们依照每一个个体的 适应值 (Fitness Score) 来决定哪100个个体可以在Survivor Selection中存活下来并成为下一个新世代的亲代; 而剩下的100个个体则被淘汰 (单压!)。

Survivor Selection

一般来说,在做Suvivor Selection的时候有两种常用的方式:

  1. 年轻人不讲武德! - (μ , λ)
    (念法: mu comma lambda)
    5der
    μ表示的是亲代的个体而λ则代表子代的个体,在 (μ , λ) 的淘汰机制里面,年轻人不讲武德,来骗!来偷袭!老年人大意了阿,没有闪!
    在步骤(5)的时候所有的亲代会直接全数淘汰而所有子代自动成为下一个世代的亲代。在这样的机制下很容易会把所有个体里面的最佳解给淘汰 (如果最佳解存在於亲代之中)。

  2. 总要敬老尊贤吧! - (μ + λ)
    (念法: mu plus lambda)
    https://ithelp.ithome.com.tw/upload/images/20211005/20140556toAAYIYYiN.jpg

相对於不讲武德的年轻人们, (μ + λ) 在演化上比较合理,一般称之为菁英主义 (Elitism)
敬老尊贤的前提下,亲代并不会直接被淘汰,而是把所有亲代与子代放在一起比较它门的Fitness Score,以一百个亲代与一百个子代来说,在这两百个个体里面Fitness Score排名前一百的存活下来并成为下一个世代的亲代 (适者生存); 而後面的一百名则被淘汰出场 (不适者淘汰)。因此下一个世代里面组成亲代的,有可能是这个世代里的亲代也可能是子代,端看谁得到的Fitness Score比较高
https://ithelp.ithome.com.tw/upload/images/20211006/20140556baPvpryexr.jpg

在得到前一百名的个体之後 (部份亲代+部份子代组成),这一百个个体成为新的亲代并回到步骤(2),接着不断的重复步骤(2)到步骤(5)直到演化的代数(100 Generation)为止。在这过程当中好的基因有高度的机率被保存下来 (好的基因代表在评分时可以拿到较好的评分,因次拥有好的基因的个体比较容易存活),而这些基因会在经过交配後传承给子代,因此在整个演化的过程中,目的就是希望把所有好的基因留存并把差的基因给汰换掉。当我们到了最後一个世代後,再从最後这一百个个体里面选出评分 (Fitness Score) 最高的,而这个个体就是我们最终演化出来的音乐

Crossover 挑选

最後我们快速补充一下Day 19我们说到的如何挑选交配的亲代的方法:

除了交配有不同的方法之外,实际上在 挑选亲代(Selection) 的时候也有几个不同的方法,例如
轮盘抽选法 (Roulette Wheel Selection)
比较选取法 (Tournament Selection)
由於这部分要等我们解释到步骤(5)适者生存不适者淘汰後才有办法解释,这边我们先做个简单的说明:
基本上不管是轮盘法还是比选法,主要的目的都是希望挑到比较好的个体来当作交配的亲代,类似菁英主义的概念,因为以机率来说,拥有较好基因的父母一般来说更容易交配出较好的子代。但也不全然只有基因较好的个体有机会被选中来交配,这两种方法里面都有随机性让条件较差的个体依然有交配的机会。

这边在做挑选的时候,也是以个体的评分值来当作参考依据,以菁英主义的概念来说,越强大的父母越有机会生出优良的小孩
https://ithelp.ithome.com.tw/upload/images/20211006/20140556tBu9RF6R8G.jpg

我们先解释一下比较选取法 (Tournament Selection)是如何运作的:
首先比较选取法 (Tournament Selection)里面我们会决定每次要选多少来做比较,例如2-Tournament就是每次抓两个个体出来,评分高的成为交配人选一,另外一个放回去; 然後再重新抓两个个体出来比较,评分高的成为交配人选二,另外一个一样放回去。而数字设定的越高,代表每次要抓出来比较的人数越多,也代表是否更加着重菁英主义。想想看如果今天我们设定的是2,而你的评分在所有亲代里面排名倒数第二名,那麽虽然机率很低,但如果被抓出来和你比较的刚好是倒数第一名,则恭喜你成功进入交配环节; 但如果今天我们设定的是5,那麽一来不但倒数四名都没有机会进入交配环节,就连排名中间的也都必须承受更大的压力 (每次挑选你都必须击败其他四人,因此精英能够胜出的机率更高)。
轮盘法则是提供所有个体都有交配的机会,即使你是所有个体中最差的。
轮盘法的运作方式是依照每个个体的分数排名来做比例调整,在一个圆盘中评分越高的所占的比例则越高,被选中的机率也更大; 但即使是排名倒数第一的仍然有机会雀屏中选,只是机率相较其他竞争者低很多。

https://ithelp.ithome.com.tw/upload/images/20211006/20140556iI8YCQYPD5.png

到此我们的基因演算法作曲告一段落,明天我们再来看看类神经网路要如何套用到作曲上面。


<<:  Day 22- Google Apps Script 线上文件更新

>>:  [区块链&DAPP介绍 Day30] 最後的总结

公司转型要如何靠网路行销SEO布局及定位策略

随着2020年Covid-19疫情对全世界造成的剧烈冲击,许多企业被迫在转型与不转型之间做选择,所有...

[Day30] 完赛心得

感谢订阅我文章的5位邦友,希望能对你们有一点点小帮助,忏悔一下後来 Vue 先前累积的文章写完之後,...

Day 21 (Js)

1.外挂: Auto Rename Tag Bracket Pair Colorizer Chine...

人脸辨识-day25 Overfitting、Underfitting

在处理完资料集後,将资料放入模型训练时,会将资料集分为训练集、验证集和测试集,训练集是模型会对训练集...

下拉式选单更新 Day 23

今天使用 "下拉式更新"作为主题 下拉式更新被创造以来,广受欢迎 所以今天要介绍...