ゼロから作るDeepLearning3の第1ステージ まで終わりました!
Nand2Tetrisの次は、ゼロから作るDeepLearning3を進めています。
Nand2Tetrisの時は、一冊終わったところで振り返り記事を書いたら、えらく苦労したので今回は、区切り区切りでメモを残そうと思います。
第1ステージメモ
- ステップ6~8の逆伝播の実装がやや難しかったです。
- 実装してから、テストするケースはステップ6~8で、入力が常に同じ(順伝播では
x = 0.5
, 逆伝播ではy.grad = 1.0
)なので、都度一つ前と同じ答えになるか確認しながら進めました。 - 入力/出力のx/yだけでなく、途中の変数a/bについても、以下の様に手計算して、ステップごとに正しく計算されている事を確かめました。(図5-5と色を合わせています)
- 以下はステップごとの感想など
ステップ1
- 一見なぜただの変数と言う型(Variable)を準備するのか分からないが、おいおい作っていくとVariableに書く内容が増えていくるので理由が分かった。
ステップ2
- Functionクラスの、
__call__
メソッドの呼び出しは、少しややこしく感じたがこういうものとして慣れました(ステップ9で改善される)。
ステップ3
- 関数の連結が出来て、万能感が出てくる。
ステップ4
- まずは数値微分をやってみる。
ステップ5
- すごく大事な項でした。
- この後のステップ8までで、流れを見失うたびにここを再読しました。
ステップ6
- 手作業でバックプロパゲーションをとにかくやってみる。
- この後のステップ7~8で洗練させていく。
ステップ7
- 変数と関数とでリンクを作り、自動的に逆向きに辿れる様にする。
ステップ8
- ステップ7を一部修正する。
ステップ9
- ここまで毎回タイプしなければならなかった事を、自動で補う様にする。
- これにより実行する時に書くことが減ってきて、洗練された感が出てくる。
ステップ10
- 自動で実行できるテストを実装する。
- 先にここを読んで都度テストケースを追加していってもよかったかも・・・。
第2ステージが終わったらまた書きたいと思います!