ゆるゆる再開
実験その2では波形データをちゃんとした前処理もせず、むりやり「学習」してみました。(入力データは各音、12800サンプルの固定の長さにしている)
入力した音の波形データをそのまま自己符号化器にかけているだけなので、「学習」といえるかどうか疑問を持たれる方もいると思いますが、(うまくいくかどうかは別にして)「学習」としてとらえています。
実験2では以下のことを確認しました。
「ノイズは多い(かなりひどい)ものの、それなりの周波数特性の再現はできる(もしくはその「きざし」がある)」
「学習(復号)のゼロポイントがずれるのは、入力(学習)データでそのような(ゼロポイントがずれた)データが多数あるためである。」
「PDFで結果をレポートをするとき、(PDFに)音を乗せることができる」(実験:その2)に音の出るPDFを貼りましたが、同じものをここにも貼っておきます。
Acrobat ReaderかFoxitReaderでないと、音がでないかもしれません。
今回の実験ポイント
ゼロポイントがずれたデータの学習はもう少し工夫が必要だと思います。この部分は先送りして、この(実験:2.1)では継続として、以下の2点+1について行う予定です。
・ゼロポイントがずれない、アコースティックな楽器のみを学習する。
こんな波形は学習対象外にします。 |
・PythonからマルチメディアPDFの直接作成方法があるか確認する(AcrobatのAPIを使えばできるのは分かっていますが、高くて買えません。)
・音を学習する「フレーム」を細分化する必要性を感じています。フレームを細分化してどうなるかできたら実験します。(フレームポイントを可変にするか、固定にするか思案中です)
仮説/予想
・もうすこしすっきりした音の再現ができると考えます。
・マルチメディアPDFの構造はかなり複雑なので、仕様書を読み切れない、またはコーディングするスキルが不足する予感がします。
実験結果
中盤ですが、いろいろうまくいっていません。
・シンセサイザー系の音を省いて学習したため?か、バリエーションが逆に乏しくなったのか?一層うまく学習しなくなっている感じです。(何を入力してもにたようなノイズしか再生しない(かすかに原音っぽくきこえるものもある程度))
・重みWについては、MNISTのように局所性のある(ある部分だけに注目したかのような)フイルタを期待しているが、一向にできる気配がありません。(音の場合は時間的な局所フィルタで理想的にはウェーブレット(もしくはガボールフィルタ様)のような形(時間的フィルタを含む形)を期待しています。)ただし、MNISTでも条件によってはまったく局所性をもたないのに、ちゃんと元の図形を再現できるケースも多かったので必須条件ではないと考えています。
・波形がどうしてもプラス方向にずれて、マイナス方向の波形はリミッターがかかったかのような形になります。波形が故意に崩れたような形になるのは学習データのせいだけではなかったようです。
・使用している自己符号化器は、(意図せず)細部調整によりMNISTの学習に最適化している部分があるのかもしれません。昨年作成した自己符号化器のロジックは、人気がでて大きくなっていった温泉旅館のように複雑怪奇になっている部分があり(よく言えば生物学的進化様)一度サウンド用(もしくは汎用)にフルスクラッチしたほうがよいかもしれません。
考察
考えた末、今一度自己符号化器をコーディングすることにしました。
この実験は雨天順延Suspended、じゃなかった、一時中断します。
新しいプログラムができたら、また戻ってきます。たぶん実験その2.2にします。
では、また。
蛇足にして実は本編
ほけきよ@プロクラシスト様に「チャンネル人工知能」様の存在を教えていただきました。どうも有難うございます。
「チャンネル人工知能」様は、ボクが目指す「youtuber」の目標そのものになってしまいました。話題の目のつけどころ、実験のポイント、演出、技術、オチ、どれも一流でございます。
すぐには手をだせませんが、ボクにとって「物理演算エンジン」が必須科目であることを理解しました。
3D系が得意な助手がいないので、誰かスカウトしてみます。おそらくは自分でやることになる気がします。3Dまで手を広げるとどれだけ時間があっても足りない感じですが、「物理演算エンジン(で計算できる空間)」という実験室(空間)を使えるようになるために、「2~3年の時間をかけてでも」マスターしたいです。いよいよグラフィックカードがないとどうにもならない気がしてきました。NVIDIA / voltaは一般用途版でも半精度の倍速計算できるようにならないかな~。
フリーでやるとなると、Unity(ユーザインタフェースとして)+ bullet(物理エンジンとして)+ Blender(モデリング・レンダリングエンジンとして) くらいかなと思います。これと c++ の入門を(ブログネタではなく)来年の目標にしたいです。