Music Transformerを使用したピアノ音楽の生成
概要
機械学習アルゴリズムを使用した音楽の生成を学ぶことは、過去5年間で大きな関心を集めています。深層学習の出現により、畳み込みニューラルネットワーク(CNN)、長短期記憶ネットワーク(LSTM)、制限付きボルツマンマシン(RBM)などのいくつかのニューラルネットワークアーキテクチャが、アルゴリズムによる音楽生成タスクの一般的な選択肢になりました(詳細については、この調査論文を参照してください)。
このレポートでは、最先端の言語モデルベースの音楽生成アーキテクチャを提案したGoogle MagentaのHuang氏等によって作成されたMusic Transformerの論文を見ていきます。NLP分野で大きな成功を収めたトランスフォーマーを象徴的な音楽世代の領域に紹介した最初の作品の1つです。
バックグラウンド
一般に、生成タスクで音楽を表現するには、主に2つのアプローチがあります。最初のアプローチは、音楽をオーディオ波形として表現することです。このアプローチを使用すると、一般的な音楽データ表現には、生の波形、スペクトログラム、メルスペクトログラム、定数Q変換(CQT)などが含まれます。2番目のアプローチは、音楽を象徴的なイベントトークンとして表すことです。これは、MIDIイベント(このレポートで使用されている)、ピアノロール、テキスト(ABC記譜法など)などの形式で提供されます。以前のW&Bレポート では、音楽を生成するためにオーディオベースのアプローチを使用するジュークボックスが紹介されています。このレポートでは、代わりにシンボリックベースのアプローチを使用するMusic Transformerを紹介します。
ピアノ音楽をイベントトークンとして表現する
MIDIイベントは、ピアノを弾きながら、各きめ細かいアクションをイベントトークンとしてマッピングします。この作業では、次の4種類のイベントがモデル化されます。
- NOTE_ON - ノートを押す
- NOTE_OFF - トをリリースする
- TIME_SHIFT - 次のタイムステップに進む
- SET_VELOCITY - ノートの再生速度を設定する
この作業では、128のノートピッチに対応する合計128のNOTE_ONイベントとNOTE_OFFイベント、100のTIME_SHIFTイベント(10ミリ秒~1秒)、および128の異なるノート速度に対応する128のSET_VELOCITYイベントが導入されます。この論文の例を以下に示します。
このアプローチを使用することにより、自然言語処理でのトークン化に対応していることがわかります。
- 楽曲は文または段落に対応します。
- 各ノートイベントは、文/段落の単語に対応します。
- 「語彙セット」からのすべての可能なノートイベント。
したがって、音楽生成を言語生成タスクのように扱っているため、生成モデルのアーキテクチャとしてTransformersを使用することは合理的です。
Music Transformer VS Vanilla Transformer
バニラトランスフォーマーは、その2次メモリ要件のため、長いシーケンスを処理するときに悪名高いことが知られています。これは、特に音楽生成にとって大きな問題です。これは、1分間の楽曲に数千のMIDIイベントトークンが簡単に含まれる可能性があるためです。また、音楽は繰り返し、音階、アルペジオなどの構造化されたフレーズで構成されることが多いため、著者は、音楽アプリケーションでは相対位置情報が重要であると主張しました。したがって、モデルはより効率的な方法で相対位置情報をキャプチャできる必要があります。
上記の考慮事項を考慮して、著者は以下の変更を加えてTransformerモデルを改善しました。
1 - 相対的な注意
両方のトランスフォーマーの主な違いは、自己注意メカニズムにあります。バニラトランスフォーマーは、スケーリングされたドット積の注意に依存しています。これは、次の式で表すことができます。
Attention(Q,K,V)=softmax(QKTdk)VAttention(Q, K, V) = softmax(\frac{Q K^T}{\sqrt{d_k}})V
ここで、QQ, KK, VVはクエリ、キー、および値のテンソルを表し、それぞれがモデルで使用されるシーケンスの長さと次元の数を表すテンソル形状(ll, dd)を持ちます。
Shaw氏等によって提案された相対的な注意により、シーケンス内で2つの位置がどれだけ離れているかによってモデルに通知することができます。この情報を表すために、式は次のように変更されます。
Attention(Q,K,V)=softmax(QKT+Sreldk)VAttention(Q, K, V) = softmax(\frac{Q K^T + S_{rel}}{\sqrt{d_k}})V
追加の用語SrelS_{rel}は、(ll, ll)形のテンソルです。テンソルvi,jの値は、長さlの位置iiとjj の相対距離に関連しています。それは本質的に相対的であるため、i1−j1=i2−j2i_1 - j_1 = i_2 - j_2の場合、vi1,j1=vi2,j2v_{i_1, j_1} = v_{i_2, j_2}になります。
では、どうすればSrelS_{rel}を入手できますか?
- 最初に、埋め込みの固定セットErE_r,を初期化します。これには、相対距離r=i−jr = i - jごとに一意の埋め込みere_r があります。
- 次に、形状(l,l,d)(l, l, d)の3DテンソルRRを形成します。ここで、Ri,j=ei−jR_{i, j} = e_{i -j}です。
- 最後に、QQを(l,1,d)(l, 1 ,d) テンソルに再形成し、Srel=QRTS_{rel} = QR^{T}とします。
2 - メモリ効率の高い実装
上の図から、中間テンソルRRがO O(L2D)O(L^{2}D)のメモリフットプリントを必要とすることは明らかです。これは、長いシーケンスでは実行不可能です。したがって、著者は、RRを計算せずにSrelS_{rel}を取得し、メモリフットプリントをO O(LD)O(LD)内に維持できる「スキューイング」トリックを提案しました。
手順は次のとおりです:
- QQにErE_rを掛けます
- 左端の列の前にダミーベクトルをパディングします。
- 行列を再形成して形状(l+1,l)(l + 1, l)にします。
- 行列をスライスして、SrelS_{rel}に対応する最後のl行を取得します
結果
論文に示されているように、提案されたMusic Transformerアーキテクチャには、バニラTransformersおよびLSTMベースのモデル(PerformanceRNNとして知られている)によって生成されたピアノ音楽と比較して、いくつかの明らかな利点があります。
- .TransformerとLSTMを比較すると、Transformerベースのモデルは、一般に、プライマーモチーフの保存と再利用に優れています。比較的注意を払うことにより、Music Transformerは繰り返されて変化するフレーズを作成しますが、vanilla Transformerはモチーフをより均一に使用します。LSTMモデルは最初はモチーフを使用しますが、すぐに他の素材に移ります。
- vanilla TransformerとMusic Transfomerを比較すると、相対的な注意が訓練されたよりも長い長さに一般化することができたことが観察されます。Vanilla Transformerはトレーニングの長さを超えて劣化しているように見えますが、Music Transformerは依然として一貫した音楽構造を生成できます。
生成
事前にトレーニングされたMusic Transformerモデルを使用した音楽生成には、(i)ゼロからの生成、(ii)プライマーメロディからの生成、(iii)メロディの伴奏の生成の3つの異なるモードがあります。
Google Magentaが提供するColabノートブックから始めます。これは、事前にトレーニングされたモデルの読み込み、tensor2tensorフレームワークの初期化、および問題の定義をすでに処理しているためです。生成されたオーディオファイル、および対応するピアノロールプロットは、Weights&Biases wandbライブラリを使用して以下のようにログに記録されます。
このColabノートブックで結果を再現する
ゼロから生成
入門メロディーからの生成
特定のメロディーの伴奏を生成する
サマリー
Music Transformerは、言語モデルの力を象徴的な音楽生成の領域にもたらす優れた論文であり、一貫した音楽構造とスタイルでより長いピアノ音楽を生成することができます。最近のさまざまな線形複雑性トランスフォーマーの出現により、Music TransformerアーキテクチャをLinformer and Transformers are RNNsなどの候補に置き換えることの影響を調査することも興味深いと思います。これらは、線形時間アテンションメカニズムの利点を共有しているからです。
詳細については、オリジナル論文とMusic Transformer blog postのブログ投稿を参照してください。
あなたが生成したピアノ音楽を私たちに共有してください! @weights_biasesと@gudgud96にツイートお願いいたします。