こんにちは。
キャスレーコンサルティングSI(システム・インテグレーション)部の杉です。

DeepLearningをPythonのChainerを使って試してみたので、記事にしたいと思います。

最近流行りのワードですが、今回は

  • Deep Learningってそもそも何?
  • Deep Learningで何ができるの?

などなどの導入部を説明していきます。

DeepLearning とは

多層構造のニューラルネットワークの機械学習のこと。
もう少し噛み砕くと、ニューラルネットワークとは、人間の脳の神経回路のの働きをモデル化したシステムのことです。

少し乱暴な表現ですが、人間のモノに対する理解、記憶のメカニズムをそのままコンピューターに
置き換えていると言ったほうがしっくりくると思います。
人間の記憶のメカニズムを利用して文字通り、機械に学習をさせるわけですね。

例えば、次の画像を見たとすると、
機械学習_0_導入
共通して「これはウサギだ」と思うのではないでしょうか。
(少なくとも犬や猫と思う人はいないはずです)

それでは、なぜウサギだと分かったのでしょうか?

『今まで見てきた映像の中でウサギと似ているから』だったり、
『目、鼻、耳、毛色』の特徴から判断する人もいるでしょう。
逆にウサギを覚えたときは、写真や実際のウサギを見て覚えたはずです。

人間が学習する過程を機械に学習させるとどうでしょうか?
DeepLearningも実は同じで、何種類もの画像を覚え(学習)させます。
そして、ウサギの画像を判断する際は細かいパーツに分けて(人が目や鼻、口、毛色で判断するように)、
過去に学習したことと比較して判断していきます。

◇ まとめ

Deep Learning とは、人間の学習メカニズムをモデル化した人工知能による機械学習のこと。
Deep(多層構造)によりLearning(学習)の精度を高めることがこのワードの由来となっている。

【人の知覚におけるニューラルネットワーク】

機械学習_1_nnimage

【DeepLearningにおけるニューラルネットワーク】

機械学習_2_nnimage

Deep Learning で何ができるか?

最近ではIoTと合わせて流行りのワードになっていますが、
私たちの生活の中で具体的にどのようなことができるのでしょうか?

最も身近なところだと、iOSの会話認識アプリのSiriでしょうか。
また、xbox360に使われているkinectにもDeepLearningが利用されています。
その他、具体的には、

  • カメラの顔検出機能
  • スパムメール検知
  • 数字認識機能(郵便番号などの認証に用いられる)
  • 商品レコメンデーション
  • 株式取引

などがよく知られているところでしょう。

他にも前述のIoTと絡めて様々な可能性が挙げられています。

  • 例えば、車のソフトウェアに画像を読み込ませて信号、道路、通行人を認識させると、自動運転ができたり。
  • Siriのような音声認識機能をより精度を上げると人間の声で機械が行動できたり。
  • 言葉を瞬間的に翻訳してくれれば英語を学ぶ必要がなくなったり。

現代では人がやっていた作業も近い将来、機械が行うようになるかもしれませんしね。

Deep Learning を導入するにあたって

今回はタイトルにもなっているchainerを使ってみました。
が、Deep Learningを導入するのはちょっと面倒です。

ちょっと前まではpipコマンド一発で出来ていたようですが、Chainer 1.5からはその限りではありません。。。
特にWindows環境で行うことはお勧めしません。
(chainer自体、サポートしていないとか)

今回はpython2.7で実行しました。
(3.5ではchainerや後述のcudaが筆者の環境では正常に動作しなかったため、2.7を使用しています。2016年5月6日現在)

以下、必要なものになります。

  • python2.7
  • chainer(1.2バージョン)

今回利用する機械学習のフレームワーク
※cupyが全く動いてくれないので、1.2のpycudaを利用するやり方で妥協。(二通りのやり方がある)

    1.  pip install chainer==”1.2.0″ でダウンロード。
    2.  git clone https://github.com/pfnet/chainer.git でクローンしてsetupファイルを実行する。

2の場合はここが参考になります。

  • CUDA

GPU向けのC言語の統合開発環境のこと。
ここからインストールしてください。

  • cuDNN

計算の高速化ライブラリのこと。
ここで登録してからダウンロード可能です。
今回は特にダウンロードする必要はありません。
(筆者も設定してません。そもそもcupyも現状動きませんしpycuda使うと前述しているし。。。)

  • Visual Studio

windowsの場合はVisual Studioを各pythonのバージョンに合わせてインストールする必要があります。
python2.7で利用する場合は、Microsoft Visual C++ Compiler for Python 2.7を。

導入手順は下記のURLを参考としました。
http://qiita.com/okuta/items/f985b9da6de33a016a75

ただし、上記のURLにもある通りchainer自体、Windowsをサポートしていませんので、
前述の必要なものなどはかなりその場凌ぎの方法になってます。。。

ここでは最終的に

□ CPUのみ(とても遅い)

python examples\mnist\train_mnist.py

□ GPUで実行(倍速以上)

python examples\mnist\train_mnist.py –gpu 0

が実行できていればよいです。

GPUの実行でつまずく場合はCPUのみで進めましょう。
多少遅いですが、今回のブログではそこまでのパフォーマンスは必須ではないので。

なお、train_mnist.pyはMNISTデータセットを用いたサンプルコードです。
手書き文字を分類する定番のサンプルコードですね。
(MNISTデータセット ・・・ 0 から 9 までの手書きの数字 70000 点を収録したデータセットのこと)

機械学習_3_example実行

実行ができたら機械学習の実装に進めたいと思います。

次回はcaffeとchainerを使って画像を判別させるプログラムを実行するとこまで行きたいと思います。

しかし、、、環境整備に無駄に時間がかかってしまった。。。 (汗