當前位置:
首頁 > 新聞 > 莫扎特、披頭士隨意切換,這個AI會用10種樂器演奏不同風格音樂

莫扎特、披頭士隨意切換,這個AI會用10種樂器演奏不同風格音樂

前不久,為紀念偉大作曲家巴赫,谷歌創建了 Coconet 多功能模型,該模型可以將任何人的作品以巴赫的風格的演奏。該 AI 模型雖然不錯,但只限於巴赫風格的曲子。若我們想創作肖邦、莫扎特呢?OpenAI 新近創建的模型 MuseNet 可以解決這個問題啦~

MuseNet 是一個深度神經網路,它可以用 10 種不同的樂器生成 4 分鐘的音樂作品,並且還可以結合各種風格的音樂,如鄉村音樂、莫扎特、披頭士樂隊。

Musenet 沒有根據我們對音樂的理解來顯式編程,而是通過學習預測成千上萬個 MIDI 文件中的下一個 token,來發現和弦、節奏和曲風的模式。Musenet 使用了與 GPT-2相同的通用無監督技術。

MuseNet 了解很多不同的音樂風格,我們可以用新穎的方式融合生成作品。此處展示的樣本里,給定肖邦夜曲的前 6 個音符,要求模型用鋼琴、鼓、貝斯和吉他生成一段流行風格的作品。模型成功地將這兩種風格融合在一起,整合的片段大概在 30 秒左右開始演奏。

由於 OpenAI 沒有提供下載地址,本音頻為錄音文件

5月份開放嘗鮮

MuseNet 支持的合作作曲家很多(下面會有展示),並將在 5 月 12 號發布(屆時 OpenAI 將根據反饋制定下一步計劃)。也就是說,5 月 12 號的時候,大家可以利用 MuseNet 嘗試創作自己的音樂作品啦。雖然到時候只能使用 MuseNet 眾多選項中的一個子集,但大家還是可以創作很多種不同的音樂。

在『簡單模式』(默認顯示)下,你會聽到 OpenAI 預先生成的隨機未切割樣本。選擇一個作曲家或一種風格,一首著名作品的可選開頭,然後開始生成。你可以探索模型能夠創建的各種音樂風格。在『高級模式』下,你可以直接和模型交互。這種情況下生成音樂作品耗時更長,但你創建的將會是全新的作品。

這個工具目前還是一個原型,所以耐心點哦!MuseNet 具有以下限制:

你選擇的樂器不是一定會使用,而是很可能會使用。MuseNet 通過計算所有可能的音符和樂器的概率來生成每個音符。模型會盡量傾向你選擇的樂器,但有可能會選擇其它樂器。

MuseNet 在風格和樂器的奇特搭配方面(比如肖邦與貝斯和鼓)也有困難。如果你選擇的樂器與該作曲家或樂隊的風格接近,則生成的音樂也會更自然一些。

好多好多作曲家和樂器 token

OpenAI 創建了作曲家和樂器 token,以便更好地控制 MuseNet 生成的樣本類型。在訓練期間,這些作曲家和樂器 token 被預先添加到每個樣本中,因此模型會學習利用這一信息進行音符預測。在生成音樂的時候,我們可以調整模型以選定的風格創建樣本,比如以拉赫瑪尼諾夫的鋼琴曲開頭作為前提,或者以旅程樂團、鋼琴、貝斯、吉他、鼓作為前提。

我們可以可視化來自 MuseNet 的嵌入,以深入了解模型所學到的東西。下面 OpenAI 用 t-SNE 可視化了各個作曲家和風格嵌入的餘弦相似性。

莫扎特、披頭士隨意切換,這個AI會用10種樂器演奏不同風格音樂

原圖為交互圖。將滑鼠懸停在某個特定的作曲家或風格上可以查看其與其他作曲家或風格之間的關係。

利用 Sparse Transformer 記住長期結構

MuseNet 使用 Sparse Transformer 的重算和優化核來訓練一個具有 24 個注意力頭的 72 層網路—全部注意力放在擁有 4096 個 token 的語境中。這個長語境大概是 MuseNet 能夠記住一個片段中長期結構的原因,就像以下示例中模仿肖邦一樣:

