年末2、3日かけて、現在公開レビュー中のゼロから作るDeepLearning❸ フレームワーク編(ゼロD31)をやってみました。個人的には、無印以上に良本だった気がするので、どこが魅力だったのか、どういう人が読むとハッピーなのかを書ければと思います。
内容と感想
Numpyを用いたスクラッチ実装を通して、最近のフレームワーク(PyTorchやChainer)をコードレベルで理解する内容でした。フレームワーク編というだけあって、DLだけでなく、効率的なコードの書き方や、フレームワークの根幹であるDefine-by-runの設計思想などにもフォーカスされていました。
一通りやってみて、感じたこと、得られたことがいくつかありました。順番はテキトウです。
- Backpropの重要性
無印以上に何度も出てきた気がします。全部で5ステージ(章)ありましたが、そのうち2ステージがBackpropに関するものでした。
具体的には、基本的な微分とBackpropから、自動微分(AutoGrad)や高階微分、ニュートン法の説明、実装など無印では扱われていない新しい部分が結構ありました。まさしく、No Backprop, No Deep Learningなんだろうなと感覚的に思いました。
- Define-by-runとDefine-and-runの違い
この説明が一番最初ではなく、ある程度読み進めた後に出てきたのが印象的でした。ノードやinput, creator, outputなどの説明の後にがあったので、両者の違いをスムーズに理解できる構成になっているなと思いました。
- フレームワーク(とりわけPyTorch)への入りがスムーズになる
それを目的にしているから、そりゃそうですが、本書を読むとかなり意識されていることがわかります。PyTorchを触れたことがない場合、これは大きいのではないかなと思います。
一例として、PyTorchの学習時に以下のようなコードを書くと思います。本書では赤線部に該当するコードが背後でどのように動いているのかを実装レベルでカバーしていました。
今春に出版されるPyTorch公式本も読めるようになっていたので読んでみましたが、あくまで使い方の説明に留まっていた印象でした。その点で本書はユニークであり、著者が言うようにほとんど類書がないと思いました。2
- Python自体の知識
Pythonの特殊メソッドを使用する場面が度々あり、個人的には普段あまりみないメソッドも使われていました( __ _rmul___など)。
また、x * w + b で使われている演算子(+や*など)には使用条件がある話や、演算量が膨大になってくるため、どのようにメモリ管理を行うのかなどにも触れていました。
- 高揚感
PyTorchなどのフレームワークを使ったことがある場合に限りますが、本書が後半になるにつれ、段々と見覚えのあるコードに近づいてきます。なんとなく理解していたPyTorch一行一行の背景が繋がっていく高揚感が個人的にありました。
例えるなら、普段電車で行く目的地に徒歩で辿りついて、脳内のマップが拡張される感覚です(この道がここに繋がっていたのか、の方がイメージとして近いかもです)。
ゼロDシリーズ内での位置付けを考える
本書はあくまでフレームワークがメインテーマなので、前半は細かいメソッド(transposeなど)の実装やメモリ管理手法などにも紙面が割かれていました。
ただ、本書後半になってくると、フレームワークの土台が固まり、Optimizer、Loss、CNN、LSTMなどの実装に話が移っていきます。無印と内容の似る部分がそこそこ出てくるため、numpyやPythonの使い方がある程度わかっていれば、ゼロD3から初めてもそこまで問題ないかなというのが個人的な印象です。
自然言語(NLP)に関してはノータッチでしたが、時系列分析と言う文脈でRNN、LSTMが紹介されていました。そのため、NLP自体をがっつり知りたい場合はゼロD2になります。
どういう人が読むとハッピーなのか考える
本書の特徴は、DL自体の説明だけでなく、"コードを通じてフレームワークそのものの成り立ちを理解する"だと思います。今までの書籍は、"DL自体の説明+Numpy実装" or "DL自体の説明+フレームワークの使い方"のどちらかを提供するものが多かった印象です(自身の少ないサンプルなので実態はそうではないかもしれないですが)。
私自身が陥ったケースとして、DL、Numpy、フレームワークがざっくりとわかり、フレームワーク単体で動かす分にはそこまで問題ないが、実際の理解との間に隔たりがありました(橋渡しができていない状態)。
そのため、PyTorchを使ったことがある方にとって本書は、Numpy or 数式とPyTorch間の結びつきを強める価値を提供しているのではないかと思います。
一方、DLに興味はあるがフレームワークを使用したことがない方にとって本書は、スムーズにフレームワークに移行するtransition的な価値を提供していると思います。
おわりに
実用性関係なく、ブラックボックスを1つ1つ解き明かすこと、また既知のもの同士に関係性を見つけて両者を繋げる面白さがありました。まだ理解が十分でないこともあり、何周かしたいと思える一冊でした。
1 / 13まで公開レビューしているようなので、レビューしつつ読んでみると面白いかもしれません。
-
略称がわかってないです。ゼロD、ゼロDeep、ゼロつくどれなんでしょう。 ↩
-
fast.aiのDeep Learning from the Foundationsが立ち位置としては近いかなと思います。こちらはPyTorchを用いてfastai libraryを実装するという内容です。ゼロD3より圧倒的に難しく、カバー範囲は広いです。 ↩