「lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

24
+ DeepLearning 初初初初Titan LSTM 初初初初初初初初初初初初初 2016 年 2 年 7 年 年年 () 年年年年年年年年年年年年年年 年 12 年年年年年年年年年年年年

Upload: miho-sakai

Post on 15-Apr-2017

840 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+

DeepLearning初心者が、Titan& LSTMで音楽を作ってみた!坂井美帆

2016年 2月 7日(日)

全脳アーキテクチャー若手の会 第 12回勉強会カジュアルトーク

Page 2: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+自己紹介坂井美帆

全脳アーキテクチャー若手の会 発起人&副代表 某メーカー先月やめて、今はドワンゴ AIラボ 学生時代の専攻は機械学習理論(クラスタリング) DeepLearning歴1ヶ月程、初心者

趣味 音楽あさり(ゲーム音楽、アイリッシュ系音楽、民族調音楽、ボカロ)

割とマイナー・・ 技術の勉強したい&試したい

Page 3: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+NvidiaTITAN買いました。大晦日に自作 PCを組み立てました

何か試したい・・!

ちょっと挙動不審・・

Page 4: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+NvidiaTITAN買いました。大晦日に自作 PCを組み立てました

そうだ、アイリッシュ音楽を作ってみよう!!

ちょっと挙動不審・・

Page 5: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+今回の目標TITAN& DeepLearningの技術を折角だから試したい!

実際に、何がどこまで出来るのか、体感したい何か実際にモノを作りたい!

『 DeepLearning初心者が、Titan & LSTM( DeepLearningの技術)を使って音楽生成を試してみる!』

Page 6: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+音楽生成の動向参考にした記事

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を使うと良さそう。

Page 7: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+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モデル>

Page 8: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+実験概要実験概要

音楽データから、 LSTMを用いて自動音楽生成モデルを作成する① 音楽の書き方を自動で学習すること( ABC記譜法:後述)② 音楽のパターンを学習すること

使用する音楽データ 【実験①】メロディライン(1つの音の連続) → 難易度:簡単 【実験②】伴奏付き(2つの音の場合もあり   → 難易度:中 【実験③】マイ・コレクションMIDIデータ  → 難易度:高

※ 実験①、実験②のデータは後述の ABCノーテーションデータベースから

Page 9: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+実験手順実験手順

音楽はABC記譜法(後述)という形式を活用する

使用ライブラリ Karpathy/ char-rnn (https://github.com/karpathy/char-rnn)

MIDIデータ ABCノーテーションデータ②LSTMでモデル学習

③モデルから自動生成 ④MIDI変換 ♪

①学習用の音楽データ準備テキスト モデル

テキスト

変換

Page 10: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+音楽の表現方法: 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オクターブ高い・|は小説の区切り↑

メタ情報曲

Page 11: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+実験結果への判断軸① ABC記譜法を自動で学ぶこと

定義された形でテキストが自動生成されない限り変換が出来ない

② 自動生成された音楽が、音楽として成り立つ事 無音状態が長く続いたり、不協和音になってしまわないようにする

③ 音楽が良い音楽であること 良い音楽の判断自体は難しいけれど・・ → 評価軸を用意?(今回はなし)

難易度高い

Page 12: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+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に変更

Page 13: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+実験①:簡単なメロディライン入力データ&簡単な再生

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曲目

Page 14: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+実験①結果:簡単なメロディライン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曲目

:

・メタ情報を書き出している・数字情報といったパターンを覚えている・タイトルの自動生成(文法的には適切に見える、意味は変らしい)

Page 15: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+実験①楽譜にしてみた

Page 16: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+実験②伴奏付きデータ入力データ&再生

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:作曲者情報

Page 17: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+実験②結果/伴奏付き得られた結果&再生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:|

割と伴奏情報も正確に出力している

Page 18: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+実験③マイ・コレクションデータ

さすがに、色々と無理だった (´ ・ω:;.:…

ほとんどの音楽を ABC記譜法で変換出来なかった。(古いため??)ABC記譜法自体、複数の音を表現するのに不向きなため、別のデータ表現を検討する必要性あり

Page 19: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+実験結果まとめ実験結果まとめ

簡単なメロディラインなら自動生成も夢じゃない ある程度パターンが決まっていれば、簡単な伴奏付きレベルも可能 通常の楽曲レベルを得るにはデータ量&データ形式の検討が必要

曲数 ABCファイル容量

生成された曲数

ABC記法の学習

音楽の生成レベル

良い音楽かどうか

実験① 386 曲 97kb 34 曲 ◎ ◯ ◯

実験② 340 曲 130kb 28 曲 ◎ △ △

実験③ 138 曲 10kb(変換出来なかったため)

1 曲 ☓ ☓ ☓

Page 20: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+感想① LSTMは結構凄いABC記譜法のパターンを自動で学習した

数字情報、文字列情報、文法情報??まで学習している タイトルまで自動生成している

曲らしいものを自動で学習した

Page 21: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+感想①他 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 ・・(でもそれらしい)ユーザー名

送信情報 自分自身の対話ロボットを作ることも恐らく可能(ただ、結構恥ずかしい)

Page 22: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+感想② 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分程度で終わると考えることが出来る

Page 23: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

+まとめ簡単な曲であれば LSTMで学習が出来た

楽曲だけでなく、 ABC記法や、タイトル生成までパターンを学習出来た複雑な曲を扱うには別の方法が必要そう

ABC記法は恐らく不向き メロディラインの学習、コード進行の学習

評価方法??TITANすごい、初心者にオススメ!

Page 24: 「Lstm&titanで音楽を作った」第12回カジュアルトーク会向け 20160207

ありがとうございました!!