「lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207
TRANSCRIPT
+
DeepLearning初心者が、Titan& LSTMで音楽を作ってみた!坂井美帆
2016年 2月 7日(日)
全脳アーキテクチャー若手の会 第 12回勉強会カジュアルトーク
+自己紹介坂井美帆
全脳アーキテクチャー若手の会 発起人&副代表 某メーカー先月やめて、今はドワンゴ AIラボ 学生時代の専攻は機械学習理論(クラスタリング) DeepLearning歴1ヶ月程、初心者
趣味 音楽あさり(ゲーム音楽、アイリッシュ系音楽、民族調音楽、ボカロ)
割とマイナー・・ 技術の勉強したい&試したい
+NvidiaTITAN買いました。大晦日に自作 PCを組み立てました
何か試したい・・!
ちょっと挙動不審・・
+NvidiaTITAN買いました。大晦日に自作 PCを組み立てました
そうだ、アイリッシュ音楽を作ってみよう!!
ちょっと挙動不審・・
+今回の目標TITAN& DeepLearningの技術を折角だから試したい!
実際に、何がどこまで出来るのか、体感したい何か実際にモノを作りたい!
『 DeepLearning初心者が、Titan & LSTM( DeepLearningの技術)を使って音楽生成を試してみる!』
+音楽生成の動向参考にした記事
Andrej Karpathy blog(スタンフォード大の人)
音楽データの自動生成の最近の研究 LSTMでブルース・ジャズを生成( Douglas Eck, Jurgen ¨ Schmidhuber, 2007)
A First Look at Music Composition using LSTM Recurrent Neural Networks
RNNで、音楽生成 (Kratarth Goel, Raunaq Vohra, J.K. Sahoo,2014) Polyphonic Music Generation by Modeling Temporal Dependencies Using
a RNN-DBN
多くはないけれど、それなりに情報がある!LSTM/ RNNを使うと良さそう。
+LSTM ( Long Short Term Memory)とは時系列データ(音声、文章、映像等)をニューラルネットワークの 枠組みで扱えるようにしたもの 1995年に登場した RNN( Recurrent Neural Network)の拡張モデル
既存の RNNに対して、時系列データの長期依存の問題に対応出来るようにしたもの
インプットの文字に対して、次の文字を予測する。
参考: Andrew Karpath Blog ( http://karpathy.github.io/2015/05/21/rnn-effectiveness/)
時系列データ(文字の並び)
従来の NNと異なり、前時間の隠れ層を再帰的に学習することで時系列データに対応している
<基本 RNNモデル>
+実験概要実験概要
音楽データから、 LSTMを用いて自動音楽生成モデルを作成する① 音楽の書き方を自動で学習すること( ABC記譜法:後述)② 音楽のパターンを学習すること
使用する音楽データ 【実験①】メロディライン(1つの音の連続) → 難易度:簡単 【実験②】伴奏付き(2つの音の場合もあり → 難易度:中 【実験③】マイ・コレクションMIDIデータ → 難易度:高
※ 実験①、実験②のデータは後述の ABCノーテーションデータベースから
+実験手順実験手順
音楽はABC記譜法(後述)という形式を活用する
使用ライブラリ Karpathy/ char-rnn (https://github.com/karpathy/char-rnn)
MIDIデータ ABCノーテーションデータ②LSTMでモデル学習
③モデルから自動生成 ④MIDI変換 ♪
①学習用の音楽データ準備テキスト モデル
テキスト
変換
+音楽の表現方法: ABC記譜法ABC記譜法の記述( http://abcnotation.com/)
テキスト情報で、音楽情報(メタ情報・曲)を簡単に表現出来る
ABCノーテーションデータベース ヨーロッパの民族系の曲が豊富にある 単純にテキストデータのため、演奏する際はコンバータが必要
X:1 → 曲の番号T:sooranbushi → タイトルM:2/4 → 4分の2拍子L:1/8 → 1文字の長さを8分音符とするK:F → 調が Fメジャー、音階C2 DF | A2 GF | A2 GF | G2 FC | D2 FC | D2 D2 | z2 z2 ||zG AA | GA AA | GA AA | GF D2 | zA, CA, | CD GF | zG AF | DC FD | D z CC |DF A2| A3 c | G F2 C | D2 D2 | D2 z2||
・DCEFGとドレミファソの音を指す・小文字は1オクターブ高い・|は小説の区切り↑
メタ情報曲
+実験結果への判断軸① ABC記譜法を自動で学ぶこと
定義された形でテキストが自動生成されない限り変換が出来ない
② 自動生成された音楽が、音楽として成り立つ事 無音状態が長く続いたり、不協和音になってしまわないようにする
③ 音楽が良い音楽であること 良い音楽の判断自体は難しいけれど・・ → 評価軸を用意?(今回はなし)
難易度高い
+LSTMモデルのパラメータ設定モデル学習時のパラメータ設定
Rnn_size( 128) Num_layers(2) Learning_date( 2e-3) Dropout( 0) Seq_length( 50) Train_frac( 0.95) Val_frac( 0.05) Grad_clip( 5) Gpuid(1): GPU(1)/ CPU(−1)
楽曲生成時のパラメータ設定 prime_text Temparature( 1) : →0.8に変更
+実験①:簡単なメロディライン入力データ&簡単な再生
386 曲、 97KBX:2T:Alice’sZ: id:dc-reel-2M:CL:1/8K:E MinorD|EGBG AGED|E2GE DEB,D|EGBG A2Bd|eBdB AGED|!EGBG AGED|E2GE DEB,D|DB,A,B, DEFA|BFAF FEE:|!K:G MajorF|G2DB, DGBG|A2EC EcBA|G2DB, DGBG|AcBA AGGF|!G2DB, DGBG|A2EC EcBA|G2DB, DGBG|AcBA AGG:|!
X:3T:Anderson’sZ: id:dc-reel-3M:CL:1/8K:D MajorB|ABdf efdB|AFF2 EDEF|ABdf efdf|afef d3:|!f|a2fa bafa|a2fd edBd|a2fa bafb|afef defg|!a2fa bafa|a2fd edBd|AFF2 ABdf|afef d3|]!
X:4
基本的な曲の構成全ての楽曲が1テキストに入力されているXは連番2曲目
3曲目
+実験①結果:簡単なメロディラインX:6K:FiondinZ: id:dc-reel-176M:CL:1/8K:G Majorgf|gBB2 GBB2|dBAG BGEG|BGAB cege|dBAc BGG2|!dBB2 GBAB|GBB2 GEEG|BGED EA,B,|A,B,A, B,A,DE|!DGF2 GFG2|BdeB dBed|e3A B3A|Bdeg fdd:|!e|dBB2 gBAB|G2BG dGBd|gfdB ABGB|AGFA EGED|![2 fgaf gedf|gdBG AGEG|BddB edce|dBcA BGG:|!
X:150T:Hongy Moos of in ConiagZ: id:dc-reel-290M:CL:1/8K:A DorianA2EA cdec|dBGB AEGF|EAcA Bdgf|eaa^g aba=g|!e=fed cAA2|gedc BdcB|AEcE dEcd|ecAG EAA2:|!a2ea c'aea|g2dg bgdg|aged cded|cABG EAA2|!a2ea c'aea|gage dBGB|ABcd eaaf|gedg eAA2:|!
複数の曲が、1つのテキストファイルとして出力される
1曲目
2曲目
:
・メタ情報を書き出している・数字情報といったパターンを覚えている・タイトルの自動生成(文法的には適切に見える、意味は変らしい)
+実験①楽譜にしてみた
+実験②伴奏付きデータ入力データ&再生
340 曲 ,130KB
X: 1T:A and D% Nottingham Music DatabaseS:EFM:4/4K:AM:6/8P:Af|"A"ecc c2f|"A"ecc c2f|"A"ecc c2f|"Bm"BcB "E7"B2f|"A"ecc c2f|"A"ecc c2c/2d/2|"D"efe "E7"dcB| [1"A"Ace a2:| [2"A"Ace ag=g||\K:DP:B"D"f2f Fdd|"D"AFA f2e/2f/2|"G"g2g ecd|"Em"efd "A7"cBA|"D"f^ef dcd|"D"AFA f=ef|"G"gfg "A7"ABc |1"D"d3 d2e:|2"D"d3 d2||
X: 2T:Abacus% Nottingham Music DatabaseS:By Hugh Barwell, via Phil RoweM:6/8K:G"G"g2g B^AB|d2d G3|"Em"GAB "Am"A2A|"D7"ABc "G"BAG|"G"g2g B^AB|d2d G2G|"Em"GAB "Am"A2G|"D7"FGA "G"G3::"D7"A^GA DFA|"G"B^AB G3|"A7"^c=c^c Ace|"D7"fef def|"G"g2g de=f|"E7"e2e Bcd|"Am"c2c "D7"Adc| [1"G"B2A G3:| [2"G"B2A G2F||"Em"E2E G2G|B2B e2e|"Am"c2A "B7"FBA|"Em"G2F E3|"Em"EFG "Am"ABc|"B7"B^c^d "Em"e2e|"F#7"f2f f2e|"B7"^def BAF|"Em"E2E G2G|B2B e2e|"Am"c2A "B7"FBA|"Em"G2F E3|"Em"EFG "Am"ABc|"B7"B^c^d "Em"e2e|"F#7"f2e "B7"^def |[1"Em"e3 "D7"d3:|[2"Em"e3 "E7"e3||
書き方がより複雑な データ・ [ ]→ 和音・%補足情報・ S:作曲者情報
+実験②結果/伴奏付き得られた結果&再生X: 54T:Cackiantin's Brce% Nottingham Music DatabaseS:Bob McQuillen Manch 1976, via Phil RoweM:6/8K:D"A7"d3 |"D"f2f Aff|"A7"ecA Ade|"D"f2f fed|"D"d2F B2A|"D"d2e d2d|"G"BAB dBd|"A"e2e edc|"D"d3 -dBA|"D"faf "A7"efe|"D"fgf "A"ecA|"Em"B2G "A"A2:|P:BA|"D"d2f a2f|"G"b2b "D"a2f|"A"e2e ABc|"Bm"B2B "E7"B2d|"A7"cBc ABc|"D"dfe "G"dcB|"D"AFD "A"G2e|"D"faf "A7"e2A|"D"fed Aed|"G"B2d "A"e2c|"Em"Bcd "A7"cBc|"D"d3 -d2||
X: 33T:The Donny Charlberot% Nottingham Music DatabaseS:Pauline Wilson, via Phil RoweM:6/8K:DA|"D"ddf "A7"ecA|"G"BdB "D"AFA|"G"Bcd "A7"efg|"D"fdd d2::A|"D"FAF "G"CEG|"D"FGA "G"BAB|"A"ABc "D"ded|"A7"cdc "A"BAG:"D"FAd fed|"A7"cBA ABc|"D"dfe "G"dcB|"D"ABA FAA|"D"A2A dAG|"G"dBd "A"ecA|"D"d3 d2:|
割と伴奏情報も正確に出力している
+実験③マイ・コレクションデータ
さすがに、色々と無理だった (´ ・ω:;.:…
ほとんどの音楽を ABC記譜法で変換出来なかった。(古いため??)ABC記譜法自体、複数の音を表現するのに不向きなため、別のデータ表現を検討する必要性あり
+実験結果まとめ実験結果まとめ
簡単なメロディラインなら自動生成も夢じゃない ある程度パターンが決まっていれば、簡単な伴奏付きレベルも可能 通常の楽曲レベルを得るにはデータ量&データ形式の検討が必要
曲数 ABCファイル容量
生成された曲数
ABC記法の学習
音楽の生成レベル
良い音楽かどうか
実験① 386 曲 97kb 34 曲 ◎ ◯ ◯
実験② 340 曲 130kb 28 曲 ◎ △ △
実験③ 138 曲 10kb(変換出来なかったため)
1 曲 ☓ ☓ ☓
+感想① LSTMは結構凄いABC記譜法のパターンを自動で学習した
数字情報、文字列情報、文法情報??まで学習している タイトルまで自動生成している
曲らしいものを自動で学習した
+感想①他 LSTM実験例メッセージ解析にも使えそうなのでついでにやってみた ( Skype ,Facebook )
単純にテキストデータをインプットするだけで出来るので簡単 URLも自動生成したりする
12/9From:Suzuki
http://tabelog.com/en/tokyo/A13030130303130307Sent on:
12/14From:Suzuki
butt sy ftther autin hacle.Sent on:
日付 存在しない URL ・・(でもそれらしい)ユーザー名
送信情報 自分自身の対話ロボットを作ることも恐らく可能(ただ、結構恥ずかしい)
+感想② TITAN 速い!GPU ・ CPU 利用の場合の時間を比較
1回の試行時間の平均を各実験ごとに算出したCPUで学習 GPUで学習 CPU学習時間
/ GPU学習時間
実験① 1.3322 秒 0.0903 秒 14.75
実験② 1.3426 秒 0.0911 秒 14.73
実験③ 1.5516 秒 0.0701 秒 22.13
GPUの学習速度は、 CPUの 15 倍〜 20程。1時間半の学習が5分程度で終わると考えることが出来る
+まとめ簡単な曲であれば LSTMで学習が出来た
楽曲だけでなく、 ABC記法や、タイトル生成までパターンを学習出来た複雑な曲を扱うには別の方法が必要そう
ABC記法は恐らく不向き メロディラインの学習、コード進行の学習
評価方法??TITANすごい、初心者にオススメ!
ありがとうございました!!