Redundanz

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

0531

 ニューラルネットの学習においては、パラメタが多いほど悪い局所解に陥りにくくなる*1*2けれども、いちど良い解が得られてしまえば重みの小さなフィルタを取り除くことによってパラメタ数を減らすことができる。NVIDIAの論文*3によれば、性能を下げることなく9割のパラメタ剪定が可能であるらしい。またいくつかの重みを共有することによってネットワークを圧縮するという研究*4もある。結局のところ学習時においても見せかけのパラメタが十分あれば実質的なパラメタは少なくても良いのかもしれない。ということを考えて、同じ層を複数回利用するCNNを作ってみた。データセットにはひとまずmnistを使い、k=5,ch=8のconv層を3度再利用する。今のところbatch normarizationのような飛び道具は使わない。おそらく使ったほうが良い。現在8epoch目で正答率は97.4%(test set)。悲しくなるほど低い値だけれどもパラメタ数が3600しかないことを鑑みればまあまあではないかと思う(そうか?)。一通り学習が終わったら今度はパラメタ数を同じくした普通のCNNと比較して性能を調べてみよう。そっちのほうが性能よくてがっかりということは十分にありうる。

 バイトの時給がちょっと上がったので8月以降の生活が少し楽になる予定。ありがたいことです。

 何をして生きたものだろうと思う。さっさと就活などして行き先を決めてしまったほうが良いはずなのだけれど、企業に対して自分を売り込むのだと考えると尻込みしてしまう。僕は自分が大したことない人間だと思っているし、それはたぶん正しい。僕が唯一誇りにしているのは、本質的な理解を抜きにして外的な辻褄だけを合わせてしまうこの異様な辻褄合わせ力だけで、そんなのどうやって相手に示したら良いかわからないし、結局のところそれだけではきちんとものごとを理解できる人間の生産性には敵わないのが分かっている。自分がつまらないと感じている小説を誰かに勧めるようなことは僕にはできない。うーむ。

 とか言っちゃってどうせ僕は何もしたくないだけなのだ。

追記)

 実験結果は再利用を行わない同パラメタ数のネットワークに対して0.5~1%くらい良い程度だった。mnistが簡単すぎるせいできちんと評価できていない感じはする。VGG16+ILSVRCで試してみたいけれど環境がない。それから省メモリ効果についてだけれど、結局のところ各層でfeatureを保存しなくちゃならないのでbackpropやる場合はあんまり意味がないことに気がついた。ちなみに最終的な正答率は98.5%(BNあり)。