Suzukiくんが主体となったインスタレーションに、主にサウンド生成のアルゴリズムの部分で参加しました。入力したデータをそのまま出力することにどういう意味があるのかと思われると思いますが、入力したデータをより少ない次元で表現することを学ぶことで、データの中に隠れた構造を学習することが期待できます。wikipediaより)autoencoderをMNISTに応用(http://blog.keras.io/より)よくあるMNISTのような数字の認識を思い浮かべてください。28ピクセル(784画素)の白黒の画素で表現された数字を入力として、32次元のベクトル(隠れ層)を通して、同じく784画素の白黒画素を出力するモデルになっています。縦線の角度がバラバラでも、ある一定の範囲内であれば、人は1を1として認識できますよね。同様に、「3」にはさまざまな3があったとしても「3らしさ」があるはずです。あるためのエッセンス、1らしさ、2らしさが凝縮されていると言えます。autoencoderと呼ばれます)。ある種の平衡状態を保つイメージが、振り子のバランスと繰り返す動きのイメージにぴったりくるように思いました。そこでAutoEncoderを使おうと思いついたわけです。今回、シンプルなAutoencoderをまずはMIDIデータで学習しました。Yuriくんの方で用意したメロディーのMIDIをもとに、時系列データを対象にしたAutoencoder(sequence2sequenceモデル)を学習します。実際に再生されている音からメロディーを抽出し、次のステップのAutoencoderの入力とします。前述のようにAutoencoderを使うことで、理論的には入力と出力のループをひたすら繰り返すことになるはずですが、スピーカーとマイク、メロディー抽出のアルゴリズムを利用することで、環境ノイズという外的な要因が導入されます。今回はゆらぎを明示的に導入するトリガーとして、「観客の数」という要素を入れました。人数によって、Autoencoderの隠れ層のベクトルにランダムな(小さな)ベクトルを足します。これによって、人が多いほど出力されるメロディーが入力からずれていく=メロディーが揺らぐことになります。(このモデルの詳細についてもどこかで時間を作って書きたいと思います)会場に安価なwebカメラを設置。(誰もいないところに人影が見えているのはそのせいです)、音楽的な展開をゆるやかに制御するという意味では十分でした。以上のシステムを概念図にまとめたのが次の図です。下は会場での仕組みです。ミラノの歴史ある教会が展示会場ということもあり、荘厳な雰囲気のインスタレーションに仕上がったと聞いてます。書いたのは、実は別のプロジェクトの締め切りと重なったこともあり、会場に自分自身が行けなかったのです(涙)dockerでpythonのスクリプトが動く環境を作ってテストし、会場側でpullして使ってもらうというスタイルでの設営でしたが、現地の皆さんの協力でなんとか実施にこぎつけました。Shimadaさんに大変お世話になりました!ありがとうございました。今回のインスタレーションで使っている声は、コーラスの国際コンクールで金賞の受賞歴があるQosmoの細井が担当しています。Kunimotoさんにお願いしました。僕にとってもよい勉強になりました。