首先我們先來介紹循環神經網路(Recurrent neural network, RNN)。
RNN是類神經網路的一種,最常被用於自然語言處理、機器人聊天系統或是語音辨識等等方面。
我們先來用文字處理的應用幫大家建立一個簡單的概念來理解RNN是怎麼運作的,想像一下當你今天看到以下這幾個字:X你娘X巴
你第一個會聯想到什麼呢?
答案是
.
.
.
.
.
.
.
.
.
.
.
送你娘鹽巴~
[新聞] TVBS主管爆罵下屬「x你娘x巴」
(來源)
先不管剛剛你腦海裡第一個浮現的答案是什麼,我們真正有興趣的是,要如何把人類這種經由長時間累積後預測文字的能力教給AI。而最單純直觀的方法就是把文字分段當作 輸入資料(Input Data) 餵給RNN,接著告訴RNN這段文字後面應該要接著什麼樣的內容,例如:
四季春茶無糖少 (輸入資料) -> 冰 (告訴神經網路應該要預測出來的字)
黑糖珍奶半糖去 (輸入資料) -> 冰 (告訴神經網路應該要預測出來的字)
大奶微 (輸入資料) -> 微 (告訴神經網路應該要預測出來的字)
(梗)
QQㄋㄟㄋㄟ好喝到咩噗 (輸入資料) -> 茶 (告訴神經網路應該要預測出來的字)
(梗)
藉由不斷的重複類似的訓練方式,讓神經網路能夠學習到看到前面的文字敘述後,能夠精準的預測接下來的文字。
那麼套用到作曲上,我們利用一樣的原理,把音樂裡面的音符當成文字段落。
例如我們利用以下這段旋律
我們先把前面幾個音當作輸入資料,再告訴神經網路下一個音
=>
=>
=>
經過這樣大量的訓練之後,RNN就能夠在接收到一串音符之後,預估下一個音符是什麼,重複這個過程就能夠實現RNN作曲。
如果對於之前介紹過的馬可夫模型作曲還有印象的話,會感覺這兩個方法其實滿類似的,但差別就在於馬可夫模型只針對當前的音符去預估下一個音符,而沒有辦法參考更前面的資料來做參考。舉前面文字訓練的例子來說,當告訴訓練過後的馬可夫模型四季春茶微糖少X的時候,他可能會回答你四季春茶微糖少女......
利用RNN以及大量的音樂片段來作曲雖然直觀,然後裡面也有個非常明顯的缺點,就是RNN缺乏長期的記憶性,這邊所提到的記憶性又跟馬可夫模型裡沒有記憶性不太一樣,以程度上來說,馬可夫模型是完全沒有任何記憶性;而RNN則是缺乏長期的記憶性,我們用語言閱讀來舉例,今天如果有以下文字:
"蚵仔麵線是台灣有名的小吃,真希望可以找到一碗20元的_ _ _ _"
根據前述的內容,RNN應該可以輕易地回答出正確答案: 蚵仔麵線。
但如果今天我們的內容拉長如下:
"蚵仔麵線是台灣有名的小吃,但是我們還有鹽酥雞臭豆腐大腸包小腸米粉貢丸珍珠奶茶炸雞腿烤雞腿油蔥雞腿燒肉粽蚵仔煎豆漿豆花,
不過還是希望可以找到一碗20元的_ _ _ _"
在這樣的情況下,由於RNN並無法擁有長期記憶的關係,導致前面的訊息已然遺失而無法回答出蚵仔麵線的正確答案。同樣的在利用RNN來作曲時,由於缺乏長期記憶,RNN無法理解音樂的結構與曲式,導致創作出來的音樂比較凌亂,而聽起來也會相對的雜亂無章。
為了能夠解決長期記憶的問題,另一種改良過後的神經網路:
長短期記憶網路(Long Short Term Memory Network, LSTM) 因此誕生,我們明天再來一起了解LSTM是怎麼解決馬可夫與RNN都無法處理的長期記憶問題。