Google Magenta 創作音樂背後的原理,與 AlphaGo 相似嗎?

於2014年,DeepMind 開始以深度神經網絡[1]為基礎的 AlphaGo 研究計劃。往後三年內,先後擊敗樊麾、李世乭[2] (이세돌) 及柯潔[3]等頂尖職業棋士,引起不少人對深度神經網絡的關注。在這三年裡,不僅圍棋界風雲變色,繪畫、作曲、編劇等偏重藝術創作性質的範疇,亦受到很大的衝擊。今次我們先來看看機器學習[4]的基本原理,這類技術在音樂創作上的最新發展,了解一下專用型人工智能[5] (narrow artificial intelligence) 應用在不同範疇,例如音樂創作及圍棋時的異同。

還記得中學時期,熱學中的波以耳定律 (Boyle’s Law; V=k/p) 嗎?這條公式是用來解釋氣體的體積 (V) 及壓力 (p) 之間的關係,這亦是一個簡單的線性模型,模擬兩個可測量的變數 (V及1/p) 的線性關係。當中係數 k 的數值,需要靠一連串嚴謹的實驗的結果估算出來。機器學習也就是用這種做法,先以一些數學模型來形容要解決的問題中可測量變數之間的關係,之後利用大量已測量的數據來估算模型中係數的數值。以 AlphaGo 為例,深度神經網絡是當中的數學模型,而一個個棋局上的棋子位置及最終的勝負都是可測量的變數。

在熱學公式的例子中,每次實驗結果的數據都會推算出一個係數 k 的估值,如果我們相信 k 是一個實數及公式是正確無誤,那些推算出來的 k 的估值會集中在一個單一數值附近。現在我們嘗試用另一個方式來估算k的數值,我們可以預設 k 為任何一個數值,可以是1.67,又可以是5.21等等,在與實驗結果一同放進公式後,會發現推算出的結果 (即是體積 V) 與實際數值 (即實驗時記錄的體積) 有差異,重新設定 k 為另一個數值,並重覆以上的步驟來計算各自的總差異,總差異越小,便代表設定的 k 的數值越接近 k 的真實數值。

從以上的例子中,我們意識到估算的誤差能夠讓我們找到係數的真實數值。現今的技術,例如 back propagation、stochastic gradient descent 及 evolution strategies[6],都依靠誤差指引下次係數數值的估算的方向,減少找尋真實數值的時間。由此可見,已有的數據對找尋係數真實數值很重要,換句話說,亦即是對成功訓練神經網絡很重要。將以上這類做法套用到音樂世界裡時,我們需要的第一樣元件是樂曲數據庫,第二樣是描繪樂曲內各項變數之間關係的數學模型。

以機器學習技術作曲始於上世紀五十年代,Lejaren Hiller 及 Leonard Issacson 於1957年利用 Markov chain 寫成的 Illiac Suite[7],被公認為第一首機器寫成的樂曲。

Illiac Suite (1949) by Lejaren Hiller

Peter Todd et al. 於1989年首次利用遞歸神經網絡 (recurrent neural network; RNN) 寫成三小段模仿巴赫作曲風格的樂曲,神經網絡開始被用於音樂創作中。

After Bach (1989) by Peter Todd et al.

大家認為以上的樂曲聽起來,有沒有甚麼令人在意的地方?有沒有不自然的地方?在早年的技術中,例如寫成 Illiac Suite 的是一種偏重依賴規則的生成系統,這類系統很局限於規則的表達能力及規則集的完整性,由於規則多由人手編成,所以局限性較大。要突破這個局限,各種音樂上的規則及關係都需要盡量脫離人手擴充這個耗時的步驟,遞歸神經網絡背負著這個目的來開拓機器作曲這一範疇。普遍遞歸神經網絡雖然能夠學習相鄰音符及和弦間在時序上的關係,但卻缺乏對一首樂曲的整體概念[8],而 long short term memory (LSTM) 及 gated recurrent unit (GRU) 這類針對長時間關係的神經網絡,正正嘗試彌補這個缺陷。

Google 於2016年中開展一個名為 Magenta 的專案,專門研究與美術及音樂有關的深度神經網絡技術。從根本上,我們可以把樂曲想像成一連串音符的發展,在此之上,我們也可以進一步,把樂曲抽象地想像成一連串和弦、甚至是樂句的發展。把抽取得來的抽象的特徵,結合到特徵及目標變數之間的關係的學習,是深度神經網絡的強項,促使機器能夠處理好較抽象較全面的關係。

Magenta 最新一項實驗成果,是在今年6月公布的名為 Performance RNN 的遞歸神經網絡,它可以生成節奏及強弱程度豐富多變的樂曲,就像演奏家為了強調樂曲上某些部分的感情,演奏時的速度及強弱與樂譜上標記的稍異那般,使整個生成的樂曲比較像帶有感情。

Performance RNN 結構

因為樂曲有時序,各種音樂特徵在時序上的關係對生成音樂尤其重要。如圖中所展示,利用當刻前若干時間的音高、節奏、強弱、音符密度及音高頻率分佈來推測當刻的音高、節奏及強弱,利用精於學習時序上關係的遞歸神經網絡作為模型來做推測,重覆這個步驟就可以一步步地產生出樂曲。大家可以聆聽以下幾段利用Performance RNN生成的樂曲,自行定斷生成音樂的質素。

Performance RNN (2017) by Magenta
Performance RNN sample #1 by Magenta
Performance RNN sample #5 by Magenta
Performance RNN sample #8 by Magenta

不論 Performance RNN 或 AlphaGo 在各目的應用範疇內的實力如何,兩者都展示了若干的相似性。

AlphaGo 與 Performance RNN 的異同

從兩者簡化後的架構圖中,可以看得出兩者大概分成三部分。首先,要令深度神經網絡理解得到,就需要利用編碼器將數據編成它可以理解的樣子,這個步驟必不可少。之後,深度神經網絡就為想要解決的問題提供答案,當然整個程序可以到此為止,但它給出的答案其實未必夠好,而能提升答案質素的方法,就是要求深度神經網絡同時提供多個答案以供篩選,所以最後,兩者都包含一個搜尋最佳答案的部分。

最後,我們聽一聽 Aiva 生成的樂曲,與 Performance RNN 生成的比較一下。

Op. 22 for Piano Solo (2017) by Aiva

參考資料

[1] 深度神經網絡是結合神經網絡及深度學習的一門技術。

[2] https://en.wikipedia.org/wiki/AlphaGo_versus_Lee_Sedol

[3] https://en.m.wikipedia.org/wiki/AlphaGo_versus_Ke_Jie

[4] 機器學習是人工智能分支之一,泛指機器通過自我調整來適應環境變化的技術。

[5] 專用型人工智能指應用在特定範疇的人工智能,相對的是通用型人工智能 (general artificial intelligence)。

[6] Salimans, Tim, et al. “Evolution strategies as a scalable alternative to reinforcement learning.” arXiv preprint arXiv:1703.03864 (2017).

[7] Hiller, Lejaren, and Leonard Maxwell Isaacson. Experimental Music. Composition with an Electronic Computer. McGraw-Hill Book Company, 1959.

[8] Eck, Douglas, and Juergen Schmidhuber. “A first look at music composition using lstm recurrent neural networks.” Istituto Dalle Molle Di Studi Sull Intelligenza Artificiale 103 (2002).