程序員拯救樂壇?OpenAI用“逆天”GPT2.0搞了個AI音樂生成器

程序員拯救樂壇?OpenAI用“逆天”GPT2.0搞了個AI音樂生成器


作者 | 琥珀

出品 | AI科技大本營(id:rgznai100)

基於深度神經網絡進行語音合成、音樂風格遷移,正成為不少致力於“讓人人成為音樂家”的研究人員所追求的事情。像此前我們報道的微軟小冰作詞又作曲,AI幫清華博士寫說唱歌詞晉級,甚至不久前中央音樂學院招音樂AI方向博士生。不久前,為了紀念著名作曲家巴赫誕辰,Google 根據巴赫合唱和聲訓練而成的機器學習模式 Coconet 吸引了不少人前來圍觀。

最近,OpenAI 最新研發的 MuseNet 的深度神經網絡,可以製作 4 分鐘時長的音樂作品,其中涵蓋 10 種不同的樂器(如鋼琴、鼓、貝斯、吉他),甚至還能將諸如鄉村風格、莫扎特風格、甲殼蟲樂隊風格的音樂融合起來。

程序員拯救樂壇?OpenAI用“逆天”GPT2.0搞了個AI音樂生成器



首先需要說明的是,MuseNet 並沒有根據人類輸入的對音樂理解進行顯式編程,而是通過學習預測成千上萬個 MIDI 文件的下一個 token 來發現和絃、節奏和風格的模式。MuseNet 採用了無監督神經網絡語言模型 GPT2.0(是的,就是此前被譽為可以 BERT 媲美的 NLP 模型 GPT2.0,普遍觀點是,經過預訓練可以預測上下文,無論是音頻還是文本。)


程序員拯救樂壇?OpenAI用“逆天”GPT2.0搞了個AI音樂生成器



據悉,5 月 12 日將正式開放 MuseNet 語言生成工具的試用版本。(以下為學習了肖邦作曲風格的英國女歌手 Adele 的 Someone Like You 的 AI編曲錄音。)

錄製音頻來自AI科技大本營

傳送門:https://openai.com/blog/musenet/

▌過程原理

在簡單模式(默認顯示)中,用戶會聽到預設生成的隨機未切割樣本;然後選擇某作曲家或風格下的著名作品片段,即可生成各種風格的音樂。

在高級模式下,用戶可直接與模型交互。這個過程需要完成的時間會更長,但用戶可以創建一個全新的作品。

  • 注意:MuseNet 通過計算所有可能的音符和樂器的概率來生成每個音符,模型會傾向採用你選擇的樂器,但也可能會選擇逼得樂器;同樣,MuseNet 也會搭配不同風格的樂器,如果用戶自行選擇最接近作家或樂隊常用分風格或樂器,產生的音樂會更自然。

研究人員還創建了作曲家和樂器的 token,以便更好地控制 MuseNet 生成的樣本類型。訓練期間,這些作曲家和樂器 token 將預先添加到每個樣本中,因此模型將學習利用該信息進行音符預測。生成音樂時,可以調整模型,如拉赫瑪尼諾夫的鋼琴曲為前提,以創建選定風格的音樂。

研究人員還將 MuseNet 中的嵌入進行可視化,以深入瞭解模型所學到的內容。他們採用了 t-SNE 創建各種風格嵌入的餘弦相似性。(如下 2D 圖像所示,可查看某個特定作曲家或風格之間的關係。)

程序員拯救樂壇?OpenAI用“逆天”GPT2.0搞了個AI音樂生成器

▌利用 Sparse Transformer 記住長期結構

MuseNet 使用 Sparse Transformer 的重算和優化內核來訓練一個具有 24 個注意力頭的 72 層網絡,並將全部注意力放在 4096 個 token 的上下文中。這個長文本的目的是能夠記住一個片段中的長期結構。或者,它還可以創建音樂旋律結構。

音樂生成是測試 Sparse Transformer 的一個有用域,因為它位於文本和圖像的中間位置。它具有文本的 token 結構。在圖形中,你可以查看 N 個 token,而在音樂中,查看之前的起點沒有固定數。此外,還可以很容易聽到該模型是否在按照成百上千個 token 順序來獲取長期結構。

▌數據集

研究人員收集了不同來源的 MuseNet 訓練數據(ClassicalArchives、BitMidi、MAESTRO ),涵蓋爵士樂、流行樂,以及非洲、印度和阿拉伯等不同風格的音樂。

首先,研究人員採用 transformer 在序列數據上進行訓練:給定一組音符,要求它預測其他即將出現的音符。在嘗試了幾種不同方法後將 MIDI 文件編碼為適用於此任務的 token。

在這種其中,他們採用和絃方法,將每次聽到的音符組合視為單獨的 “和絃”,併為每個和絃指定一個 token。然後,通過僅關注音符開頭壓縮音樂模式,並嘗試使用字節對編碼方案進行近一步壓縮。

研究人員還嘗試了標記時間推移的兩種不同方法:一是根據音樂節奏進行縮放的 token,代表節拍或節拍的一小部分;二是以絕對時間為單位來標記 token。他們採用了一種結合了表現力和簡潔性的編碼方式:將音高、音量以及樂器信息組合稱一個 token。

在訓練中,

  • 通過提高和降低音高來調換音符。(之後的訓練中,減少了調換數量,使得每個樂器都有生成的音符。)
  • 提高音量,調高或降低不同樣本的整體音量。
  • 增加時間,當使用以秒為單位的絕對時間編碼時,可有效稍微減緩或加速片段。
  • 在 token 嵌入空間中使用 mixup。

研究人員還創建了一個內部評測,在訓練中,通過模型預測給定的樣本是否來自數據集還是之前生成的樣本,進行評判。

▌嵌入

為了給模型提供更加結構化的上下文,研究人員還添加幾種不同類型的嵌入。

除了標準位置嵌入外,還有學習到的嵌入,可在給定的樣本中追蹤時間推移;然後,他們還在每個和絃中的音符添加了嵌入;最後,他們添加了兩個結構化嵌入,該嵌入可表明模型既定的音樂樣本在較大音樂片段中的位置。


分享到:


相關文章: