アンドロイドはDeep Learningの夢を見るか

自分の専門分野の内容で自分向けの忘備録(Twitterには書ききれない内容のメモ的な)

スライドデザインとテンプレート

研究には必ず発表がつきもので、その際にプレゼンテーションソフトを使って作ることはもはや必須スキル。
外側に向けてわかりやすく自分の研究内容を伝えることも非常に重要な事と思います。
この手のことは何度も言われていて、様々なサイトや書籍で紹介されています。(自分も特にこのサイトには大変お世話になりました。)

…で、いざ自分もそんなスライドを作ってみよう!と意気込むわけですが、1からテンプレートを作るのは非常に手間がかかるわけで、そこで挫折してしまう事が多いと感じました。
幸いにして僕の所属する研究室には、そういうデザインにすごく詳しい先輩がいて、その人が素晴らしいスライドテンプレートを公開してくださっているので、1年間メインのスライドテーマとして使わせていただいた感謝の意味も込めて紹介させていただきたいと思います。

@MOGIE_RISHが公開しているDeep Blue Slideです。

とても見やすいスッキリとしたデザインに加えて一番気に入っている点は、ページ番号が右上にでかく表示されていること。
デフォルトの設定だと右下にちょこんと表示されている場合が多く、あれだと見にくいんですよね。
あとで質問する場合には、xxページのスライドを見せてくださいとページ番号で指定する場合が多いので、ページ番号を大きくすることは重要です。

実際に作ってみるとこんな感じ(卒業研究のスライドから)。

f:id:nagoden:20140205200904j:plain

色もほとんどデフォルトの色使いで見やすいものになると思います。
手間を掛けることなく見栄えのするスライドを作りたいときにDeep Blue Slide、お勧めです。

iPhoneでCloudMagic使ってみた

iPhone/Android向けメール管理クライアントにCloudMagicなるものがあるらしい。

複数アカウントでも爆速検索!ドコモメールにも対応した『CloudMagic』でメール管理が超捗る! | TABROID(タブロイド)

ふむふむ…これは良さそうだ。今までiOS標準のメールアプリを使っていたのだが、こいつの不満点として

  • 通知がポップアップで出てこないのでspモードメールの見逃しが多かった
  • メールを既読にした直後にスムーズに未読を通知するバッチが消えない

とまぁいろいろと思うところはあったものの、標準アプリならではのiOSとの親和性の高さはやっぱりサードパーティ製アプリより高いよなぁ(?)と、だましだまし使っていたがこれを機にメインのメールアプリを切り替えてみよう!

さらにdocomoは最近になって出る出る詐欺を繰り返し、難産の挙句ようやくでてきたimap版spモードメールともいうべき、ドコモメールを出してくれたので、ついでにこいつも導入してみたい。
ちなみにiPhone版spモードメールとドコモメールの何が違うのかは以下の表にまとめてみた。

項目 spモードメール ドコモメール
受信プロトコル POP3 IMAP
受信メール扱い 一定期間で削除 1GB/2万件まで無期限保存
クラウド 非対応 対応

その他送受信可能容量が10MBに増えていたり、Wi-Fi送受信ができたり、端末にメールをキャッシュしてオフライン時に閲覧可能になったりと、細かい点で使いやすくなっている。*1

で、こいつを設定しようと以下のページを参考に設定。

【Androidレポート】ドコモメールをCloudMagicで使う方法

よゆーよゆーと思っていたら意外とハマるところがあったのでメモ。

まず、今までドコモメールを一度も使ったことのない人は先にドコモメールを有効化しておかないとCloudMagicで設定してもうまく行きません。(あたりまえだけど…てっきり自動で有効になるもんだと思ってたので…思い込みって怖い)
僕のケースの場合、今までspモードメールしか使ったことがなく、ドコモメールは一度も使ったことがなかったのでまずは以下の記事を参考にドコモメールを有効に。

【メール】iPhoneでも利用開始! 「ドコモメール」の設定方法を徹底解説 | iPhone女子部 - 女子部員がiPhoneのアプリ、アクセサリー、裏ワザ情報などを楽しく発信!

記事の真ん中あたりの【もともとspモードメールを使用していた場合】を参考にiPhoneにプロファイルをインストールしてドコモメールを有効化しました。
あとはCloudMagic側の設定をリンク先のとおりに設定。
ここでも一つ注意点があって、リンク先のページではAndroid版CloudMagicの設定をしています。今回はiPhone版のCloudMagicを設定するのですがドコモメールの設定一覧*2を見ると、iPhoneiPadからのimapサーバの指定はimap.spmode.ne.jpではなくimap2.spmode.ne.jpとなっていたので、そこだけ修正。

これでうまく設定することが出来ました。一つ注意点をいうと、spモードメール時代に受信したメールはドコモメールのクラウドには残っていないので、消えてしまうことでしょうか…
まぁ僕は友達も少なくたいしたメールもなかったのでなんの問題もないね!

TheanoでDeep Learning

最近の機械学習界隈はDeep Learning一色なので、流行りに乗っかってやってみます。

実際に自分が環境構築してみて、ネットワークをCPUとGPUの両方で動かしてみました。 

環境構築

今回はLinux Mintを使用して環境を構築しました。Debian/Ubuntu系のOSなら基本同じように設定できるはずです。(家にLinux環境が無かったなんて言えない)

自分の忘備録のためにも書き残しておきます。興味ない方は下まですっ飛ばしてください。

OSインストール

OSはこちらからダウンロード。今回はLinux Mint 16 "Petra" KDE版 64bitを使ってみました。

http://linuxmint-jp.net/

Pythono+Theano+CUDAインストール

PythonとTheanoのインストールはこちらを参考に設定しました。

$ sudo apt-get install python-numpy python-scipy python-dev python-pip python-nose g++ libopenblas-dev git

 

$ sudo pip install Theano

python-devはpython本体のパッケージです。python-numpyとpython-scipyはTheanoの依存関係のために必要なパッケージとなっています。ちなみに中身は行列とか便利に扱えるライブラリっぽい。(もしかしたらsudo aptitude installとか使えばこのへんの依存関係を気にしなくていのかもしれませんが)

python-pipはpythonのパッケージ管理ソフトです。Theanoはこれ経由で入れておきます。

次にCUDAのインストールです。これはこちらを参考にしました。

nvccのダウンロードは以下から。Linux Ubuntu12.04 64bit DEBのパッケージを選択。

https://developer.nvidia.com/cuda-downloads

ダウンロードしたらインストール。

 $ sudo dpkg -i cuda-repo-ubuntu1204_5.5-0_amd64.deb

終わったらPATHの設定をする。インストールしたCUDAのバージョンによってはPATHの書きかえが必要かもです。

$ export PATH=/Developer/NVIDIA/CUDA-5.5/bin:$PATH

$ export DYLD_LIBRARY_PATH=/Developer/NVIDIA/CUDA-5.5/lib:$DYLD_LIBRARY_PATH  

次にGPUドライバが入っているかを確認。

$ sudo grep NVIDIA /var/log/Xorg.0.log

 

[  1312.602] (II) Module glx: vendor="NVIDIA Corporation"

[  1312.602] (II) NVIDIA GLX Module  319.60  Wed Sep 25 14:24:11 PDT 2013

[  1312.603] (II) Module nvidia: vendor="NVIDIA Corporation"

[  1312.604] (II) NVIDIA dlloader X Driver  319.60  Wed Sep 25 14:04:14 PDT 2013

[  1312.604] (II) NVIDIA Unified Driver for all Supported NVIDIA GPUs

[  1312.604] (II) NOUVEAU driver for NVIDIA chipset families :

[  1312.609] (II) NVIDIA(0): Creating default Display subsection in Screen section

[  1312.609] (==) NVIDIA(0): Depth 24, (==) framebuffer bpp 32

 ...(中略)

 ログを見てドライバが当たっていることを確認。当たってなければ別途インストールしてください。

最後にnvidia-settingsをインストール。

$ sudo aptitude install nvidia-settings

 ここまでで無事環境構築は終了です。

ソースコードとデータセットの入手

正直Theanoの動作確認には、Theanoでちょいと書いてあるソースであれば何でもいいのですが、今回はdeeplearning.netからStacked Denoising Auto-Encoderアルゴリズムで実装された手書き数字認識器を動かしてみます。

まずはソースの入手。

https://github.com/lisa-lab/DeepLearningTutorials

このソースコードの詳しい解説はこちらで解説されています。

データセットは以下で入手できます。ちなみにこれはmnistの手書き数字のpklパッケージ版です。

