MNIST のデータを使って Ruby で手書き数字を認識する
ゼロから作るDeep Learning ――Pythonで学ぶディープラーニングの理論と実装
は deep learning の入門書として、素晴らしい本です。
Python で書かれた多数の例題を通じて、具体的に deep learning の仕組みについて学んでいくことができます。
ただ、私はふだん、Ruby でプログラムを書くことが多いので、Ruby でニューラルネットワークを実装してみたら、どうなるか興味がありました。
「3章 ニューラルネットワーク」のある例題を Ruby に書き直してみました。
使い方は、Github レポジトリの README.md を参照してください。
NMatrix という行列のライブラリを使っているだけで、他には特別なニューラルネットワーク用のライブラリは使用していません。そのため、ソースコードを読んでみると、ニューラルネットワークの雰囲気がつかめるかもしれません(今回は、3層のニューラルネットワークを使用しています)。
学習済みの重みとバイアスに関しては、元の Python の例題のものを使わせていただきました。
Python を Ruby に書き換えてみての感想
行列のライブラリとして、SciRuby の一部らしい NMatrix を使ってみたのですが、NumPy より明らかに使い勝手が悪かったです(ただ、チュートリアルがあまりなくて、私の使い方が間違っているせいかもしれませんが)。NumPy だと行列を含む数式を自然にプログラム上で表現できるのに対して、NMatrix はそこまで自然にかけませんでした。あと、スカラー・ベクトル・行列が混ざった式で、適当に型変換をしてくれるブロードキャスティングの機能もいまひとつでした。
私は、普段 Ruby を使うので、できれば Ruby でやりたいのですが、やはり機械学習は Python でやるのが、すくなくとも2016年の現在は、正解であるようです。
私について
普段は、Ruby on Rails でウェブサイトを作る仕事をしている。機械学習については、まだ初心者。大学レベルの線形代数を復習して、いま deep learning について学んでいるところ。deep learning 以外の機械学習の手法はほとんど知らない。