SWIGを使って Microsoft Cognitive Toolkit (CNTK) のRuby用バインディングを作成しました。
CNTK は C++ で実装されたディープラーニングのオープンソース実装でして、昨年 Python 用バインディングが追加されました。 このバインディングは SWIG を使って実装されています。C#, R 用のバインディングも作成することが予定されていて、 そのため採用されたのだと思います。なのでSWIGを使えばRuby用のバインディングも作成できるわけでして、作成しました。
Tensorflow に関しても同様の試みがなされていますが、CNTK の場合ほとんど全て C++ で実装されているので、 SWIGを使えばバインディングを作るのが非常に容易だという特徴が挙げられます。
https://github.com/tamuratak/ruby-cntk
現在のところ CPU上で MNIST の学習ができるところまで動作確認が済んでいます。
https://github.com/tamuratak/ruby-cntk/tree/master/examples/05mnist_feedforward
モデルは以下のように記述できます。
f = dense([400]) >> relu() >> dense([400]) >> relu() >> dense([10])
インストールは Docker を使うのが確実です。イメージも公開しておきました。
https://hub.docker.com/r/tamuratak/ruby-cntk/
ここからが本題ですが、SWIGを使ってバインディングを作っていて且つC++で実装されているので、 バインディング作成が容易そうなディープラーニングのオープンソース実装は他にもありまして、
- Baidu の PaddlePaddle https://github.com/PaddlePaddle/Paddle
- Carnegie Mellon University の DyNet https://github.com/clab/dynet
興味ある学生さんがいましたら、これらのRuby用バインディングのSWIGでの作成で GSoC @ SciRuby に申し込んでみるなどというのはどうでしょうか。私自身は SciRuby とは全く関係ありませんが。
特に DyNet は Chainer や PyTorch のような動的にネットワークを生成する Tensorflow などとはちょっとちがったフレームワークになっていて、一度触ってみるのは良いのではないかと思います。