Skip to main content

MusicVAEを使用した音楽スニペットの生成と補間

変分オートエンコーダーを使用して短い音楽スニペットの分布をモデル化する方法の紹介
Created on February 19|Last edited on February 16
このレポートは、Hao Hao Tanによる「Generating and Interpolating Music Snippets with MusicVAE」の翻訳です。



この興味深い例をチェックして、MusicVAEが2つの有名な童謡「Twinkle Twinkle Little Star」と「Mary Had aLittle Lamb」の間をスムーズに補間する方法を確認してください。




Twinkle img
card
musicvae_twinkle
Twinkle Twinklw
This run didn't log audio for key "Twinkle Twinklw", step 0, index 0. Docs →
Run set
6


概要

前回のレポートでは、Music Transformerが1分間のピアノ演奏をゼロから生成する方法について説明しました。ただし、Music Transformerの制御性には制限があります。たとえば、2つの作曲された音楽のミキシングとマッチング(一般に補間と呼ばれます)などのクリエイティブなアプリケーションはサポートされていません。

このレポートでは、音楽セグメントの潜在的な分布をモデル化することを提案した、Roberts氏によって作成されたMusicVAEに関する論文を考察していきます。これにより、異なる音楽セグメント間のスムーズな補間を適用できます。これは、シンボリック音楽生成ドメインでの変分オートエンコーダーの最初の使用法でもあります。

バックグラウンド‐変分オートエンコーダー(VAE)

MusicVAEに飛び込む前に、まず変分オートエンコーダーの要点について説明します。

オートエンコーダーは、教師なしの方法でデータポイントのコンパクトで低次元の表現を学習できるニューラルネットワークアーキテクチャの一種です。これは、入力データポイントXを(低)次元の多様体zに投影するエンコーダーと、圧縮された低次元の特徴ベクトルが与えられた場合にデータポイントを再構築することを目的としたデコーダーで構成されます。

オートエンコーダーのトレーニングは、入力データポイントを再構築するようにネットワークを強制する損失関数を最適化することによって行われます。

L=MSE(fdecode(fencode(X)),X)L = MSE(f_{decode}(f_{encode}(X)), X)

変分オートエンコーダ(VAE)は、オートエンコーダーと非常によく似た特性を持っていますが、その潜在変数分布p(z)p(z)は、標準のガウス分布、つまりz∼N(μ,σ2)z \sim N(\mu, \sigma^2)に準拠する必要があります。したがって、VAEのデータ生成の観点から、データポイントは2段階のプロセスで生成されます。

  1. 最初に、潜在的なコードが前のp(z)p(z): z∼p(z)z \sim p(z)(z)からサンプリングされます
  2. 次に、潜在コード:X∼p(X∣z)X \sim p(X|z)をデコードしてデータポイントを生成します

このプロパティを適用するために、VAEをトレーニングする目的関数は、次の方程式を使用して周辺尤度p(X)p(X)の証拠下限(ELBO)を最大化することです。

L=Eq(z∣X)[log⁡p(X∣z)]−DKL(q(z∣x)∣∣p(z))L = E_{q(z|X)}[\log p(X|z)] - D_{KL}(q(z|x) || p(z))

この損失関数をオートエンコーダーの損失関数と比較すると、次のようになります。

  • 最初の項は両方とも再構成損失に似ています。VAEでは、事後分布q(z∣X)q(z|X)と尤度 p(X∣z)p(X|z) はそれぞれエンコーダーとデコーダーに対応します。

  • VAE損失の追加の第2項は、KL発散項です。これは、2つの確率分布間の「差」を測定するために一般的に使用されます。ここでは、事後分布q(z∣X)q(z|X)が事前分布p(z)に近づくことを確認しています。これは、一般に標準ガウス分布N(μ,σ2).N(\mu, \sigma^2).です。

