👌

「ゼロから作る Deep Learning」を C 言語でもう少しゼロに近いところから作る

1 min read

はじめに

ゼロから作る Deep Learning」という本が知られています。
良い本だとおもうのですが、一方で NumPy という超強力ライブラリを使っているが故に、本文とサンプルコードを追うだけでは細かいところを理解しきれていない感がありました。

ということで、Python と比較すれば低級な言語である C 言語を用いて、外部ライブラリを使わずサンプルコードを書き直すという「もうちょっとゼロに近い(?)」再実装を行い、ディープラーニングの理解を深めることを試みました。

作成

何度か「こんなものを作って意味あるのだろうか(いやない)」というもっともな問いに妨害されましたが、最後 8 章の深層ニューラルネットまで実装しました。

https://github.com/chgzm/deep-learning-from-scratch-c/tree/master

以下の方針に従いました

  • C の標準以外のライブラリ類は使わない
  • 学習用なので、コードの理解しやすさを最優先とし、行列演算やメモリ確保開放含め、高速化のための工夫はいったん無視
  • グラフ描画に Python から Matplotlib とか使っちゃうと趣旨がブレる感があるので、グラフ描画には Gnuplot を使う

おすすめポイント

  • 行列演算についての理解が深まる
    NumPy がよしなにやってくれる行列演算をいちいち全部手書きする必要がありますが、言い換えれば全ての計算が何やっているのかを理解できるということになります

  • NumPy の偉大さを再認識できる
    C言語は速く Python は遅い、印象がありがちですが、今回の C での超愚直実装と比較すると、元の Python コードが圧倒的に速いです。NumPy はかってに処理を並列化してくれますし、最適化パネェという感じです。

おすすめしないポイント

限り有る人生の時間を使ってまでやるものではない、というのが正直な感想です。
ディープラーニングの本質は別に NumPy に隠されてなかった、すなわち元のゼロからというタイトルに偽りはなかった、と言えるかもしれません(?)