勉強会に参加してみた

都内某所で開催された機械学習勉強会に参加してみた。
このような勉強会に参加するのは初めてなので、どんな感じなのかわからなかったが、この日は講義形式だった。

確率論の基本が分かっていれば理解できる内容だったが、項数が多くて途中の式変形を理解するのに苦労した。講義自体はテンポも良く、よく理解できた。

勉強会でもなければ本を読まなくなっている気がするので、たまには参加するのも良いと思いました。

AutoEncoder の記事を記述しました

AutoEncoder による DNN 初期化方法に関する記述を
ホームページ記事に追加しました。

今回の検証は python で行ったため、レポジトリを分けました。

Java による実装はそのうち手が空いた時に行おうと思います。

ML_python レポジトリを追加

ようやく AutoEncoder を使った DNN が動いたので、GItHub に公開しました。

とりあえず、途中まで教科書「ゼロから作る Deep Learning」を参考にしつつ、
AutoEncoder クラスや MultiLayerNet クラスを追加しています。

4000回の学習でテストデータに対し、最小 88%、最大 96%程度の認識率を
持たせることができました。

DNN は途中のデバッグが非常に困難に感じます。既存の DNN ライブラリは
どうやってデバッグを解決しているのでしょうか。

記事の方はそのうち更新したいと思います。

JCuda 版ニューラルネット記事追加

JCuda 版ニューラルネットのコードに関する説明記事をアップしました。CPU 版と比較して、以下の変更があります、

  • CPU版では batchsize 方向の並列化はしなかったが、JCuda 版では batchsize 方向も並列計算する。
  • CPU 版ではホストメモリの管理のみだったが、JCuda 版ではホストメモリおよびデバイスメモリの両方を管理する。
  • JCuda 版では計算はデバイスメモリで閉じるようにする。
  • メソッドはほぼ共通して使えるように、デバイスメモリ管理をオブジェクト定義に追加して隠蔽する。

 

SimpleNet.java バグ修正しました

SimpleNet.java の forward() 計算で、bias を使用しないというバグがあったため、JCudaNNKernel.cu とともに修正しました。ただ、bias があってもなくても正答率に目立った変化はないようです。

JCuda 版ニューラルネットのソースコード解説は、現在作成中です。完成にはあと2〜3日かかると思いますので、好ご期待。

AutoEncoder 系のライブラリも作成中ですが、まだ動きません。

NeuralNet.java のバグを修正しました

NeuralNet.java でバグが見つかり、本来

for (int y = 0; y < ysize; ++y) {
  d += w[x][y] * bderivative[y]
}

と書くべきところを x に関して和を取っていました。修正し、GitHub を更新しました。

修正の結果、収束がさらに速くなった気がします。また、ループを繰り返すと過学習してしまう傾向がみられます。