LoginSignup
16
15

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-01-04

年末年始だ!コードを書こう!
ということで、「ゼロから作る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

16
15
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15