ニューラルネットワークライブラリ「NNPropagator」を開発中です!

「NNPropagator」とは?

「NNPropagator」とは,Pythonで動く,機械学習研究者,特に初学者のための機械学習を簡単に行えるライブラリです(予定).ニューラルネットワークに特化したライブラリとなっております.

順伝搬ニューラルネットワーク,リカレントニューラルネットワーク,畳み込みニューラルネットワーク,深層ネットワークなど,様々なネットワークを簡単に実装することができます(予定).

そもそも,なぜ新しいニューラルネットワークライブラリを作ったのか,と疑問に思うかもしれません.現在では,有名な機械学習ライブラリとしてTensorFlow, Chainer, Caffe, DeepDream, 画風変換など,豊富な選択肢のライブラリがあります.これらのライブラリではダメなのでしょうか?

結論を言ってしまえば,上に挙げたライブラリで十分です.ですが,私が気になったのは次の点です.すなわち,「ライブラリに頼っているだけでは何の成長もしない」ということです.自らの手でプログラミングをして,試行錯誤の中で解決策を見つける,それが成長の糧となるのだと思います.

よって,「NNPropagator」では,次のことを目標にしています.

  • 機械学習の実装を学ぶのに適切な量のコードのみで構成
  • 実装を直感的に組み合わせることのできる構造
  • これに加えて,十分に実用的であること.

この目標のもとでライブラリを開発することにより,「後学者が実装を学びやすく,なおかつ実用に供する機械学習ライブラリ」が完成するのではないかと考えています.今回は,「NNPropagator」は開発途中であるので,「NNPropagator」の使用方法だけを説明していきたいと思います.開発が進み次第,コードや組み込み方法などを公開していく予定です.

「NNPropagator」を使ってみる!

注:これは開発中のライブラリですので,実装が変わる可能性があります.

まず,次のコードを見てください.

<br />
NNList = [ SimpleConnection(1,50),<br />
           SigmoidConnection(50),<br />
           SimpleConnection(50,1) ]<br />
NetWork = ForwardNN(NNList)<br />
NetWork.setLossFunc(&quot;Square Error&quot;)<br />
NetWork.setDataSet(xd,yd)<br />
NetWork.learn(threshold = 0.1)<br />

実はなんと,このコードだけで,入力層1,隠れ層50,出力層1の多層パーセプトロンの定義と学習が完了するのです!
これだけで,以下の式に基づいた関係式を(xd,yd)で定義された教師データにもとづいて,パラメータ (W_1) と (W_2) を学習する,と言ったプログラムを書いていることになります!ただしsig(x)はシグモイド関数です.
\begin{aligned}
y = W_2 sig( W_1 x )
\end{aligned}

チャートで表すと,次のようになっています.

testNN01

このように,簡単にニューラルネットワークを実装できます.実際にプログラムを実行して,学習したデータを視覚化したものがこちらです.

NNPropagater_test01

今回は,二次関数を「NNPropagator」に学習してもらいました.上図の緑が学習元データ系列で,青線が学習した関数です.見事に学習できていますね.

今回の「NNPropagator」の紹介は以上ですが,開発を進め次第どんどん情報を公開したいと思います.

さらに,この「NNPropagator」を2016年度KCS「AI講習会」で使用しようと考えています.お楽しみに!

 

 

「NNPropagator」サポート予定のネットワーク(太字は実装済み2016/3/31更新)

・ネットワーク:順伝搬ニューラルネットワークリカレントニューラルネットワーク

・順伝搬NN に使えるNN:全結合層畳み込み層Pooling層,Batch Normalization層,活性化層(Sigmoid,Tanh,MaxOut,ReLU

・リカレントNN に使えるNN 自己結合層,LSTM,GRU

・最適化アルゴリズム Grad(通常),AdaGradRMSProp,Adam

・誤差関数 交差エントロピー,最小二乗

・たくさんつなげることで,深層NNに対応.

Posted on