読者です 読者をやめる 読者になる 読者になる

xiangze's sparse blog

機械学習、ベイズ統計、コンピュータビジョンと関連する数学について

RNN-RBMによる旋律の予測と生成と音楽情報処理に関する紹介

かなり以前(2012年)のものになりますが、deeplearning.netでRecurrent Neural Network(の一種)のTheanoによる実装とMIDIデータからの旋律予測に関する論文の実装が公開されていたの紹介します。またその他機械学習による音楽情報の解析に関して少し紹介します。

論文概要

Recurrent Neural Network(RNN)の生成モデル版といえるRNN-RBMを用いて多声的(Polyphonic)な音楽での旋律予測の精度を向上させたという内容です。RNNは自然言語処理特に単語間の意味的距離を推測するword2vecや機械翻訳で用いられ(全然違うものでした。
https://github.com/piskvorky/gensim/blob/develop/gensim/models/word2vec.py
@Scaled_Wurm さんありがとうございます。)、高い性能が知られているそうです。
本論文でも多次元の時系列データのモデル構築手法としてのRNN-RBMの性能の高さが示されています。
あわせて学習結果から楽曲を生成することができるので、その結果も公開されています。

手法

既存の手法(baseline)としては隠れマルコフモデル(HMM)が用いられているそうですが、この論文では観測変数と隠れ変数が相互に依存関係にあるというRBMの特徴を持ったモデルであるrecurrent temporal RBM(RTRBM)と新たに提唱したRNN-RBMを用いています。

f:id:xiangze:20140928133005p:plain

RNN-RBMはFig 1.にあるようにRNNとRBMが合体したような構造になっています。
hidden variableとvisible variableの関係が一方向的になっている部分が非確率的なRNNになっている点がHMMと異なる点です。
RNNでの誤差逆伝搬法Back Propagation Through Time (BPTT)に相当する方法を用いてパラメータを推定しますが、RBMなので誤差ではなくnegative log-likehood cost
\( C =-log P(\{v_t\}) \)
の最小化を行います。その勾配の式の形は通常のBPTTと類似したものになります。
*1
またそれらの誤差逆伝搬法の勾配の計算においてHessian-Freeと称する方法*2で予測精度が向上することも示されています(Fig 4.)。これはガウス・ニュートン法による関数の最適化の2次微分の部分を共役勾配法(CG)で行うというもの(らしい)です。

論文の本題は旋律の予測ですが、テストデータとして他に bouncing ball videos dataset( www.cs.utoronto.ca/~ilya/code/2008/RTRBM.tar ), human motion capture dataset( people.csail.mit.edu/ehsu/work/sig05stf )などを使ってRNN-RBMの既存手法(RTRBM)に対する優位性を示しています。

予測性能

複数midi data set(Piano-midi.de, Nottingham, MuseData, JSB Chorales)に対して一定期間の音符をフレームとして利用した場合の次に来る音符の組み合わせの予測を行っており、精度の向上特にBach choralでは10%近い予測性能の向上が見られています(Fig 5)。

実装

deeplearning.netでは誤差逆伝搬の部分をTheanoで確率的勾配降下法(SGD)を実装しています。論文ページではTheanoベースのHessian-Free法のコードが公開されています*3

楽曲生成の結果

論文ページでは論文で使用された4つのデータセットとそこから生成された楽曲が公開されています。
deeplearning.netの方ではNottingham data set(folk songのdataset)を用いて、こちらも結果が公開されています。
midiデータの読み込みに際してファイル名の型をStringからStringTypeに変換する必要があります*4
deeplearning.netで公開されている生成結果は移調、テンポ補正がされていないため元データ(Nottingham data set)からはかけ離れたものになってしまっていますが、論文ページの方で公開されているもの、特にBach choralの生成結果は自然に聴こえました。テンポがあまり変化せず、また旋律に特徴があるせいなのかあるいはデータ数の多さが影響を与えているのかもしれません。
Pythonのライブラリmusic21を用いるとmidiデータからの情報の取得や調の判定、移調などが出来るそうですが、転調のある曲の処理などはむしろPython MIDI packageのmidiread().piano_rollで得られる二値、二次元の配列を直接いじってしまった方が良いかもしれません。

その他音楽情報処理について

音声データからの音楽的情報の抽出やそれに基づいた楽曲の分類などの研究は音楽情報処理と呼ばれ、コード進行や旋律の予測はその中の大きなジャンルのひとつとして位置づけられるそうです。
論文著者のNicolas Boulanger-Lewandowskiさんも博士論文はRNNを用いた音声データからの音楽的情報の抽出だそうです。

また抽出された情報に基づいた楽曲の推薦などはビジネス上の重要な分野です。
SpotifyではConvolutuonal neural net(CNN, Theano実装)を使った楽曲の分類
https://benanne.github.io/2014/08/05/spotify-cnns.html
(インターンの人のブログらしい)や履歴情報からの近似最近傍探索による推薦
https://github.com/spotify/annoy
を行っているようです。
CNNを用いた方は音色、リズム、旋律、コード進行などを前提とせずに学習を行った結果ですが、Gospel, deep house, 中国語の歌など異なる特徴を持ったジャンル、あるいはギターのディストーション、特定の音の高さやコード進行、音色などの要素が区別されているようです。

近似最近傍探索に関してはgensimの作者Radim Řehůřekさんによる解説とコードが参考になります。
http://radimrehurek.com/2013/11/performance-shootout-of-nearest-neighbours-intro/

和音進行解析のための語彙フリー無限グラムモデル
http://staff.aist.go.jp/k.yoshii/slides/sigmus-2011-yoshii-slides.pdf

音楽情報科学研究会 音学シンポジウム
http://www.sigmus.jp/

メル周波数ケプストラム係数という特徴量をつかって類似楽曲の検索を行えるそうです。
http://aidiary.hatenablog.com/entry/20121014/1350211413

A topic model for melodic sequences
http://icml.cc/2012/papers/585.pdf

Topology of Musical Data (persistent homologyの手法でのMIDIデータの解析)
http://jp.arxiv.org/abs/1307.1201

その他ありとあらゆる手法(ノンパラメトリックモデル等特に難しそうな手法)が試されていますが、現時点で画像認識や音声認識でのようにニューラルネットモデルが席巻しているみたいな話は聴いたことがないのですが、専門家の方的にはどうなのでしょうか。
以前から複数の方が日本語で論文、学会、研究会のまとめをされていたのですが、非公開になってしまったものもあり、あまり把握できていません。

私のブックマーク「音楽情報処理」

[http://ongacrest.jp/symposium2014:title=OngaCRESTシンポジウム2014
音楽情報処理研究が切り拓く未来を探る]

感想

音楽情報処理は情報処理と同じくらい古い歴史を持っているらしく恐れ多いです。

*1:BPTTに関しては これもある意味Deep Learning,Recurrent Neural Network Language Modelの話 で詳しく説明されています。

*2:参考論文 http://www.icml-2011.org/papers/532_icmlpaper.pdf

*3:CG法の部分はGPUに向いていなさそうな為か、pure pythonで実装されています。またgithubの説明によるとCG法での反復を多くしないと遅いらしいです

*4:この過程で特にPython2.*系では日本語ファイル名の扱いに難があるようです