簡単に言うと、VAEは、オートエンコーダーの「正規化された」バージョンと考えることができます。オートエンコーダーは、エンコードされた潜在変数の分布に制約を課さないためです。したがって、エンコードとデコードのプロセスもわずかに異なります。

  • エンコード中に、単一の潜在ベクトルをエンコードするだけでなく、基礎となる分布の平均μと標準偏差σを表す2つの潜在ベクトルをエンコードします。
  • デコード中に、最初に分布から潜在ベクトルをサンプリングします(より正確には、再パラメーター化のトリックϵ∼N(0,I),z=μ+σ⋅ϵ\epsilon \sim N(0, I), z = \mu + \sigma \cdot \epsilonを介して行われます)。次に、潜在ベクトルをデコーダーに入力して、入力を再構築します。

VAEの目的関数(ELBO)の導出のより詳細なバージョンと、変分推論に関連するその背景については、この論文を参照してください。今後のレポートでVAEに関する詳細な説明を提供します。

オートエンコーダーの代わりにVAEを使用して生成する理由

生成アプリケーションの場合、次の理由により、オートエンコーダーと比較してVAEが一般的に好まれます。

  1. まず、VAEは、潜在変数をサンプリングするための事前分布を提供します。これは、新しい潜在コードをサンプリングする直感的な方法がないオートエンコーダーと比較して、新しいデータポイント(新しい顔画像、新しい音楽スニペットなど)を生成するのにはるかに便利です。

  2. 次に、潜在変数空間に強制されたガウス分布があるため、オートエンコーダの潜在変数空間と比較して、空間の「滑らかな表面」が期待できます。これにより、一般に「潜在ホール」が増えます。これは、潜在空間の補間を必要とするミックスアンドマッチアプリケーションにとって特に重要です。これは、「潜在ホール」領域は非現実的なデータ出力(たとえば、変形した顔画像、インコヒーレント音楽スニペット)を生成するため、潜在空間の「パスを通過する」ことを意味します。

MusicVAE

次に、MusicVAEの詳細について詳しく説明します。エンコーダーとデコーダーの場合、リカレントなVAEを使用してテキストを生成を参照して、MusicVAEはリカレントニューラルネットワーク(より正確にはLSTM)を使用���ることを選択します。

  • エンコーダーq(z∣X)q(z|X)は入力シーケンスを処理し、非表示状態のシーケンスを生成します。平均と標準偏差、μとσは、2つの別々のフィードフォワードネットワーク、つまりμ=f1(hT),σ=f2(hT)によって最終的な隠れ状態\mu = f_1(h_T), \sigma = f_2(h_T)によって最終的な隠れ状態h_T$を使用して導出されます。

  • デコーダーp(X∣z)p(X|z)は、最初にサンプリングされた潜在ベクトルzzを使用して、デコーダーRNNの初期状態を設定します。次に、初期状態から出力シーケンスを自己回帰的に生成します。トレーニング中に、出力シーケンスは入力シーケンスを再構築するようにトレーニングされます。

この作品では、MusicVAEを使用してモノフォニックなメロディーとドラムラインを生成しています。このレポートでは、モノフォニックメロディーの生成に焦点を当てます。メロディーシーケンスは、(T,130)(T, 130)シーケンスマトリックスを介して表されます。このマトリックスでは、130次元の出力空間(ワンホットベクトル)は、128のMIDIピッチの128の「ノートオン」トークンと「ノートオフ」(演奏されたノートを解放する)と「休憩」(何も演奏されない)の単一のトークンで構成されます。ここで、MusicVAEは、2小節(T=32T = 32)と16小節(T=256T = 256)の2つの異なる長さのメロディデータポイントで実験します。これについては、後のセクションでパフォーマンスの違いについて説明します。

vanilla RNN MusicVAEの問題

