OpenAI MuseNet

OpenAI 推出了 MuseNet,這是一個深度神經網路,可以生成長達四分鐘、包含 10 種不同樂器的音樂作品。該模型可以融合多種音樂風格——從 Mozart 和 Chopin 到 The Beatles 和鄉村音樂——而無需經過明確的音樂理論編程,而是透過在大型 MIDI 檔案數據集中預測下一個 token,來發現其中的模式。

Architecture and Technical Foundation

MuseNet 是基於大規模 transformer 模型構建的,使用了與 GPT-2 相同的通用非監督式技術。它特別利用了 Sparse Transformer 的 recompute 和優化後的 kernels,以支持 72 層網路和 24 個 attention heads。

關鍵技術規格包括:

  • Context Window: Full attention 覆蓋 4,096 個 tokens 的上下文,這使得模型能夠維持長期的音樂結構和旋律一致性。
  • Training Objective: 該模型被訓練用於預測序列中的下一個 token,無論數據是音訊還是文本。
  • Domain Application: 音樂作為 Sparse Transformer 的測試場,因為它橋接了文本(流動的 token 結構)與圖像(固定的空間關係)之間的差距,使得節奏或旋律中的結構性錯誤變得非常容易被聽出。

Control Mechanisms: Composer and Instrumentation Tokens

為了讓用戶能夠控制輸出,OpenAI 實施了作曲家和樂器 token。這些 token 在訓練期間被添加到樣本的前面,讓模型能夠將特定的風格或樂器與生成的音符預測關聯起來。

在生成時,這些 token 充當調節器。例如,一個提示詞可以指定「Rachmaninoff piano start」或「the band Journey, with piano, bass, guitar, and drums」的組合。雖然這些 token 充當強烈的建議,但它們並非嚴格的要求;MuseNet 會計算所有可能音符和樂器的機率,這意味著它偶爾可能會偏離所要求的樂器配置。

Dataset and Tokenization

MuseNet 是在來自 ClassicalArchives、BitMidi、MAESTRO 數據集以及涵蓋爵士、流行、非洲、印度和阿拉伯風格的各種線上收藏集的數十萬個 MIDI 檔案上進行訓練的。

Token Encoding

OpenAI 在確定一種將音高、音量和樂器資訊結合到單個 token 中的簡潔格式之前,嘗試了幾種編碼方法。其他嘗試過的方法包括:

  • Chordwise approach: 為每個同時發聲的音符組合分配一個單一 token。
  • Condensed patterns: 僅關注音符的開始,並使用 byte pair encoding。
  • Timing markers: 測試了 tempo-scaled tokens(音樂節拍)和以秒為單位的絕對時間。

Training Augmentations

為了提高魯棒性,訓練過程包括:

  • Pitch Transposition: 提高和降低音高(在後期階段減少,以保持樂器在自然音域內)。
  • Volume Augmentation: 調整樣本的整體音量。
  • Timing Augmentation: 在使用絕對時間編碼時,稍微加快或放慢樂曲片段。
  • Mixup: 在 token embedding 空間中應用 mixup。
  • Inner Critic: 一個訓練用於區分實際數據集樣本與模型過去生成的樣本的判別器,用於在生成過程中選擇更高品質的樣本。

Structural Embeddings

除了標準的 positional embeddings 之外,MuseNet 還採用了幾種專門的 embeddings 提供了結構性上下文:

  • Timing Embeddings: 一種學習到的 embedding,用於追蹤時間的流逝,確保同時發聲的音符共享相同的 timing embedding。
  • Chord Embeddings: 為和弦中的每個音符提供一個 embedding,以幫助模型學習音符之間的相對 attention。
  • Global Structural Embeddings: 兩個用於在較大的樂曲中定位模型的 embeddings:一個將樂曲分為 128 個部分,另一個則作為從 127 到 0 的倒數,隨著模型接近結束 token 時使用。

Sources