2015/10/17

[caffe]自己符号化器だけやってみたい (1)

「深層学習」が自己符号化器まで読んで止まっている。
飽きかけているのがわかるので、ちょっと目先を変えてみよう。
きっと、caffeにも自己符号化器で学習することができるだろうから、それだけやってみよう。


Training LeNet on MNIST with Caffe
検索したら、これが出てきた。
はて・・・。
mnist_autoencoder、というファイルがいくつもあるな。

 

まず、MNISTとはなにか?
Caffeで手書き数字(MNIST)の認識学習をする - Qiita
Mixed National Institute of Standards and Technologyの略とのこと。
手書き数字のサンプルがたくさん入っているので学習に使っているようだ。
MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges
こちらがデータ元だが、タイトルは「THE MNIST DATABASE of handwritten digits」とあるから、他にもデータがあるのかと思ったのだけど、ディレクトリもmnistだし、Wikipediaも手書き数字のことしか書いてない。
なので、MNIST=手書き数字画像データ集、と思っててよさそうだ。
こういう地道なものが役立っているんだ、というのはしみじみしてしまうな。

 

多層のニューラルネットワークを効率よく学習させる手法として自己符号化器などの「事前学習」を必ずやるものだと思っていたのだが、画像なんかでは「たたみ込みニューラルネットワーク」が主流で、事前学習はあまりやらないらしい。
まだ「深層学習」の畳み込みニューラルネットの章は読み進んでないけど、画像っぽく2次元にニューロンを配置してフィルタを作るみたいだ。

フェーズで考えると、

  1. ニューラルネットワークの構築
  2. 事前学習(やらない場合もある)
  3. 学習
  4. 実践

みたいな分け方になるのかな。
そして、画像の場合にはニューラルネットワークの構築の際に「畳み込みニューラルネットワーク」で構成することが多いし、音声学習の場合には事前学習することが多い、と。
まだ言葉が身についていないので、本で読んだことがどう使われるのかわかってないのよねぇ。

自己符号化器は「事前学習」のフェーズで使うもので、事前学習は自己符号化器だけじゃなくて制約ボルツマンマシンというものもあるようなので、「caffe 自己符号化器」で探してもあまり見つからないのはそういう理由かもしれない。

 

もう1つ、LeNet、という言葉が出てきた。
リンク先(pdf)は、論文だ。
"Gradient-Based Learning Applied to Document Recognition"。
「勾配に基づく学習を文書認識に適用した」というところか。
ここの「文書」は、OCRとかそっち系の話で、データもMNISTを使っていることから文字認識のようだ。
Character Recognition、じゃないんですな。

この論文は、手書き数字の認識をいくつかの手法で実験したものだ。
けど「CNNはそれ以外の技法よりも2D図形でoutperformだ」と書いてある。
"outperform"は、「性能が優れている」もあるけど「効率がよい」という訳もあるので、他よりも処理が速かった、と考えられなくもないけど、まあここでは性能がよかったと読むのが正しいだろうな。

LeNetは、"LeNet-1"とか"LeNet-5"とか出てくるので、構築したニューラルネットの種類か何かか?
ここを見ると、「Convolution Neural Networks(LeNet)」とある。
でも、CNNって畳み込みニューラルネットのことだから、事前学習とかしないんじゃないの?
このサンプルって、自己符号化器のところはおまけで、畳み込みニューラルネットの方がメインなのか??

先の論文でもLeNetの説明があり、LeNet-5は「CNN。入力層を除いて7層。入力は32x32pix。」とのこと。
caffeサンプルでも、AutoEncoderが出てくるのはファイルのところだけだし。
なので、論文に書いてあるように「CNNの方がいいぜ!」という比較のために事前学習での例も作った、ということなのかな。
train_lenet.shと、train_mnist_autoencoder.shがあるけど、説明にはtrain_lenet.shしかないしね。

 

話を戻すと、Training LeNet on MNIST with Caffeは、

  • MNISTの手書きデータを学習データとして使う。
  • ニューラルネットワークとしては畳み込みニューラルネットのLeNetを使う。
  • 事前学習として自己符号化器を用いた場合のスクリプトもあるが、そっちはメインじゃない。

だろう。


ここまでで疲れたので、実践は次回で。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。