昨天我们聊到了IGA里用人类与基因演算法做互动来评估音乐个体,优点是这样的评估方式可以确保演化的方向可以朝着评分者的主观喜好前进; 而缺点则是时间成本高且容易产生听觉疲劳导致演化方向走钟。
那麽今天我们就来介绍另外一种 基於规则 (Rule-Based) 的适应值函数 (Fitness Function) 要如何设计来帮助我们演化出好听的音乐。
在Fitness Function里面包含两个项目: 规则 (Rule) 以及权重 (Weight)。
Fitness Rule代表的是演化的个体是否符合该项规则;
Fitness Weight代表的则是如果符合该规则,则得到多少分数 (可能为正可能为负)。
举个例子来说,今天我们要选出手上最强的角色,而我们手上的个体们是
我们可以设定以下的规则与权重:
根据以上的规则与权重,我们可以得到每一个角色的分数,例如:
越前龙马:
可以变身成超级赛亚人,+35分、
有武器,+40分 (球拍)、
血统优良,+100分 (老爸是武士越前男次郎),
所以龙马的总和分数为175分。
两津勘吉:
欠债太多,-100分、
拥有外挂,+50分 (每集都在开挂)、
有个有钱的朋友, +30分 (虽然有两个但也只算一次分),
所以两津的总分为 -20分 。
漩涡鸣人:
拥有尾兽之力, +20分 (九尾)
拥有外挂, +50分 (别天嘴、嘴遁-相信我之术)
血统优良, +100分 (老爸四代目火影,妥妥的官二代 + 六道仙人的後代阿修罗转世),
所以鸣人的总分为170分。
以此类推,根据我们所设定好的规则与权重,我们就可以找出综合得分最高的角色。
我们把这个观念延用到作曲上面,首先我们要把音乐评分的规则与权重决定好,而这也是Rule-Based Fitness Function最棘手的部份,原因是音乐的好坏不但非常主观且相当难被量化,这部份非常仰赖设计者本身的背景知识。目前比较主流的研究的通常是以基於乐理(Music Theory)知识的设计来当作主要的Fitness Rule。
乐理里面包含了旋律、和声、音程、和弦、曲式以及音乐结构等等作曲相关概念,由於已经经过长时间的统整且为大部分音乐家所公认的标准,因此以乐理来当作设计Fitness Function的标准能够很大程度上的让演化往符合乐理架构的方向前进。例如我们可以针对主旋律每个音之间的音程去依照乐理的建议给分、针对旋律与和弦之间的搭配或是整首乐曲的架构等等。当然除了规则 (Rule) 之外,权重 (Weight) 在Fitness Function也是相等重要的一环,在我们有了乐理当作基本规则後,如何设定每条规则的权重就成了另一个难题。
关於设定权重的部份,一是可以透过经验法则去调整每一条规则之间所占的比重并透过不断修正去达到理想的状态; 二是可以透过分析一些有名的曲子里面每一条规则符合的数量,以此反向推断出每一条规则的重要性并以此当作依据给予权重。简单一点来说,你认为重要的规则就给予高一点的权重; 有点重要但又还好的就可以给予相对低一点的权重; 而某些规则是你希望音乐里面绝对不能出现的,就给予一个严重的扣分 (Penalty); 某些规则是音乐里不该常常出现但偶尔又能够画龙点睛的,就给予一个低一点的Penalty。当然以上都只是比较High-Level的观念,实际上的设计还是要仰赖不断的调整以及内容来决定。
Rule-Based Fitness Function的优势在於省去了人类参与的时间成本,利用设计好的Fitness Function来帮个体们评分不但快速省时,而且评估的标准可以保持一致性,并不会随时时间拉长而产生听觉疲劳导致评分的标准走钟; 除此之外,针对不同需求可以设计不同的Fitness Function来达成不同目的,例如今天如果希望做出来的音乐主轴为国乐/中国风,就可以在规则设计里面加入一些五声音阶的设定; 如果希望做出特定作曲家/歌手的风格,也可以去分析该作曲家/歌手常用的一些套路後把他们加进规则里面已达到模仿该风格的目的。
而缺点就是要设计出好的Fitness Function必须仰赖设计者的背景知识,不但要找到好的规则,也得把每一条规则之间的权重设计好,如果没有办法设计出正确的Fitness Function,则无法演化出好听的音乐。
有了评分的标准之後,接下来要做的事情就是针对所有已经透过交配并产生突变的子代来做评分 (最早的世代里亲代也要接受评分,後面的世代则不用,因为後面世代的亲代都是由已经评过分的子代而来),做评分的时候很直观也很单纯,我们一一检视每一个个体里面符合了哪几条规则多少次,在根据权重给予分数,最後加总起来就是该个体的分数 (Fitness Score)。觉得难理解的读者可以再去复习一下前面我们帮龙马、两津以及鸣人评分的过程。
那麽明天,我们来解释基因演算法作曲最後的步骤: 适者生存不适者淘汰 当作这系列的收尾并把整个流程与方法做个总结,Day 23见。
<<: Unity与Photon的新手相遇旅途 | Day22-Photon Lobby UI (下)
>>: 22 - Traces - 观察应用程序的效能瓶颈 (6/6) - 透过真实使用者监控 RUM 来改善使用者体验
CKEditor 官方网站:CKEditor 5 | Powerful Framework with...
K8s - Kubernetes Django 部署笔记 参考资料 Windows 7 安装Dock...
第 30 天,本来想说或许最後一天可以来一篇心得文,让自己好好休息一下,因为这 30 天花了大量的精...
知己知彼,百战百胜,在开始与客户洽谈之前,我们必须要尽可能地搜集客户的资料,才能为他们提供更好的规划...
应用Docker化 Docker的核心思想就是将应用给整合进Container内运行,让这个Cont...