金曜日, 12月 08, 2017

2017年に勉強したこと

直接仕事に関わらない分野で、今年一番時間をかけたのは、数学。コンピュータを使った仕事をしているので、数学を「応用」する機会はあるが、応用ではなく純粋な数学がやりたくなった。高校時代は理系だったが、その後の人生で数学を深く学ぶことはなかった。プログラミングで数式を視覚化したり、幾何学的な図形を作りたいとは常々思っているけど、むしろ視覚化できない図形や空間を操作できる世界に可能性があるんじゃないかと思い始めた。こちら側に持ってくるのではなく、あちら側に飛び込もうという訳だ。

そのきっかけになったのは、高校数学のやり直しでもなく、雑学とも違うちょうどいい読み物を探していて、たまたま手に取った『数学する精神』だった。これを読んで、「自分みたいな人間でも数学をやっていいのだ」と思うことができた。

著者の加藤文元さんのことを調べていたら、新宿の朝日カルチャーセンターでの授業を見つけ、すぐに申し込んだ。カルチャーセンターって完全にノーマークだったけど、メディアで見かける人たちが思想的な講義を持ってたりして、新たな鉱脈を発見した感がある。

MATH POWER 2017」での宇宙際タイヒミューラー理論の解説も聴きに行った(宇宙際タイヒミューラー理論を理解しているのは世界で10人くらいで、加藤先生はその1人だそう)。この講義は観客も超満員で非常に熱気がこもっていて、新しい世界に触れることへの期待と知的興奮に満ちた、とても幸せな場だった。中高生でも分かるように解説するということで、数式もあまりでてこず、感覚的に掴めるようになっている。一部でバズった「たし算とかけ算の関係は複雑すぎてよくわからない!」「映像の中のパズルと現実世界のパズルのピースを合わせるイメージ」が気になった人は当日の動画をご覧いただきたい。とにかく整理されたプレゼンで、語り口も含めてその知性に惚れ惚れする。

いまは月に1回、先述のカルチャーセンターで加藤先生の代数幾何学の授業に出席している。途中で日程変更があり、全ての開講日が月の第4火曜になった際に「規則的になったという意味では、この変更は酷い変更ではないですよね?」と言ってて数学者っぽいと思った。生徒の平均年齢はおそらく60歳を超えているので、趣味としては早過ぎた。

代数幾何学の本は「入門」と書かれていても数学科の学部卒くらいの知識が必要なので、うかつに買うと痛い目に遭うらしい。大まかなイメージが掴めて読み物としても楽しめるのは『デカルトの精神と代数幾何』とのこと。絶版なので先日オークションで落とした。そこには「数学の本の読み方(高校生のために)」という短いコラムが掲載されているのだが、「書を閉じてペンをとれ」とあった。

今まで自分は「間違ってもいいからとりあえず考えを進めてみる」ということができなくて、何も書かないか、解答を覚えるという方法でやり過ごしてきた。他の科目ではできてたし、プログラミングでも近いことをしているので、なぜ数学でそれができなかったのか今にしてみれば謎なのだけど、とにかくようやく変な呪縛から解放されて、「数学する」ことができるようになった。そんな2017年。

このpostは 2017 Advent Calendar 2017 第8日目の記事として書かれました。昨日は polygon_planet さんでした。明日は poochin さんです。お楽しみに。

日曜日, 11月 19, 2017

Anacondaを入れた環境でvirtualenvを使うとエラーが出ると思ったら

Homebrewで入れたPythonのpipで入れたvirtualenvではなく、condaでvirutalenvを入れて、それを使うようにする。 ここにあるのと同じ。Pythonの環境構築は本当にややこしい。。 https://groups.google.com/a/continuum.io/d/msg/anaconda/XuXMiJLhMgk/fBBnh3EvBAAJ

金曜日, 10月 27, 2017

機械学習の勉強

機械学習に関する話題に触れない日はないが、今まであまり積極的に勉強しようという気はなかった。何だか数学的な別の世界の話で、自分で使うイメージが湧かなかったから。レコメンドシステムの精度を上げたり、絵のスタイルを模倣したり、手描きの数字を判別したりという事例はあるにせよ、自分が思いつく限りではその精度のずれを楽しんだりするぐらいかなと。

しかし最近の仕事で機械学習を使った製品を扱っており、全く知らないでは済まされない雰囲気を感じたので、色々と調べてみたらその考え方や実装方法が非常に興味深く、もっと勉強してみたいと思うようになった。

Stanford University CS231n: Convolutional Neural Networks for Visual Recognition

ディープラーニングに関してはこのStanfordの授業をお手本にしている人が多いと思う。解説も丁寧だし、生徒の質問もよい。難しいことを聞いている訳ではなく、自分なら「そういうもの」として流してしまう部分に「何故?」と疑問を呈しており、なるほどこういう姿勢が秀才を作るのだなと感心する。

kadenzeはアートとクリエイティブテクノロジーに特化してるだけあって、メディアアートの現場でどう使うかが分かりやすく紹介されている。Auditであれば無料。

Machine Learning for Musicians and Artists - an Online Machine Art Course at Kadenze

例えばセンサーをつけた手の動きに合わせて音を鳴らすプログラムを書く場合、入力されたデータから速度や加速度を計算し、いい具合の数値を見つけて条件を分岐させる。「この数値が15以上になったらこの音を鳴らす」みたいな感じで。この作業は非常に面倒だが同時に楽しいところで、身体感覚をプログラムに入れ込んでいくようなイメージ。インタラクティブな作品は、動きの気持ちよさなど、作家の身体感覚が機械に乗り移っているのが面白い。そのためには複数のパラメーターをいじらなければならないのだが、あるパラメーターを変えた際に別のところに影響し、それによって結果が変わるのでまた調整して…の繰り返しとなる。機械学習は言ってみればこの「いい具合」を導き出す技術なので、うまく使うとこういった作業がかなり楽になるんじゃないだろうか(まだ何も作ってないので分からない)。

Creative Applications of Deep Learning with TensorFlow | Kadenze

こちらはTensorFlowを使い、画像生成を学ぶ。ディープラーニングで作られた画像に感じる傾向は、こういう作り方から来てるんだなと理解できる。Jupyterを使っていて、講義の内容もNotebookに書かれているのでめちゃくちゃ勉強しやすい。自分で手を動かす課題もあり、学びながら興味に従って工夫できる。課題はJupyter Notebook上で解説やコメントを参考にしながら、途中まで書かれたコードを完成させる形式。じっくり考える部分とさらっと流してよい部分が分かりやすい。

初心者がどこから勉強するといいのかについては沢山の記事があるが、大抵だらだらリストアップされてて要点が分からない。英語が理解できてクリエイティブコーディングに興味がある場合、「Machine Learning for Musicians and Artists」で概要を掴み、「Creative Applications of Deep Learning with TensorFlow」で手を動かしながら、「Stanford University CS231n」で詳しく学ぶのがいいんじゃないかと思ってる。これらの大事な点としては、課題をちゃんとやること!

あと「ゼロから作るDeep Learning」も読んでいる。これも手を動かしながら学べて、日本語で体系的に理解できる。CS231nを参考にしているようなので、一緒に読むといいと思う。

「単純な作業はAIに任せて、人間はよりクリエイティブなことに取り組もう」というような言葉もよく目にするが、それはプログラムによる自動化と大差がない。何が「単純」で何が「クリエイティブ」かを切り分けるのはなかなか難しい。大竹伸朗の言葉を引用しておく。

「自分がいらないとしたもの、本当はそっちの方に本質なものがあるんじゃないか」

https://www.youtube.com/watch?v=wW0K59OUF2A