ゼロから作るDeepLearning3の第1ステージ まで終わりました!

Nand2Tetrisの次は、ゼロから作るDeepLearning3を進めています。
Nand2Tetrisの時は、一冊終わったところで振り返り記事を書いたら、えらく苦労したので今回は、区切り区切りでメモを残そうと思います。

第1ステージメモ

  • ステップ6~8の逆伝播の実装がやや難しかったです。
  • 実装してから、テストするケースはステップ6~8で、入力が常に同じ(順伝播ではx = 0.5, 逆伝播ではy.grad = 1.0)なので、都度一つ前と同じ答えになるか確認しながら進めました。
  • 入力/出力のx/yだけでなく、途中の変数a/bについても、以下の様に手計算して、ステップごとに正しく計算されている事を確かめました。(図5-5と色を合わせています)

f:id:hananirawataru:20210308214016p:plain

  • 以下はステップごとの感想など

ステップ1

  • 一見なぜただの変数と言う型(Variable)を準備するのか分からないが、おいおい作っていくとVariableに書く内容が増えていくるので理由が分かった。

ステップ2

  • Functionクラスの、__call__メソッドの呼び出しは、少しややこしく感じたがこういうものとして慣れました(ステップ9で改善される)。

ステップ3

  • 関数の連結が出来て、万能感が出てくる。

ステップ4

  • まずは数値微分をやってみる。

ステップ5

  • すごく大事な項でした。
  • この後のステップ8までで、流れを見失うたびにここを再読しました。

ステップ6

ステップ7

  • 変数と関数とでリンクを作り、自動的に逆向きに辿れる様にする。

ステップ8

  • ステップ7を一部修正する。

ステップ9

  • ここまで毎回タイプしなければならなかった事を、自動で補う様にする。
  • これにより実行する時に書くことが減ってきて、洗練された感が出てくる。

ステップ10

  • 自動で実行できるテストを実装する。
  • 先にここを読んで都度テストケースを追加していってもよかったかも・・・。

第2ステージが終わったらまた書きたいと思います!