先の9月4日に行いました。200名を超える方にご参加いただきました。前回のブログの記事で告知した技術解説を(事後になってしまいましたが)書きます。実行委員会DJは何をしているか...まず前提からスタートしましょう.DJのタスクには大きく分けて3つがあると思います。(ミックス)この辺のことは漫画のとんかつDJアゲ太郎(個人的に大好きです)とか読むと、大袈裟なくらいよく書かれてます。(DJといってもスクラッチなどの技を競うバトルDJから、ラウンジDJなどいろいろなスタイルがあるので、ここに書いているのは大雑把な議論なのはご承知ください)「2045」ではこれまでのイベントで1から3のそれぞれにアプローチしてきました。過去のDJのプレイリスト・ログの巨大なグラフ構造の解析による選曲(2)などです。LOOPSでは、主に2と3にアップデートを加えました。大きく違うのはいままで音楽データとDJソフトウェアを使ってやっていたミックスを、実際のレコードとターンテーブルを使ったやり方に変更した点です(3)。ソフトウァアを使うとすぐにできることをあえて、外部化させた理由は、人とAIの「かけあい」、共同作業という理念をより明確にするためです(前回書いた通り)。(2)の選曲に関しても、楽曲がどう使われきてかというログのデータではなく、曲自体のオーディオのデータの解析を選曲に使うように変更しました。現時点での選曲方法です。etc)を持つ曲でも聞いた時の印象が大きく異なるのはいうまでもありません。そこには曲の構成や楽器の編成などさまざまな要素が関与しています。人はそうした複雑な要素を聞き分けて、好き、嫌いあるいは似ている、似ていないといった判断を瞬時にしているわけです。言い換えれば、人間は音の物理的な特性を「印象量」にマッピングする仕組みを持っているわけです。Learningの仕組みを利用しています。ニューラルネットワークの「学習」には正解のデータ(教師データ)が必要になるわけですが、今回は「ジャンル分け」をタスクとして、教師データを用意しました。人はある曲を聞いた時に、あ、これはジャズだ、クラシックだ、ロックだという具合に音からジャンルを(なんとなく)推定することができます。いうことです(もちろん、ジャンル分けというのは相対的なものですし、絶対的なジャンルわけというのは存在しませんが、音の印象についてある程度みなが合意できる正解があるという意味でジャンル分けというタスクを選びました)。Choi仕組み的には楽曲のスペクトログラム(周波数特性-時間のグラフ)を画像として、画像の分類器を学習したと考えていただければ概ね間違いないです。RGBの3つの平面がある画像とはちがい、2次元の平面が一つである点、また聴覚特性にあわせるために周波数軸方向の扱いには留意が必要なこと(Constant-Qなども試しましたがmel周波数が一番精度が上がりました)などが違います。畳み込むものまでいろいろな手法があり、それぞれ試してみました(結果的にそこでは有意な差は生まれませんでした)。低いのですが、ランダムに選択するなら、約2割のはずですから、正答率が2倍強になったことになります。して学習した分類器の一番上の層(どのジャンルかを決める10個の出力)をとっぱらって、2番目の層の出力(ここでは1024次元のベクトル)を、楽曲の特徴を表すベクトルとして、類似度を計算します。あとは次元削減してt-SNEで3次元にマッピングするといったことをやってます。これも詳しい説明が必要ですね。DJ(主にハウスやテクノのような四つ打ちのDJ)が避けて通れないのが、曲のテンポとリズムを合わせてスムーズに曲を繋いでいくという技術の習得です。レコードを使ってテンポを合わせるためには、DJはレコードの再生速度を操作します。再生速度を変えると、当然再生される音の高さ(ピッチ)もかわるので、この操作のことをDJは「ピッチ合わせ」とも呼びます。二つの曲のリズムやテンポがきっちりあうと、あたかももともと一つの曲であったかのような、あるいはもともとの曲にはなかった新しいグルーヴが生まれる、それがこういう四つ打ちのDJの醍醐味だったりします。一方でテンポがずれていると悲惨なことになります。僕も大学生の頃に狭い寮の部屋で独りひたすら練習してました。(すいませんでした!)ターンテーブルは物理的に回転しているものですから、再生速度をスライダーで変えたからといって、即座に速度がその速度になるわけではありません(慣性があります)。徐々に変化していくわけですが、その変化の速度も機種によって違ったりします(トルクの違い)。DJは、そうした違いを体で覚えつつ、すこしずつ再生速度をかえてテンポを合わせていきます。テンポがあうだけではだめでキックが入るタイミングを合わせるために(位相)、レコードのふちをこすってすこし遅らせたり、逆にちょっと先に送ったりといったこともしてます。思ったのがそもそもスタートです。PSTトップダウンにルールを決めるのではなく、AIが試行錯誤を繰り返していく中で、徐々にミックスを覚えていくといったかたちが理想的です。Q-Network)の仕組みを利用しました。Q学習(Q-Learning)という強化学習の一種にDeepな(今のスタンダードからすると浅いですが)ニューラルネットワークをつかったというものです。詳細は省略しますが、AIはまず「環境」を観測した上で、取りうる行動のうちから「なんらかの決まり」に則って次の「行動」を決めます。その行動をとることによって、AIは「報酬」を得ます。いう環境の状態で、どう振る舞うとどれくらいの報酬が返ってくるのかを学習し、それに基づいて返ってくる報酬が最大になるように次の行動を決めていきます。これが強化学習の大まかな枠組みです。Learningを利用するというのが、DQNになります。今回やりたいことでいうと、もともとかかっている曲のビートと新しくかけようとしている曲のビート(とそのずれ)が環境、テンポを上下する(up/down)、レコードのふちを触って遅くする(pull)、すこし指で送る(nudgeとそれぞれ呼ぶことにします)が行動。行動の結果、テンポとリズムがどのくらいあっているかが報酬になります。このDQNの学習を実際のレコードとターンテーブルを使ってやりました。肝心のターンテーブルの操作の自動化にはMIDIに対応したVestaxのPDX-3000というターンテーブルを使っています。PDX-3000はMIDIを送ることでテンポを変えることができるという優れもののターンテーブルです。テンポとリズムが合っている・合っていない度合いをどう定量的に評価するか、ほんとにいろんな試行錯誤がありました。その辺、エントロピーと情報ゲインの考え方を利用して、規則的にずれているものをランダムにずれているものよりも高い評価を与えるようにしました。PDTこうして作った仕組みでターンテーブルでひたすら学習させました。キックだけが延々ループするレコードをたまたま見つけて(ロックドグルーブ)からは学習が進みました。いうところまでは到達できませんでした。選曲用のConvNetの学習には、ダンスミュージック配信サイト、wasabeatさんのジャンルタグがついた楽曲サンプルデータを利用させていただきました。http://developers.wasabeat.comまたConvNetの実装はQosmoで3月までインターンをしていた福井くんが基本的なシステムを作ってます。クラスタリングのビジュアライズ.実装にあたっては以上の方々にお世話になりました!ありがとうございました。