機械学習を勉強している過程で色々なアルゴリズムを実装して理解を深めようと取り組んできていますが、今回はNeural Networkを実装したいなーと思っております。実装したいと思っているのは、シンプルなフィードフォワード型のNeural Networkです。

Neural Network

フィードフォワード型のNeural Networkは入力層から出力層に向けて順伝搬を行う(逆方向へは伝搬しない)モデルです。逆方向へ伝搬するモデルとしてはRecurrent Neural Networkなどがあります。Recurrent Neural Networkについてはまだ良くわかっていないので記述しません。

実装

実装としては、[2]を参考にさせて頂いたこともあって、ほとんど同じになっています。違いとしてはあちらの記事ではPython・Numpyでの実装ですが、私の方ではScala・breezeで実装しているというものです。

ソースコードはこちら

まとめ

実装するにあたって、PRMLに記述されているNeural Networkの数式の写経を繰り返していたのですが、ようやく理解できたような気がします。一番初めにNeural Networkの数式を見た時は、こんなもの私には理解できないと思っていたのですが、一つ一つ解読していくと意外となんとかなるんだなーと思っています。

今後の方針としては色々ありますが、現状でいうなら

  • 活性化関数をクラスの外から指定できるようにする
  • mini-batch AdaGradを実装する

参考

  1. 多層パーセプトロンによる関数近似
  2. 多層パーセプトロンで手書き数字認識
  3. Scalaで機械学習
  4. breeze scaladoc
  5. ゼロから始めるDeepLearningその1ニューラルネットとは