クーの自由研究

マスターのかえるのクーは、弟子達の召喚術により新たな依り代を得てⅡ世として復活しました。

冬眠前のご挨拶にかえて

はじめに

「葉っぱの上にも3ヶ月」ですが、3ヶ月目に大きな壁があり、結局乗り越えられませんでした。今年の活動は中途半端な状態の実験もありますが、そろそろおしまいです。

今まで読んでいただいた皆さま、どうも有難うございました。

動機・息切れ

冬が近くなりボクの活動時期もそろそろ限界に近くなってきました。冬眠はカエルにとって命がけなのですが、来春生還してまた是非皆さまにお会いできることを望んでいます。

準備の状況や近況など

Adam実装で挫折したことは「自由研究(その9)」でお伝えした通りですが、その後、他の方の実装をみてもボクの実装が間違っていないことを確認できました。

np2lkoo.hatenablog.com

結局「初期値やパラメータはほとんどの場合このままでいい」というのを鵜呑みにしていたのが悪かったです。初期値も内部のパラメータも、ボクのプログラムにあうようにあわせなければなりませんでした。「デフォルト値で良好」ではない場合は確実に存在します!パラメータ調整によりAdamはめだたく(おもったように)動作できました。ボクの場合には学習係数αは小さすぎ、タイムステップtはあまりに細かく刻みすぎていました。この顛末やコードはブログに書く時間がないので来年にでも。。。

Adam以外のオプティマイザも、ネットにあったものを参考にして順次組み込みました。結局、「自己符号化器に組み込んでもそれほど劇的な効果はなかった」とだけ報告しておきます。(いい感じであることは確かです!:それ以前に手動で最適パラメータを求めていたので、あまり感激はなかっただけかも。)もっともオプティマイザは深層や多層スタックでこそ威力を発揮する(はずな)ので、中間層が単層の自己符号化器では劇的な効果はないのはもっともではあります。

サウンド方面ではボクのUSBオーディオインターフェースがLinux/Alsa対応でないことがわかったのでがっくりきています。機能に全く不足はないのですが、Alsa自体に対応していないことがとっても足かせになりそうなので、安く入手できるUSBオーディオパーツを検索しています。一旦サウンド方面から離れて、自己符号化器の調整を主体にしていますが、来年は実験素材をサウンドを主体にしたものにしていきたいです。(音声合成にも興味がわいてきており、「初音ミク」というソフトがとっても気になっています。初音ミクに歌っていただき、自己符号化器で学習させた「大好きなボーカリスト」のスペクトログラムを使ってモーフィングして。。。と悪だくみを構想中。「結局初音ミクがいちばんいいや」というオチは最初から見えている気もします。)

まとめ

忙しくなってからは実験はほとんどできなくなりましたが、本読みはずっとしています。始めたときは全くわからなかった「機械学習」もなんとなくですがイメージをもつことができました。このイメージを表現するのはとても難しいと思いますが、一つ一つの「ノード:ニューロン」がエントロピーの法則をとてもうまく利用して、ジブンのルールや目的で動作しているうちに、全体が目標動作をするようになっていく感覚はつかめてきました。「なぜ学習できるのか?」、から「どうして生命は神経ネットワークのシステムを獲得でき、それをここまで発展させることができているのか?:ニューロ進化のコアなしくみは一体何なのか?」に興味がシフトしてきています。将来はそんな(進化)実験もしたいと思っています。

また、中間層が1層(特徴を取り出す層を入れれば2層:入力も入れれば3層ですけど)のネットワークであっても学習について「ノード間に何等かの補正項をいれていけば、多層のような特徴抽出ができるのではないか?」という感覚もあります。(グリア細胞神経細胞に学習のための重要な情報を伝えているように思えてなりません。でなければ、量子力学的な重ね合わせに近いことをしているか、神経細胞には実はちょーのーりょくがあって(以下略))

機械学習としての数学的なアプローチのほかに、脳科学寄りのアプローチにもとても興味があります。性能のよいオブジェクト指向言語も探して勉強していきたいです。(流れに反してC++の勉強をしようかなぁ?もしくはJavaを勉強してHadoop力技作戦かなぁ?)

第2言語の学習について考えた件の報告雑記

(追記)C++習得は精神力がないと無理であることがよくわかりました。テンプレートとかは蛙類の理解の範囲を超えています。こんなのをつかいこなす人類には、どうやってもおいつけないかもしれないと思いました。でもJavaならわかりそうな気がしました。

(追記その2)pythonから入ったからかもしれませんが、オブジェクト指向は訳がわかりません。プログラムは、階層化構造をもち、段階的に抽象化されるべきだというのはとてもよく理解できます。また、メッセージパッシングの考え方は非常に優れていると思います。世の中はメッセージパッシングで機能している!と言われても違和感がないです(素粒子レベルのエネルギー伝達や人のコミュニケーション、宇宙規模の現象も「伝わる」部分はすべてメッセージパッシングとして理解できます。あらゆるものはメッセージでしか理解しあえない感覚はすごく新鮮です。誰かとなにかを「共有」しているなんて幻想なのかもしれません。)。でも、世の中はオブジェクト(データ+機能のパッケージ)でできているといわれると、そんなことはないだろう!といいたくなります。自動生成されるとはいえ、get/setなんてpythonしか知らないボクにとっては狂気の沙汰です。わかってくればこんな違和感はなくなるんでしょうが。。。

(追記その3)オブジェクト指向は「わかる」のではなく「そう思い込む」ことが大切なのだと、だんだんコツがわかってきました。最初の拒絶的な違和感はなくなりました。デザインパターンというものも勉強します。

