2017年6月21日水曜日

作曲家の視点から人工知能の生徒たちに授業をしてみたよ

以前の記事→ 人工知能(Tensorflow Magenta)で作曲してみた

さて、今日は音楽講師になって、かわいい三人の人工知能の生徒たちに、音楽指導をしてみようと思います。

どんな作品が上がって来るでしょうか。。。。。。

[授業をはじめる!!]


「さあ、今日の授業は、メロディを続けて作ってみよう!!です。

まずメロディの一部を挙げるので、そこから曲の続きを作ってみよう。

課題曲は、どらえもんのテーマ曲!

『あんなこといいな〜できたらいいな〜、あんな夢こんな夢いっぱいあるけど〜』

のお馴染みの曲です。

その最初の部分「あんなこといいな」(ソードドーミラーミソー)を参考に、そこから曲の続きを作ってみましょう。」

---------------0.01秒後----------------

「おお、もうできたのね、さすが人工知能たちは、作曲が早い
こんだけ早いと、コーヒーを飲む暇もない。」

まずは生徒Aの作品から聞いてみよう。



「うーん、なんだこりゃ、まるでまとまりがないじゃないか。
『あんなこといいな』から先はまるで酔っ払いの千鳥足だ。」


生徒Bの作品



「ふむ。まあだいぶ良くはなっているな、『あんなこといいな』の繰り返しが増えて、メロディが覚えやすい。
ただ、少しシンプルすぎる感じがありますねえ。」


生徒Cの作品



「おお、かなりよくなっているね、エンディングの感じも出ているし!!!これを0.01秒で作ってしまうとは!さすが君は優秀な生徒だ!!」


[メロディのコツは繰り返し]


さて、というわけで、後の方の生徒になると、それぞれ、曲の「それっぽさ」がしっかりしてきたのがわかるでしょうか。

ですが、果たして、その違いはなんでしょう。。。??

音楽が得意な人ならもう気づいたかもしれません。この違いはざっくりといえば、「繰り返し」の扱いの違いになります

課題曲として与えられたドラえもんのテーマ曲の「あんなこといいな」の部分。

この部分はのリズムは付点8分音符でスキップする様にはねており、それが、「あんーな」「こーと」「いーな」と3つ繰り返すことで、「フレーズらしさ」、を作り出しています。

このリズムや、音形をいかに上手に繰り返し使うかが、メロディ作りのコツなのです。


その観点でいうと、生徒Aはフレーズにどうも統一性がなく、全く印象に残りません。

生徒Bは繰り返しが多く使われることで、かなり統一性が出てきましたね。
ただ、短い組み合わせすぎるので、ちょっと単純に感じるかもしれませんね。
(テクノミュージックなどにはむいているかも?)

生徒Cは一回「あんなこといいな」が入った後、そのリズムを受けて「EDECAG」と旋律が入り、その後また「あんなこといいな」の旋律に戻っています。

これは実際の人間の作曲でも非常によくみられるパターンです。

[3つのニューラルネットワークのモデルの違い]


今回の実験はgoogle magenta/tensorflowの提唱する Basic RNN, Loopback RNN, Attention RNNという3つのニューラルネットワークのモデルを使いました。

エンジニア方面からより詳しく知りたい方はこちらにソースコードがあります。(オープンソース)

それぞれのモデルは生徒A・B・Cに対応しています。

この3つは「繰り返し」の扱いが違うところが、キモになっています。

Basic RNN -- 生徒A


一番最初の生徒AはLSTM(Long short-term memory)を使った最もシンプルなモデルで基本となるものです。LSTMは主に自然言語解析の分野なんかでよく使われる、再帰型ニューラルネットワークの一部になります。

(たとえば、自然言語の世界では、「私は音楽が好きです」の文の様に「私」の後には「は」が来る可能性が高いですよね。同様に、「私が」と来る可能性も高いですね。でも、「私にゃ」、「私ば」なんていう文はほとんどないですよね。そういったことを予測するのに使用されます。)

繰り返しなどは考慮していない、あくまでもシンプルなモデル。

Lookback RNN  -- (生徒B)


小節の単位の中でのメロディパターンとある音の小節の中での「相対的な位置」を理解しながら、それを繰り返すかどうかを学習していく。通常のニューラルネットワークの場合は、それぞれのセルの中に学習した情報を格納していくのですが、それとは別に、1、ないし、2小節前の情報をインプットしていきます。

Attention RNN  -- 生徒C


Lookback RNNと同じく繰り返しを重要視しますが、1,2小節ではなく、より大きなまとまりで繰り返しを捉え、メロディを生成していく方法。


