Day 24: 人工智慧在音乐领域的应用 (AI作曲- RNN作曲)

循环神经网路(Recurrent neural network, RNN)

首先我们先来介绍循环神经网路(Recurrent neural network, RNN)
RNN是类神经网路的一种,最常被用於自然语言处理机器人聊天系统或是语音辨识等等方面。
我们先来用文字处理的应用帮大家建立一个简单的概念来理解RNN是怎麽运作的,想像一下当你今天看到以下这几个字:
X你娘X巴
你第一个会联想到什麽呢?
答案是
.
.
.
.
.
.
.
.
.
.
.

送你娘盐巴~
[新闻] TVBS主管爆骂下属「x你娘x巴」
https://ithelp.ithome.com.tw/upload/images/20211009/20140556zrAFWwof7Q.jpg
(来源)

先不管刚刚你脑海里第一个浮现的答案是什麽,我们真正有兴趣的是,要如何把人类这种经由长时间累积後预测文字的能力教给AI。而最单纯直观的方法就是把文字分段当作 输入资料(Input Data) 喂给RNN,接着告诉RNN这段文字後面应该要接着什麽样的内容,例如:
四季春茶无糖少 (输入资料) -> (告诉神经网路应该要预测出来的字)
黑糖珍奶半糖去 (输入资料) -> (告诉神经网路应该要预测出来的字)
大奶微 (输入资料) -> (告诉神经网路应该要预测出来的字)
()
QQㄋㄟㄋㄟ好喝到咩噗 (输入资料) -> (告诉神经网路应该要预测出来的字)
()

藉由不断的重复类似的训练方式,让神经网路能够学习到看到前面的文字叙述後,能够精准的预测接下来的文字
那麽套用到作曲上,我们利用一样的原理,把音乐里面的音符当成文字段落
例如我们利用以下这段旋律
https://ithelp.ithome.com.tw/upload/images/20211009/20140556zYZaisf4eh.jpg
我们先把前面几个音当作输入资料,再告诉神经网路下一个音
https://ithelp.ithome.com.tw/upload/images/20211009/20140556qM3R9Pf0JM.jpg => https://ithelp.ithome.com.tw/upload/images/20211009/201405566IbWM8vDep.jpg
https://ithelp.ithome.com.tw/upload/images/20211009/20140556ApEdP7hUR2.jpg => https://ithelp.ithome.com.tw/upload/images/20211009/20140556n10Rb67ST6.jpg
https://ithelp.ithome.com.tw/upload/images/20211009/20140556xUTpJn9JjV.jpg => https://ithelp.ithome.com.tw/upload/images/20211009/20140556qXEfmkCNip.jpg

经过这样大量的训练之後,RNN就能够在接收到一串音符之後,预估下一个音符是什麽,重复这个过程就能够实现RNN作曲
如果对於之前介绍过的马可夫模型作曲还有印象的话,会感觉这两个方法其实满类似的,但差别就在於马可夫模型只针对当前的音符去预估下一个音符,而没有办法参考更前面的资料来做参考。举前面文字训练的例子来说,当告诉训练过後的马可夫模型四季春茶微糖少X的时候,他可能会回答你四季春茶微糖少女......

利用RNN以及大量的音乐片段来作曲虽然直观,然後里面也有个非常明显的缺点,就是RNN缺乏长期的记忆性,这边所提到的记忆性又跟马可夫模型里没有记忆性不太一样,以程度上来说,马可夫模型是完全没有任何记忆性;而RNN则是缺乏长期的记忆性,我们用语言阅读来举例,今天如果有以下文字:
"蚵仔面线是台湾有名的小吃,真希望可以找到一碗20元的_ _ _ _"

根据前述的内容,RNN应该可以轻易地回答出正确答案: 蚵仔面线

但如果今天我们的内容拉长如下:
"蚵仔面线是台湾有名的小吃,但是我们还有盐酥鸡臭豆腐大肠包小肠米粉贡丸珍珠奶茶炸鸡腿烤鸡腿油葱鸡腿烧肉粽蚵仔煎豆浆豆花,
不过还是希望可以找到一碗20元的_ _ _ _"

在这样的情况下,由於RNN并无法拥有长期记忆的关系,导致前面的讯息已然遗失而无法回答出蚵仔面线的正确答案。同样的在利用RNN来作曲时,由於缺乏长期记忆,RNN无法理解音乐的结构与曲式,导致创作出来的音乐比较凌乱,而听起来也会相对的杂乱无章。
为了能够解决长期记忆的问题,另一种改良过後的神经网路:
长短期记忆网路(Long Short Term Memory Network, LSTM) 因此诞生,我们明天再来一起了解LSTM是怎麽解决马可夫与RNN都无法处理的长期记忆问题
https://ithelp.ithome.com.tw/upload/images/20211009/20140556A6bwIpZERp.png


<<:  【Day24】人力资源篇-Time Off

>>:  # Day24--开分支免费啦!超简易开分支的方法

Day16:【TypeScript 学起来】新增任意属性的好方法:Index Signatures 索引签名

在之前 interface 那篇文章, 认识到可以使用 Index Signatures, 发现他...

D0 前言

D0 前言 自我介绍   哈罗大家好,我叫 sixwings,如果觉得 sixwings 发音很绕口...

[DAY15]跟 Vue.js 认识的30天 - Vue 动态模组(Dynamic Components)

这次写的内容是之前都没使用过的,所以就尽量让自己有概念,希望之後能使用到。 使用 v-bind:is...

EP13 - [TDD] 使用工厂模式让测试更简单

Youtube 频道:https://www.youtube.com/c/kaochenlong ...

26 - MarkdownLint - Lint Markdown 文件

Markdown 格式不需要编辑器添加任何的支援就可以撰写,利用简单的语法就可以定义各种样式,是现今...