當前位置:
首頁 > 知識 > 谷歌首個AI版Doodle:向偉大作曲家巴赫致敬

谷歌首個AI版Doodle:向偉大作曲家巴赫致敬

機器之心報道

機器之心編輯部

讓巴赫彈搖滾會是什麼樣的體驗?在最近谷歌主頁的Doodle上,我們可以嘗試一下。

3 月 21 日是著名音樂家約翰·塞巴斯蒂安·巴赫的生日,谷歌決定以一種特殊的方式向他致敬:讓人人都能以巴赫的風格創作自己的樂曲。

通過機器學習演算法,谷歌開發了 Coconet 多功能模型,可以讓你用巴赫的風格演奏自己寫下的樂譜。你也可以通過這個小工具來體驗 AI 演算法如何將一些我們熟悉的旋律「巴赫化」,亦或你和巴赫「合作」的樂曲將呈現出怎樣更加現代搖滾的曲風。

Coconet的工作原理

Coconet獲取不完整的樂譜,並填充缺失的材料。為了訓練Coconet,我們從巴赫的四聲部眾讚歌數據集中取例,隨意抹去一些音符,然後讓模型重寫。巴赫作曲與Coconet創作之間的差別為我們提供一個學習信號,我們可以通過該信號訓練模型。

通過隨意地抹去音符,我們希望得到一個可以處理任何不完整輸入的模型。在下文的「Coconet 為什麼可以運轉?」章節中,我們給出了該訓練流程有趣的解讀,將其等同於多種模型的同時訓練,並且每種模型適用於不同的場景。

Coconet 為什麼可以運轉?

Coconet 是一個自回歸結構的集合,包含了序列模型中常見的時間結構(chronological structure)。為了將演示簡單化,我們將考慮建模3個變數:X_1、X_2、X_3。具體來講,我們可以把這視為一個三音符旋律或三音和弦,每個變數以音高作為值。建模X_1、X_2 和 X_3 就是表徵和學習給定序列 X_1、X_2、X_3 在自然數據中出現可能性的聯合概率分布 P(X_1,X_2,X_3)。

這是一個很難的問題,因為變數相互作用,光建模獨立(邊緣)分布 P(X_1)、P(X_2)、P(X_3) 是不夠的。對於X_1的每個可能值,依賴於X_1值的其它變數存在條件分布 P(X_2|X_1) 和 P(X_3|X_1)。如果有 P(X_1) 和 P(X_2|X_1) 的模型,那我們可以將它們組合起來獲得 P(X_1,X_2)=P(X_1)P(X_2|X_1) 的模型。而如果有 P(X_3|X_1,X_2) 的模型,我們可以將這三個模型組合起來獲得期望聯合分布 P(X_1,X_2,X_3)=P(X_1)P(X_2|X_1)P(X_3|X_1,X_2)。

一次建模一個變數

上述因式分解對序列數據來說最自然不過,因為它遵循序列順序。而在單音音樂(monophonic music)中,這意味著每個音符的分布是由指向它的音符決定的。這給出了正向排序 (1,2,3)。另一種自然的因式分解是逆向排序 (3,2,1):先建立結論,然後往前推導。如下圖所示:

一般來說,變數的每個可能的排序都存在自回歸因式分解。在有N個變數的問題中,就存在 N! 個因式分解。在上面提到的三個變數的例子中,我們可以列舉出六個自回歸因式分解:

複音音樂(polyphonic music)由多個同步序列組成:多個樂器一起演奏。在這種情況中,雖然有兩種明顯的方式展開多個序列,但變數沒有真正的自然排序。

在左圖中,我們交錯排列樂器,將其排序為S、A、T、B、S、A、T、B等。這種順序有利於和聲:模型會以一次生成一個和弦的方式生成音樂。在右圖中,我們以另一種方式將樂器連接起來,將其排序為S、S、S、S、A、A、A、A等。這種方式有利於調式,因為模型會一行接一行地生成音符。這兩種截然不同的觀點是導致音樂理論中常見衝突的根源。