著者は、MusicVAEにvanilla RNNを使用する際の2つの主な制限を報告しました。

  1. デコーダーは本質的に自己回帰(前のステップに基づいて現在のステップの出力を生成する)であるため、潜在的なコードを無視できる十分に強力なデコーダーです。潜在コードを無視すると、ELBOのKL発散項を簡単にゼロに設定できます。モデルは潜在変数の分布を効率的に学習できないため、これは望ましくありません。
  2. モデルはシーケンス全体を単一の潜在ベクトルのみに圧縮するため、非常にタイトなボトルネックが発生します。以下の結果表に示されているように、バニラリカレントVAEは2小節のメロディーを適切な精度で再構築できますが、著者はこのアプローチがより長いシーケンス(16小節など)で失敗し始めることを発見しました。

ソリューション

MusicVAEは階層デコーダーを導入‐16小節の出力を生成しているため、著者は最初に各小節の中間潜在ベクトル(本書では「コンダクター」と呼ばれます)、つまり[z1′,...,z16′]=RNN(z)[z^\prime_1, ..., z^\prime_{16}] = RNN(z)となります。次に、各バーについて、RNNの別のレイヤーを使用して、中間潜在ベクトルに基づいて実際の出力を生成します。

その理由は、出力シーケンスが長いほど、潜在状態の影響が消失するためです(これは、長いシーケンスでの勾配消滅 問題に似ています)。したがって、階層デコーダーは最初に中間潜在コードのより短いシーケンスを生成します。これにより、消失する問題が軽減されることが期待されます。次に、各バーについて、潜在ベクトルから生成される特定のバーの中間潜在ベクトルのみに基づいて出力が生成されます。これにより、生成プロセスが潜在状態を無視しないように強制される可能性があるため、潜在分布の学習が向上します。

補間

メロディーの意味のある潜在的な分布を学習できるようになったので、2つの異なるメロディーAとBの間の補間は、次の手順を実行します。

  1. AとBの両方の潜在コード、つまりzA、​zBz_A、​z_Bを取得します。
  2. 潜在空間内のzAz_AzBz_Bの点の間を「スライド」し、補間パス上でN個の潜在コードを取得します。つまり、zα=zA+α(zB−zA).z_\alpha = z_A + \alpha(z_B - z_A).です。

著者らは、潜在空間での補間は、データ空間での補間と比較して、ソースメロディからターゲットメロディへのはるかにスムーズでコヒーレントな変換をもたらすことを実証しました。したがって、これは、学習された潜在的な分布が、音楽スニペットの構造に関連する意味のあるコンパクトな情報をキャプチャできることを証明しています。

生成

添付のColabノートブックでは、バニラリカレントVAEとMusicVAEの両方を使用して2小節と16小節のメロディーを生成します。生成されたオーディオファイル、および対応するピアノロールプロットは、Weight&Biases wandbライブラリを使用して以下のようにログに記録されます。

このColabノートブックで結果を再現する



2個のバーを生成して補間します




Run set
6


16個のバーを生成して補間します




Run set
6


サマリー

MusicVAEは、コンパクトで低次元の多様体で音楽スニペットの分布をモデル化するための実行可能なソリューションを提供します。これにより、メロディを最初から生成したり、非常に異なるスタイルのメロディを組み合わせたりするクリエイティブなアプリケーションが可能になります。このようなモデルは、音楽生成システムの制御性のレベルを高めることができ、ユーザーが希望するスタイルで音楽を生成する際の制御をより細かくすることができます。

ただし、MusicVAEは16小節の長さの音楽を生成できますが、Music Transformerのようなポリフォニック(単一の音ではなく複数の音を同時に再生する)の1分間のシーケンスを生成することにはほど遠いです。MusicTransformer(長くてコヒーレントなシーケンスを生成する)とMusicVAE(高レベルの制御性)の両方の長所を組み合わせることができますか?次のレポートでは、このトピックに関連する別のモデルを見ていきます。

詳細については、オリジナル論文MusicVAEブログの投稿を参照してください。

メロディスニペットと補間を共有してください!@weights_biases@gudgud96にツイートしてくださ


Iterate on AI agents and models faster. Try Weights & Biases today.