Day 25: 人工智慧在音乐领域的应用 (AI作曲 - 长短期记忆网路 LSTM )

昨天我们聊到了RNN与马可夫模型在作曲上因为缺乏长期记忆的关系,导致在创作音乐上无法有效的理解曲式与结构而导致创作出来的音乐比较杂乱无章,今天我们就先来聊聊 长短期记忆网路(Long Short Term Memory Network, LSTM) 是怎麽解决这个问题的。

长短期记忆网路(Long Short Term Memory Network, LSTM)

我们在使用RNN来分析资料(文字、语音、音乐片段)时,其中会有一项参数用来表示我们对於每一层资料的重要性的指标,我们在这里称为w,如果我们把w的值设置成一个大於1的数字,例如1.1,那麽表示对於越久远的资料,每一层的重要性都会乘上1.1,所以从结果往回推论的话,每一层都乘上1.1後,随着层数越来越多,到最後最久远的资料的重要性已经被放大成了无限多倍,而导致RNN对於越久远的资料越重视,这就是所谓的梯度爆炸问题 (Exploding Gradient Problem)。想像一下今天你在作曲的时候,你正在思考下个音符或是下个小节该怎麽创作的时候,这时候你却跑去参考第一个音符或是第一个小节来当作你当下作曲的指标,这就是因为随着梯度爆炸而导致越前面/久远的资料重要性大大增加,显然在大部分的时候这都是不合理的;
如若我们将的值设定为小於1的数字,例如0.9,那麽表示对於越久远的资料,每一层的重要性都会乘上0.9,所以从结果往回推论的话,每一层都乘上0.9後,随着层数越来越多,到最後最久远的资料的重要性已经几乎被无视,这就是我们提到的缺乏长期记忆的问题,也称为梯度消失问题 (Vanishing Gradient Problem)

https://ithelp.ithome.com.tw/upload/images/20211010/20140556KiKzUlB39I.png

而LSTM为了解决这个问题,在神经网路模型里面加了一个记忆的设定,而这个记忆又由三个控制阀(Gate) 来决定是否使用。
1. 输入阀 (Iuput Gate)
2. 遗忘阀(Forget Gate)
3. 输出阀 (Ouput Gate)

https://ithelp.ithome.com.tw/upload/images/20211010/20140556wQU2fayMai.png

简单一点解释就是,LSTM会透过这三个控制阀来控制记忆的设定,如果当下接收到的文字/语音/音乐 讯息还维持在最一开始接收到的主题范围内,则一开始的主题会保存在长期记忆里面,不论接下来收到多少其他的讯息都不会遗忘,直到接收到新的与原先主题完全没有关联性的讯息才会更新长期记忆。
我们再次请出主计长的蚵仔面线来当范例:
https://ithelp.ithome.com.tw/upload/images/20211010/20140556D3QGvEznRB.png

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

前面我们说到RNN对於以上这段话的理解,由於已经被後面太多的资讯影响,导致RNN无法正确地回答出一碗20元的到底是什麽;而LSTM透过记忆的设定,在一开始就将蚵仔面线放入记忆之中,在LSTM判断对话进入另一个主题之前,蚵仔面线都会一直保存着,因此虽然後面突然开始报起了菜名,也不会影醒LSTM最後顺利地回答出一碗20元的蚵仔面线

透过这样的控制阀记忆的设定,我们可以让LSTM对於音乐的曲式与架构有了更好的理解,不论是在针对主旋律的创作上还是分析和弦的进行走向,都能大大的克服前述RNN与马可夫模型的问题,也因此利用LSTM作曲成为了许多主流研究的方法。

https://ithelp.ithome.com.tw/upload/images/20211010/20140556z25iRoezTH.png

那麽明天我们来聊聊对於Creative特别有一套的生成对抗网路 (Generative Adversarial Network, GAN),Day 26见。


<<:  [Day 25] vue-router路由传送参数 props

>>:  初学者跪着学JavaScript Day25 : 宁愿找this也不碰历史

若市场总是有效率,我就是在街上乞讨的流浪汉。

若市场总是有效率,我就是在街上乞讨的流浪汉。 I'd be a bum on the street ...

坚持己见的厉害之处

前阵子托朋友的福,去了富士山第一排露营。露营的好处就是不用想行程,光是准备吃的东西跟睡觉的地方就够忙...

第 23 集:Bootstrap 客制化 Grid 格线系统

此篇会教学如何将 Bootstrap grid 格线系统,自干一个出来。 事前准备 Gird Sy...

ISO 27001 资讯安全管理系统 【解析】(九)

(一)正式范围定义的目的 范围定义的目的是准确说明组织所做的事情,范围说明应准确说明组织所做的事情是...

Day5- Java语言编译器:javac & 运行工具:java (下)

接续着上篇的内容,这篇要介绍情境二、三~ 情境二:引用到其他的java档 Step1.先创建资料夹及...