プログラマーになりたい。

プログラミングや写真や本や読書会のことや、日常のこと。

ニューラルネットワークのプログラムを久しぶりに見て思ったこと

10年ぶりくらいにニューラルネットワークのプログラムを書いている。趣味だけど。

少し前にすごい勢いでディープラーニングが流行ってしまい、うっとおしいような、うらやましいような気分になった。だが、TensorflowやKerasを触ってみると、格段に楽になっている。流行ってすごいな。

なにしろ、2004年に僕が高専の研究室に入ったときは、最初C++で配列とfor文を使って書いていた。単層のパーセプトロンでも、僕はプログラマとしての注意力が決定的に欠けているので、配列の操作でエラーとNaNを出しまくって、わけがわからなくなったものだ。

途中からJavaにしたので若干マシになったが、for文を使うという基本は大して変わらなかった。ぬるぽぬるぽ。たしか、まだイテレーターがなかったか、知らなかった。最後の方でRを知り、やっと内積(ベクトル-ベクトル積)が1行で書けるようになった。

それが、最近Kerasを使ってみたら、今では1層の定義が1行で済むじゃないか。

それから、驚異的なのが学習。tfから入った人には、何のことを言っているかよくわからないかもしれないが、学習(結合負荷の更新)の式は、w(t+1)=w(t)+……みたいな漸化式の形式になっているものを本や論文から写す必要があった。なければ紙とペンで偏微分だ(僕は授業でしかやったことはないが)。

現在は、どうもtfが対応しているタイプの関数なら式の変形(偏微分)をtfの内部で行ってくれるようで、基本的に入出力の式と誤差の式だけ書けばいいみたいだ。すげえ時代。個人的には、tfで書かれたプログラムを初めて見たとき一番驚いたのがこれだった。

個人的には、一応tfの中で何が起きているのか、更新式の存在くらいは知っていたほうがいい気もするんだけど、これは「プログラマならアセンブラを勉強しろ」と言うのに等しい気もするので、難しいところだ。

Creative Commons License ©2007-2016 IIDA Munenori.