MuseNet 還可以創建音樂旋律形態,就像該示例中模仿莫扎特一樣:

音樂生成是測試 Sparse Transformer 的一個有用領域,因為音樂處於文本和圖像的中間區域。音樂有文本流暢的 token 結構(在圖形中,你可以查看 N 個 token,並找到上面行,而在音樂中,查看上一小節起點沒有固定數)。但是,我們可以輕易地聽到模型是否可以按照成百上千的 token 順序來獲取長期結構。一個音樂模型是否通過改變節奏而打亂自身結構會更顯而易見,而文本模型是否出現了短暫偏離則沒有那麼明顯。

它都用了哪些數據集?

OpenAI 從諸多不同的來源為 MuseNet 收集了訓練數據。ClassicalArchives 和 BitMidi 為該項目貢獻了大量的 MIDI 文件,同時他們還在網上找到了爵士樂、流行樂、非洲樂、印度樂和阿拉伯樂等幾種不同風格的音樂合集。此外,他們使用了 MAESTRO 數據集。

Transformer 在時序數據上進行訓練:OpenAI 根據給定的音符來預測即將出現的音符。他們嘗試使用幾種不同的方法將 MIDI 文件編碼成適用於本次任務的 token。

首先,OpenAI 使用和弦方法,該方法將同一時間聽到的每個音符組合作為一個獨立的「和弦」,同時為每個和弦指定一個 token。其次,他們嘗試通過僅關注音符的開頭來壓縮音樂模式,並且嘗試使用位元組對編碼方案來進行進一步壓縮。

OpenAI 還嘗試使用兩種不同的方法來標記時間推移:要麼是根據音樂節奏進行縮放的 token(因此該類 token 表示一個音樂節拍或節拍的一部分),要麼是以秒為單位標記絕對時間的 token。OpenAI 最終找到了一種結合了表現性和簡潔性的編碼:將音高、音量和樂器信息組合成一個單獨的 token。

bach piano_strings start tempo90 piano:v72:G1 piano:v72:G2 piano:v72:B4 piano:v72:D4 violin:v80:G4 piano:v72:G4 piano:v72:B5 piano:v72:D5 wait:12 piano:v0:B5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:4 piano:v0:G1 piano:v0:G2 piano:v0:B4 piano:v0:D4 violin:v0:G4 piano:v0:G4 wait:1 piano:v72:G5 wait:12 piano:v0:G5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:5 piano:v72:B5 wait:12

樣本編碼

在訓練中,OpenAI:

  • 通過升調和降調來調換音符(之後,OpenAI 減少了變調數量,從而使生成的音符在單個樂器範圍內)
  • 提高音量,調高或調低不同樣本的整體音量
  • 延長計時(當使用以秒計量的絕對時間進行編碼時),有效地稍微放慢或加快片段。
  • 在 token 嵌入空間中使用 mixup

OpenAI 還創建了一個內部評測:在訓練期間,要求模型預測給定的樣本是出自數據集或是模型之前生成的樣本。該評測分數被用來在生成作品時選擇樣本。

它添加了哪些嵌入?

OpenAI 添加了幾種不同的嵌入,為模型提供更加結構化的語境。除了標準位置嵌入之外,他們還添加了一個學習到的嵌入,該嵌入可以在給定的樣本中追蹤時間推移。這樣,所有同時發出聲音的音符都有相同的時間嵌入。

接下來,OpenAI 為和弦中的每個音符添加了一個嵌入(這是在模仿相關注意力,因為這樣可以讓模型更容易學到:音符 4 需要回看音符 3,或者回顧前一個和弦的音符 4)。

最後,他們添加了兩個結構化嵌入,該嵌入告訴模型指定的音樂樣本在較大音樂片段中的位置。一個嵌入將較大的音樂片段分成 128 塊,另一個嵌入編碼是在模型接近(末尾)token 時從 127 倒數到 0。

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

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


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

Colab 免費提供 Tesla T4 GPU,是時候薅羊毛了
當「轉型人工智慧」成為一個好公司走向失敗的原因……

TAG:機器之心 |