とこのようにそれぞれのモデルには特徴があります。
後の方に行くに従って、「繰り返し」の要素が、変わっていきそれらしさが変わって行くのです。
(LoopbackとAttentionのどっちが効果的かはケースバイケースでしょう)

[より音楽らしくなるためには]


繰り返しが入ったことで、随分と音楽らしくなりました。

あとは、コード進行やコード進行とは別の起承転結も考慮に入れたいところ。

音楽に精通した方なら、うなずけるところと思いますが、コードなどは、昔のAI(ルールベース)のAIなどで描くとシンプルに表すことができます。

そのため、ディープラーニングに適した分野かどうかは実は疑問が付くと思っています。

アートの分野では、ある程度、ディープラーニングとルールベースの組み合わせが必要になって来るのでしょうか、なんて思ってます。

(そもそもコード進行が音楽に必要か?なんて話もありますが)




2017年6月9日金曜日

Mac os X上のtensorflow GPU でImage not foundエラーが出る時

PCの計算量の多い時には必須のGPU

Mac os X(el captain 以降)で、tensorflowのGPU版を動かそうとすると、

image not found エラーになることがあります。


ImportError: dlopen(/Users/daichi/.pyenv/versions/3.5.2/lib/python3.5/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 10): Library not loaded: @rpath/libcublas.8.0.dylib
  Referenced from: /Users/daichi/.pyenv/versions/3.5.2/lib/python3.5/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so
  Reason: image not found


Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/install_sources#common_installation_problems

for some common reasons and solutions.  Include the entire stack trace
above this error message when asking for help.

これは環境変数 LD_LIBRARY_PATHかCUDA_HOMEが通ってない時に起こりがちですが、まずそれを確認します。通っていなければパスを通す。

(tensorflow) koala:tensorWorkspace daichi$ echo $LD_LIBRARY_PATH
/usr/local/cuda/lib:
(tensorflow) koala:tensorWorkspace daichi$ echo $CUDA_HOME
/usr/local/cuda

両方とも通っているのにエラーが出る時はSIPというセキュリティ関係のサービスが原因のことがあります。
こちらの記事を参考に停止しましょう。

GPUをオンにすると
筆者の場合は シンプルな画像分析で、615秒->383秒と90%高速化されました。
最新モデルだともっともっと早くなるでしょう。

name: GeForce GT 650M
major: 3 minor: 0 memoryClockRate (GHz) 0.9

# GPUなし場合
'start train with eval'
Epoch 1: ./data/data_batch_1.bin
Epoch 1: ./data/data_batch_2.bin
Epoch 1: ./data/data_batch_3.bin
Epoch 1: ./data/data_batch_4.bin
Epoch 1: ./data/data_batch_5.bin
epoch 1 duration = 615 sec, prediction = 0.359


#GPU ありの場合
Epoch 1: ./data/data_batch_1.bin
Epoch 1: ./data/data_batch_2.bin
Epoch 1: ./data/data_batch_3.bin
Epoch 1: ./data/data_batch_4.bin
Epoch 1: ./data/data_batch_5.bin

epoch 1 duration = 383 sec, prediction =  0.359



しかし新型Mac book proはなぜ、NvidiaじゃなくてAMDのGPUを積んだんだろうか。。。。

NSynth - Googleが生み出した人工知能シンセ!!

以前の記事でも触れた

人工知能(Tensorflow Magenta)で作曲してみた

にも関わりますが、Googleのプロジェクト magentaに新しいプロジェクト

NSynthが発表されてました。



普通のシンセサイザーといえば、発振器とサンプリングされたwave波形を使って音を合成していくものでした。

こちらは、ニューラルネットワークを使って、大量のデータから特徴量を抽出して、サウンドを作っていくのが特徴。





そして「特徴量を抽出」する方法が、ディープラーニングの肝なのですが、今回のシンセは同じく昨年googleが昨年開発した音声入出力技術のWaveNetがベースになっています。

サンプリング型のシンセサイザーだと、音がある程度以上(3秒以上)伸びると、波形が不自然になっり、単調になったりしやすかったですが、今回はそのあたりの「間」や「息遣い」なども、ある程度表現してくれるようです。

しかし、これをどう使ったらいいかというのは、まだまだ??の世界。
magentaの自動作曲と組み合わせるともっと面白い効果を生み出せるかもしれません。

本来人の脳を模倣するために生まれたニューラルネットワーク、いつしか人の脳を飛び越して、人類が聞いたことのないような音を生み出していってほしいですね。