③ではDLのFWを作るというコンセプトのもの。ただし著者がオレオレFWを考案するのではなく現在のChainerの思想を受け継いでTensorFlowやPyTorchといったDLFWが共通して取り入れているDefine by Runといった方式やclass単位でのモデルや自動微分などを実装したFWを60ステップに分けて最後はLSTMの実装まで行われる。

クライマックス

この本はDLについての本ではあるがメインとなる実装はDLを実現するためのベースとなる自動微分の仕組みだった。ソフトウェアエンジニアリングについて学んだという実感が大きかった。そしてもっともテンションが上がったのはGraphVizで計算グラフを可視化するときだった。一つは高階微分、もう一つはLSTMだろうか。人間の手では実現不可能であろう複雑さの計算グラフが描画された。

Goldstein Image

def goldstein_price(x, y): 
   a = 1 + (x+y+1)**2 * (19-14*x+3*x**2-14*y+6*x*y+3*y**2)
   b = 30 + (2*x-3*y)**2 * (18-32*x+12*x**2+48*y-36*x*y+27*y**2)
   return a * b 

これは書籍での実装通り。クラスに対する演算子の定義を行なっているためこれだけのコードで非常に複雑なグラフを組むことができる。LSTMの複雑さはこれの比ではなくグチャグチャ。

人間は複雑な作業に適してはいない、複雑なことをやるなら人間の手から離れなければいけない、そこでコンピュータ。自動微分の方法を教える、するとやってくれる、表現できてしまう、それが純粋にすごいと感じた。理論の実装はその理論への実感を得ることができとてもエキサイティングだ。

おすすめポイント

本書は、ゼロから学ぶディープラーニングシリーズ1,2を読んできた人以外にもPythonの文法を理解し自由にプログラムが書けると感じてきたプログラミング中級者程度の人にもおすすめできるかもしれない。深入りはせずともガベージコレクションや計算効率について簡単に触れているしwithといったそこまで常用することのない機能も用いる。

ディープラーニングにさほど興味がない人であってもライブラリの実装に興味があったり微分可能プログラミングに興味がある人にも薦められる。非常に教育的な書籍と言える。

必要な知識

ある程度の連鎖微分や勾配降下法、行列積のような数学が要求されるとはいえ、学部初年度級の数学としっかり向き合うというレベルのものでもなく数ⅢCの毛をむしり取って別の部分に付け替えた程度だろう。

P.S.

これを読んでHaskellでも同じ機能が実装できないかと試行錯誤してみたが見事に失敗している。Haskell力が圧倒的に足りないことを実感した。