はじめに
本記事は、音楽を機械学習を用いて自動生成する方法について自分なりにまとめた記事です。
また、2020年4月に作成した記事を2021年10月に一部修正したのみで内容が古いため、読む際はご注意ください。さらに、現時点で内容の更新予定はなく、今後に削除する可能性があることもご了承ください。
そして、本記事では浅い部分にしか触れていないため、A Tutorial on Deep Learning for Music Information Retrievalのような総説論文を読むことを強くお勧めします。
音楽の構成要素
まず音楽を生成するためにその構成要素を知る必要があります。
音楽の主な三要素はメロディー、ハーモニー、リズムです。メロディーは連続的に音が変化していくこと、ハーモニーは複数の音が重なり合って調和すること、リズムは周期に従って音が変化していくことです。この三要素が複雑に組み合わさっているため、画像などと比べると音楽の生成は非常に難しいと考えられます。
音楽のコンピュータ上での扱い
音楽(音声信号)は連続値ですがパソコン上では離散化する必要があります。離散化するためにサンプリング周波数に従ってサンプリングが行われます。
音楽を機械学習する際に問題になるのが計算コストです。一般的な44.1kHzのサンプリング周波数で5分の曲をサンプリングした場合、13230000回のサンプリング情報を扱わなければならず、学習に非常に時間がかかります。
そこで、一般的にはMIDI信号をデータとして用います。MIDI信号は、音波の情報ではなく音の高さや大きさや長さなどの情報を保持します。そのため、前者に比べ少ないデータ量で済みます。
しかし、半音ごとの情報しか持っておらず、微分音(半音よりさらに細かく分けられた音程のこと)など楽譜で表すことのできない音楽を表現することができないという問題があります。
音楽の入力形式
音楽を機械学習で扱う際にはMIDIデータとすることが多いですが、このMIDIデータをさらにOne-Hotベクトルへと変換して機械学習を行います。また、One-Hotベクトルとはある要素が1でそれ以外は全て0であるようなベクトルのことで、音楽の場合はそれぞれの要素が音階に対応します。
MIDIデータではなく時間-周波数表現のような2次元の表現として音楽を扱う場合もあることに注意が必要です。詳しくはご自身で調べてください。
音楽での機械学習の手法
音楽をコンピュータでどのように扱えばいいかわかったので、音楽における機械学習の手法をいくつか紹介します。
[1] RNN(Recurrent Neural Network)
再帰型ニューラルネットワークと呼ばれるもので、以下のような多層構造となっています。このニューラルネットワークは通常の入力に加え直前の層の出力も入力とするため、時系列データを扱う際に用いることが多いです。
[2] CNN(Convolutional Neural Network)
畳み込みニューラルネットワークと呼ばれるもので、画像の機械学習の際に頻繁に用いられます。画像の機械学習を例にあげると、以下の図のように層ごとに用意したフィルターを通していくことで、順により高次の特徴量を検出していきます。
また、音楽の場合も時間軸で畳み込むことで学習が行うことができますが、長時間の依存関係による特徴量をうまく捉えられず、画像に比べて音楽の学習はCNNでは難しいです。
[3] GAN(Generative Adversarial Networks)
敵対生成ネットワークと呼ばれるものです。この手法では、生成器と識別器の二つの学習モデルが存在し、生成器ではランダムに偽物のデータが生成され、識別器はそのデータが偽物であるかどうかを判定します。この二つのモデルが競合的な学習を繰り返すことで、本物にそっくりな偽物を生成器が作ることが期待されます。
ただ、生成器と識別器のいずれかが賢くなり過ぎてそれ以上学習が進まなくなる問題(勾配消失問題)が頻繁に起きます。そのため、勾配消失問題が起きないような安定的な学習のための工夫が必要となります。
[4] DCNN(Dilated Convolutional Neural Network)
従来のCNNでは、畳み込みフィルタが隣合うピクセル同士を要素としたものでした。しかし、これでは局所的な特徴を捉えることができても大局的な特徴を捉えることができません。そこで、DCNNではフィルターの要素の間隔を空けることで大局的な特徴を捉えることに成功しました。また、大局的な特徴を捉えることが重要な音楽において、DCNNは効果的な方法の一つと考えられます。
まとめ
今回は紹介できませんでしたが、GoogleのMagentaプロジェクトなど、音楽生成関連のプロジェクトには様々なものがあります。また、2021年10月現在は限定的な場合でないと実用化が難しいようですが、近いうちにより汎用性の高いモデルが出てくることを願っています。