(追記その4)rubyがいちばん美しいと思うのですが、今求めるのは「速度」なので、結局何がいいかわかりません。(速度ならC++なのはわかるのですが、どれだけサンプルソースを見ても頭にはいってきません。思考の転換が必要な言語なのだとわかりました。C++を選択するのはボクには難しいです。)pythonですら片言なのに、マルチリンガルには到底なれません。どれを第2言語にするかを決めて集中して勉強していきます!ちなみに第1言語はもちろん(成り行きではありますがラッキーなことに)pythonです。他の言語をみるにつけ、pythonは初心者にとっても優しい言語なのだと改めてわかりました。そして多分上級者にとっても、頼もしいのだとも思います。ああ、pythonが並列多重が簡単に書けて、メッセージパッシングが簡単にできるようにならないかなぁ。あ、そうですか。できるんですね。サンプルが少ないだけですね。でもガチなオブジェクト指向をしたいのなら、他の言語がよさげですね。オブジェクト指向で高速で、ボクでも理解できるものを、第2言語として探していきます。

(追記その5)Javaに傾きかけていましたが、行列(配列)の扱いがしっくりこないし、検索しても行列演算をしているものがとってもすくないです。。。Apache Commons MathとかJAMAがいいんでしょうが、ソース見てもピンとこないなぁ。。。 + とか * とか 直接つかいたいなぁ。でも諸先輩の配列の演算遅さやラッパに終始した苦労話を聞くとJavaはパスっぽいです。消去法でRubyなのかなぁ。速度はむちゃくちゃほしいんだけどなぁ。悩みはずっと続きます。

次期購入マシンを妄想したらあまりに現実離れして笑った件の報告

ボクのマシンはもともとPentium G620(2コア2スレッド 2.6GHz)でした。買った当時でCPUが6000円代でした。いわゆる自作マシンというモノです。今年になって、中古のCore i7 2700KというCPUをそこそこ安く買って動かしています。このCPUを買ってから、とっても処理が早くなり、ようやくDeepLearningのチュートリアルが「まともに」動くようになりました。でもすぐにメモリ不足になったので、最大に積める32GBまで増設して「いろいろ」動くようになりました。(DDR3の8Gは結構安くなっていたので、4枚を同時に買い直しました。おこずかいでも買えました!)普通にMNISTの実験プログラムを動かしている分にはまったく不足はないのですが、ノード数を増やして、ノードの変化をモニタリングするようにスナップをとりはじめるととたんにメモリ使用量が多くなってきました。

画像を56×56に拡張して、ノード数も2000超にしてモニタリング箇所を増やしただけで、32GBでも不足するケースがでてきました。「手書き文字」ではなく「一般的な画像処理」をおこなおうとすると、さらなるメモリが必要になりそうです。GPUがなくて高速に計算できなくても、CPUで地道に計算することは可能ですが、メモリはスワップアウトできないものだとどうしようもありません。

今のマシンは再来年までは使うつもりですが、今欲しいスペックのマシンを買ったらいくらぐらいするか興味本位に試算してみました。

メモリは今後実験したい内容から256GBどうしても欲しいのですが、検索すると事実上これだけ積めるボードは「ASUS Z10PE-D16 WS」ほぼ一択で、自動的にXeon E5 v4(またはv3)2個積み+16GBメモリを16枚させばよいことが分かりました。他にGPUも載せて、これらを安定動作させられる電源も購入し。。。

合計は(安めの構成で)50万円(税抜き)くらいになりました。ははは。(乾いた笑い)もちろん買える訳がありません(涙)。EccRegメモリはなぜにそんなに高いの?(号泣)

そもそもWindows10はProにしないと128GB以上のメモリを使えないようです。

そのためだけにWindows10Proにアップにするくらいなら、Linuxに乗りかえとなるでしょう。OSには全くこだわらないのですが、安定して安く構成でき、資源を自由にスケールできるものがあればそれでよいです。

この程度のマシンが10万円以下で買えるようになるのは5年後か、はたまた8年後でしょうか。(ちなみに、ボク自身は正確には今年生まれの1歳で、予定寿命は8歳といわれています。「ボクのマシン」は実は宿主のもので、価格は宿主が買ったときの価格です。)趣味の世界なので、気長に待ちながら遊んでいきます。

(追記)Xeonはとっても魅力的ですが、とても手がでないことがわかりました。価格的にLGA-2011V3(X99チップセット)の128GBのメモリ搭載機もむりポです。現実的に次期マシンは64GBとして、メモリスナップを極力データベースに逃がして計算していくようにしようと思います。もう少しの現行マシン(32GB)でも(次期)メモリバカ食い実験のやりようがないか検討します。

(追記2)メモリ問題は「メモリの解放」についてあまりにも注意を向けていないことが原因であることがわかりました。すぐに再利用の必要がないデータはピクルスやデータベースに逃がすなどして明示的に解放を促していけば(遅くなるにせよ)まだまだいけることがわかりました。

惑星ソラリス」が最高傑作である件の報告

みなさんが言っておられるので報告の必要もありませんが、「惑星ソラリス」は本当に最高の映画でした。

f:id:np2LKoo:20161120023815j:plain

ボクの蛙生で最高の映画であったことを報告します。

たぶんボクにとってはこの映画を超える映画は、この先にもないと思います。それほどすべてが素晴らしい映画でした!!

ブルーレイの評価をみて難解なのかな?と思っていましたが、逆にとてもシンプルで大丈夫でした。難解というより、このうえなく深いと思いました。

アンドレイ・タルコフスキー監督の他の作品もぜひみてみたくなりました。

同じくSF映画の「ストーカー」と「ノスタルジア」にとても興味があります。

でも今は、しばらくこの映画の余韻にひたっていたい気分です。

それではみなさん。おやすみなさい。