http://www.iro.umontreal.ca/~lisa/deep/data/mnist/mnist.pkl.gz

今回はSdA.pyの実行をしてみますが、この際SdA.pyのソースコードが保存されているフォルダから見て「../data/mnist.pkl.gz」の位置にデータセットがないとうまくデータを食ってくれなかったりします。

実行結果

CPUモードとGPUモードで比較してみます。

その前に当方のハードウェア的な環境は以下のとおりです。

CPUモード実行結果

CPUモードで学習するには、CPUフラグをONにして実行させます。

$ HEANO_FLAGS=mode=FAST_RUN,device=cpu,floatX=float32 python SdA.py 

... loading data

... building the model

... getting the pretraining functions

... pre-training the model

Pre-training layer 0, epoch 0, cost  71.64814

Pre-training layer 0, epoch 1, cost  63.687415

Pre-training layer 0, epoch 2, cost  62.29181

Pre-training layer 0, epoch 3, cost  61.580305 

Pre-training layer 0, epoch 4, cost  61.15378

...(中略)

Pre-training layer 2, epoch 13, cost  176.49464 

Pre-training layer 2, epoch 14, cost  176.34824  

The pretraining code for file SdA.py ran for 235.43m 

... getting the finetuning functions

... finetunning the model

epoch 1, minibatch 50000/50000, validation error 4.080000 %

     epoch 1, minibatch 50000/50000, test error of best model 4.220000 %

epoch 2, minibatch 50000/50000, validation error 3.480000 % 

     epoch 2, minibatch 50000/50000, test error of best model 3.690000 %

epoch 3, minibatch 50000/50000, validation error 2.920000 %

...(中略)

epoch 36, minibatch 50000/50000, validation error 1.430000 %

epoch 37, minibatch 50000/50000, validation error 1.430000 %

Optimization complete with best validation score of 1.420000 %,with test performance 1.370000 %

The training code for file SdA.py ran for 284.60m 

結果はPre-Trainingで235.43分、Fine-Tuningで284.60分となりました。

GPUモード実行結果

GPUモードで学習するには、GPUフラグをONにして実行させます。

 $ THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python SdA.py 

Using gpu device 0: GeForce GTX 660 Ti

... loading data

... building the model

... getting the pretraining functions

... pre-training the model

Pre-training layer 0, epoch 0, cost  71.648135

Pre-training layer 0, epoch 1, cost  63.68741

Pre-training layer 0, epoch 2, cost  62.29181

Pre-training layer 0, epoch 3, cost  61.580305

Pre-training layer 0, epoch 4, cost  61.15378

...(中略)

Pre-training layer 2, epoch 13, cost  176.49468

Pre-training layer 2, epoch 14, cost  176.34826 

The pretraining code for file SdA.py ran for 93.74m

... getting the finetuning functions    

... finetunning the model  

epoch 1, minibatch 50000/50000, validation error 4.030000 % 

     epoch 1, minibatch 50000/50000, test error of best model 4.290000 %                                                                                    

epoch 2, minibatch 50000/50000, validation error 3.330000 % 

     epoch 2, minibatch 50000/50000, test error of best model 3.840000 %                                                                                    

epoch 3, minibatch 50000/50000, validation error 2.900000 %

     epoch 3, minibatch 50000/50000, test error of best model 2.880000 %

...(中略)

epoch 42, minibatch 50000/50000, validation error 1.470000 %

epoch 43, minibatch 50000/50000, validation error 1.470000 %

Optimization complete with best validation score of 1.440000 %,with test performance 1.320000 %

The training code for file SdA.py ran for 119.48m

 学習のアルゴリズム上繰り返しの回数が同一のものとならず、ちょっとアンフェア(GPUで計算させた方が今回は繰り返し回数が多かった)な感じですが、それでもこっちの方が速いですね。結果はPre-Trainingで93.74分、Fine-Tuningで119.48分となりました。

結果比較

今回はCPUとGPUでそれぞれ手書き数字文字認識をさせたところ、Pre-Trainingで約2.51倍、FIne-Tuningで約2.38倍高速に計算をさせることができました。

もちろん環境や計算の繰り返し回数で大きく結果が変わる可能性はあるのでご参考程度に…

高速に計算が出きると色々はかどると思うので、Deep Learingの際はGPU計算できる環境を整えることをおすすめします。