無序建模

當我們將部分抹去的樂譜輸入至模型時,輸出的結果可以解釋為抹去變數的條件獨立分布。回到三個變數序列 X_1、X_2、X_3 的例子,假設抹去了 X_2 和 X_3,然後模型觀測到 X_1 並生成 X_2 和 X_3 的條件分布。

所以得到的條件分布 P(X_2|X_1 )和 P(X_3|X_1) 作為三個變數2種排序(總共6種排序)中的兩個因子出現。通常,根據抹去的變數,我們可以從任何排序中計算任何條件因子。通過組合此類條件因子,我們可以形成對應於任何預期排序的模型。本質上,修復模型提供了一個自回歸模型集合,每個可能的排序有一個自回歸模型。

而且,我們可以更高效地訓練這個集合,而不是簡單地對排序進行採樣並逐個評估其條件因子。關鍵的觀測是每個條件在很多排序中是共享的:即使在低維樣本中,P(X_3|X_1,X_2) 也是由兩種排序 (1,2,3 和 2,1,3) 共享的。一般來說,所有這些條件分布 P(X_i|X_C)(X_C 是變數的任何子集,不包括 X_i)都與 X_i 之前或之後的變數排序無關,這大大減少了我們需要學習的不同概率分布的數量。

為了訓練 Coconet,我們從數據集中選擇了一個訓練樣本,統一選擇要抹去的變數數量,並統一選擇需要抹去的變數的特定子集。我們將部分抹去的樂譜輸入至模型(以及指示哪個變數需要抹去的掩碼),獲得了抹去變數值的一組獨立分布。我們計算了真實值的對數似然和抹去變數的平均值,由此糾正了微妙的縮放問題。我們藉此得到損失函數,然後和以前一樣使用反向傳播和隨機梯度下降來最小化損失。

使用吉布斯採樣根據多個排序生成

儘管無序NADE學習一組排序,但相關的採樣過程仍然根據單個排序進行有效的採樣。Uria等人提出統一選擇一個排序,然後根據這個排序依次生成變數。作曲仍然是在一個單一的過程中完成的,沒有經過任何迭代的改進。

在一個單一的過程中作曲難在哪裡?假設從一張白紙開始,我們必須寫下第一個音符,而且知道之後不能改動。這是一個艱難的決定:我們必須考慮未來所有的可能,這個音符必須是正確的。接下來,有了更多的音符之後,我們就能參考前後的音符做出決定。那麼,如果我們不必從無到有地進行作曲呢?如果我們從一開始就有一些音符作參考呢?

事實證明,我們可以通過吉布斯採樣做到這一點!吉布斯採樣是通過反覆對單個變數重新採樣,從聯合分布中抽取樣本的過程。可以用它來比喻反覆修改樂譜的過程。在每一步中,抹去樂譜的某些部分並讓模型重寫。這樣的話,模型一直都會有參考材料。儘管參考材料本身可能不斷變動,也可能在之後的迭代中被重寫。這沒關係,因為模型當前的決策也不是一成不變的。漸漸地,樂譜就成了一首和諧的曲子。

更確切地說,這個過程可以叫做分塊吉布斯採樣,因為每次重新採樣的不止一個變數。如果把概率分布想像成一幅風景畫,可以看到處在合適位置的山峰被位置不當的巨大山谷隔開。大規模重新採樣有助於通過較大的跳躍來探索可能性空間,而一次重採樣一個變數往往會停留在附近的峰值上。因此,我們退火塊大小:我們開始重寫大部分的樂譜,以探索這個空間,然後逐漸重寫得越來越少,以確定一個合理的樂譜。

參考鏈接:https://magenta.tensorflow.org/coconet

本文為機器之心報道,轉載請聯繫本公眾號獲得授權。

------------------------------------------------


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

PNAS新調查:美國計算機科學學生CS技能超中國
CNN能同時兼顧速度與準確度嗎?CMU提出AdaScale

TAG:機器之心 |