Help us understand the problem. What is going on with this article?

Haskellで「ゼロから作るDeep Learning」(未完)

More than 1 year has passed since last update.

年末年始だ!コードを書こう!
ということで、「ゼロから作るDeep Learning をHaskellでやる」というチャレンジをしてみました。
zdl.gif

なぜHaskellを使うのか?

  • Haskellってなんかイケてるよね
  • 本の通りにやるだけだと味気ないし
  • fusionとかいうのがあるらしいし、計算の効率性が求められそうなDeep Learningの分野でも、実はHaskellが向いてるんじゃない?というのを検証してみたかった

結論

失敗。Haskell力が足りませんでした

俺の屍を超えていけ、という気持ちで書いたコードを上げておきます。
https://github.com/spinylobster/my-deep-learning-from-scratch-in-haskell
進捗は全然ダメで、ニューラルネットの推論と学習までは書いたけど、実際に学習できるところまでは確かめられていない状態
誤差逆伝播法の実装ができていないので、4章の途中という感じ

追記 2017/1/9: ちょっと進んで、ニューラルネットの学習まではできた状態
AdaGradの実装もしてるので、6章の途中という感じ

Haskell力低いのでコードが煩雑なのと、本のコードにも沿ってないですが、各種ライブラリを使う際の参考にはなるかも

原因と考えるもの

  • Haskellの勉強に時間を費やしすぎた
    • 忘れてた知識の再学習、Stackの使い方、モナド変換子、データのシリアライズなど
    • 元々、数年前にすごいH本をやった程度だった
  • Gnuplotの使い方の把握にも大分時間を使ってしまった
  • 状態を持たないといけない計算があったが、それを書く方法を分かってなかった
  • 行列の計算が安全じゃなくて、実行時エラーに悩まされた -> 型安全な計算できるっぽい!
    • Haskellで実行中の状態をデバッグするのめっちゃ難しい

使ったもの

  • Stack - これがないと各パッケージのインストールでこける。
  • Haskell超入門 - 基本的な文法を思い出すために
  • HMatrix - NumPyに相当するもの。行列の計算。Repaというのもあるらしく、後でパフォーマンスを比べようと企んでた
  • Gnuplot - matplotlibに相当するもの。グラフの描画。使い方の把握はここを見るのが早い
  • GHCiのデバッガ - 存在を初めて知った。遅延評価とデバッガは相性が悪いっぽい。めっちゃ使いづらかった
  • その他のライブラリ - cabalファイルを参照

本の感想

  • めちゃくちゃ良い 分かりやすい
  • ニューラルネットの入門から、この先どういうことを学習していけば良いかまでカバーされている。入門書としてこれ以上はないんじゃないかと思う
  • ただ、肝心のディープラーニングのところはぶっちゃけ余り理解できていない
    • CNNの畳み込み層の設計の意図が理解できていない
    • 自分の手で書いていないというのもあると思う
    • 他の資料と合わせて理解していきたい

参考になったURL

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away