私たちは、10種類の楽器で4分間の楽曲を生成し、カントリーからモーツァルト、ビートルズまでのスタイルを組み合わせることができるディープニューラルネットワーク、MuseNetを作りました。 MuseNet は、私たちの音楽に対する理解に基づいて明示的にプログラムされたものではなく、何十万もの MIDI ファイルの次のトークンを予測する学習により、ハーモニー、リズム、スタイルのパターンを発見したものです。 MuseNet は、オーディオまたはテキストにかかわらず、シーケンス内の次のトークンを予測するために学習された大規模な変換モデルである GPT-2 と同じ汎用教師なしテクノロジを使用しています。 ここでは、モデルにショパンの夜想曲の最初の 6 音が与えられていますが、ピアノ、ドラム、ベース、およびギターのポップ スタイルの曲を生成するように要求されています。 このモデルは、2 つのスタイルを説得力を持ってブレンドすることに成功し、30 秒のマークでフルバンドが参加します。
Try MuseNet
MuseNet を使用して、ミュージシャンやミュージシャンではない人が新しい曲を作成する方法を見るのが楽しみです。 作曲家またはスタイル、有名な曲の開始を任意に選択し、生成を開始します。 これにより、このモデルが作り出すことのできる様々な音楽スタイルを探求することができます。 アドバンスド・モードでは、モデルと直接対話することができます。
MuseNet の制限事項には次のようなものがあります:
- 要求する楽器は強い提案であり、要求ではありません。 MuseNet は、可能なすべての音符と楽器を網羅する確率を計算することによって、各音符を生成します。 モデルは、あなたの楽器選択の可能性が高くなるようにシフトしますが、常に他のものを選択する可能性があります。
- MuseNet は、スタイルと楽器の奇妙な組み合わせ(ショパンとベースとドラムなど)をより難しくしています。 作曲家やバンドの通常のスタイルに最も近い楽器を選ぶと、世代がより自然になります。
Composer and instrumentation tokens
MuseNet が生成するサンプルの種類をより制御できるように、作曲家と楽器編成トークンを作成しました。 学習時に、これらの作曲家および楽器編成トークンを各サンプルに付加し、モデルがこの情報を使用して音符の予測を行うよう学習します。 生成時に、Rachmaninoff piano start:
またはピアノ、ベース、ギター、ドラムのバンドJourney:
などのプロンプトで始めることにより、選択したスタイルでサンプルを作成するようにモデルを設定することができます。 ここでは、t-SNE を使用して、さまざまな音楽の作曲家とスタイルの埋め込みのコサイン類似度の 2 次元マップを作成します。
Long-term structure
MuseNet は Sparse Transformer の再計算と最適化カーネルを使用して、4096 トークンのコンテキストに完全に注意を払いながら、24 注意ヘッドで 72 層のネットワークを訓練します。 この長い文脈は、ショパンを模倣した次のサンプルのように、曲の長期的な構造を記憶することができる理由の1つかもしれない:
また、モーツァルトを模倣したこのサンプルのように、音楽の旋律構造を作り出すこともできる:
音楽生成は、テキストと画像の中間領域に位置しているので、Sparse Transformerをテストするために有用な領域である。 テキストには流動的なトークン構造があります(画像ではN個のトークンを振り返って上の行を見つけることができますが、音楽では前の小節を振り返るための固定された数は存在しません)。 しかし、そのモデルが数百から数千トークンのオーダーで長期的な構造を捉えているかどうかは、容易に聞き取ることができる。 音楽モデルがリズムを変更することによって構造を混乱させた場合は、テキスト モデルが短い余談に走った場合はあまり明確にはならないのと同じように、はるかに明白です。 ClassicalArchives と BitMidi は、このプロジェクトのために MIDI ファイルの大規模なコレクションを提供してくれました。 さらに、MAESTRO データセットを使用しました。
変換器は、連続したデータで学習します。 我々は、このタスクに適したトークンにMIDIファイルをエンコードするいくつかの異なる方法を実験した。 まず、一度に鳴る音のすべての組み合わせを個々の「和音」と見なし、各和音にトークンを割り当てるコードワイズアプローチ。 次に、音の始まりにのみ着目して音楽パターンを凝縮し、バイト ペア エンコード方式を使用してさらに圧縮することを試みました。 ピッチ、音量、楽器の情報を 1 つのトークンにまとめるのです。
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
トレーニングでは、次のことを行います。
- 音高を上げ下げして転調する(トレーニングでは後に転調量を減らし、世代を個々の楽器範囲内にとどめる)。
- Augment the volumes, turning up or down the overall volumes of the various samples.
- Augment timing (when using the absolute time in seconds encoding), effectively slightly slowing or speeding the pieces.
- Augment timing (when using the absolute time in seconds encoding).
- Use mixup on the token embedding space
We also create an inner critic: The model is asked during training time to predict whether a given sample is truly from the dataset or if it is one of the model’s own past generations.
We are also created a inner critic.
Embeddings
私たちはモデルに構造的な文脈を与えるために、いくつかの異なる種類の埋め込みを追加した。 標準的な位置の埋め込みに加え、与えられたサンプルの時間経過を追跡する学習型埋め込みを追加しました。 この方法では、同時に鳴るすべての音に同じタイミングの埋め込みが与えられます。 これは、音4が音3を振り返る必要があること、あるいは前のコードの音4を振り返る必要があることをモデルが学習しやすくなるためである)。 最後に、2つの構造的埋め込みを追加し、与えられた音楽サンプルがより大きな音楽作品の中のどこにあるのかをモデルに伝える。 1 つの埋め込みは、より大きな楽曲を 128 の部分に分割し、2 つ目の埋め込みは、モデルが (終了) トークンに近づくと 127 から 0 にカウントダウンするものです。 気に入った作品を作成したら、Instaudio などの無料のサービスにアップロードして、リンクをツイートしてください (MuseNet のデモには、これを支援するためのツイート ボタンがあります)。 ミューズネットのデモに関する提案は、お気軽にメールでお寄せください。 また、MuseNet を使ってより深く作曲することに興味がある方や、トレーニング セットに追加したい MIDI ファイルがある方もご連絡ください。
。