ニューラルネットワークライブラリ「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("Square Error")<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}
チャートで表すと,次のようになっています.
このように,簡単にニューラルネットワークを実装できます.実際にプログラムを実行して,学習したデータを視覚化したものがこちらです.
今回は,二次関数を「NNPropagator」に学習してもらいました.上図の緑が学習元データ系列で,青線が学習した関数です.見事に学習できていますね.
今回の「NNPropagator」の紹介は以上ですが,開発を進め次第どんどん情報を公開したいと思います.
さらに,この「NNPropagator」を2016年度KCS「AI講習会」で使用しようと考えています.お楽しみに!
「NNPropagator」サポート予定のネットワーク(太字は実装済み2016/3/31更新)
・ネットワーク:順伝搬ニューラルネットワーク,リカレントニューラルネットワーク
・順伝搬NN に使えるNN:全結合層,畳み込み層,Pooling層,Batch Normalization層,活性化層(Sigmoid,Tanh,MaxOut,ReLU)
・リカレントNN に使えるNN 自己結合層,LSTM,GRU
・最適化アルゴリズム Grad(通常),AdaGrad,RMSProp,Adam
・誤差関数 交差エントロピー,最小二乗
・たくさんつなげることで,深層NNに対応.
Posted on: 2016年3月4日, by : UMU