Redundanz

僕の言葉は、人と話をするためにあるんじゃない。

0710

 先日断食をして元気になったことをきっかけに、もしかして自分はもっと食事量を落としたほうが調子が出るのではないかと思いだし、しばらくあまり食べない生活を続けていたのだが、普通に調子を崩した。ので食事量はもとに戻した。食べないと人は生きられないのだということを身を持って知ることができたので良かったと思う。
 自分の体調をモニタして、好調を引き出すための条件を調べることに、最近ちょっとハマっている。行動とその後の調子の関係に注意が向くようになり、食事の好みが若干変わり、身体を動かすのが好きになった。根が面倒くさがりなのであまり本格的な運動をするわけではないのだけれど、一日に一度全身を思い切り伸ばして、というか強張らせて、お前はちゃんとそこに在るのだと筋肉に教えてやるだけでだいぶ疲労感が減る。このような行動と体調の間の因果的関係を統計的に抽出できたら便利だと思うのだけど、どうやってデータを取ればよいかわからないので放っている。行動そのものを認識させるのは大変なので、ある時点での身体の状態と一定時間後の主観的調子の関係をモデル化し、調子がよくなる兆候が現れた時点でアラートを鳴らすのが良いと思う。そうすれば、アラートが鳴った直前にやっていた行動が良い影響をもたらすことを知ることができる。誰かやってみませんか?


 ここ数日ちまちまと自動微分フレームワークを書いている。目標は計算と計算グラフの構築を分離することだ。実際の計算はせずに、まず計算順序だけを表現するグラフを作成し、結果が必要になった段階で、それを得るのに必要な部分の計算を行う。また Chainer のようなフレームワークが計算グラフを逆向きにたどることで BackProp を実現しているのに対して、僕のフレームワークは backward グラフを新たに別に構築する。意図としては、自動微分の機能を計算グラフ自体から独立させ、単に新たなグラフを作る関数として実装することにより、抽象性を上げることと、自動微分にあたってどの値を保持するかを必要な勾配から自動的に決定できるようにすることなどがある。パラメタからそのパラメタの勾配へ円を描くように計算グラフが繋がることから、mandala と名付けることにした。現状基本的な演算子の実装は終わっていて、Linear や Convolution の実装に取り掛かっている。GPU での計算には cupy を使うつもりだが、Convolution など cuDNN を利用すべき場所をどうすればいいのか必要な知識がないので悩んでいる。情報科学科を出ておくべきだった気がする。大学で哲学をやったこと自体は良い選択だったと自分では思っているけれど。
 下図は計算グラフを可視化してみたもの。予想以上に曼荼羅で非常に満足している。大層なことを書いたけど、ちゃんと完成する可能性はそんなに高くない。ResNet くらいは動かそうと思ってるんだけど。

f:id:Raprto:20180710231635p:plain