自作ニューラルネットが動かない理由が判明

以前、Java で作成する AI みたいな本を買ってきてプログラムを打ち込んでいたが、MNIST の手書き認識精度が 10% 台とほとんど認識できない状態になっていた。

今回、改めて Java で組んでみてその理由が判明。

σ'(z) とのアダマール積を取るべきところを加算しておりました。
そりゃ、収束せんわなあ。

プログラムを組み直したら劇的に収束が改善され、10回ループくらいで90%の認識率を持つようになりました。(さすが最急降下法!!)
これ以上の認識精度は難しいようです。

まだコメントが一切ないコードなので、コメントを付けて GitHub に上げようと思います。

また、コードを JCuda 版に改造して劇的な性能改善を図る予定です。
(CPU による Java8 の parallelStream は Core i7 6900K では期待した性能が出ないようです。並列化のオーバーヘッドが大きい?)

今は AutoEncoder による Deep Learning を試みていますが、これがまたうまく行かない。

JCuda の記事を一部公開しました

開発が止まっている JCuda ですが、一部説明記事を公開しました。

デバイスメモリポインタの使い方とか、cu ファイルとの協調とかをそのうち追加していきたいと思います。まずはダウンロードからコンパイルまでを記述しました。