とりまDeep Learningでも学ぶかみたいな感じで読んでる. 非常によく出来た本で, 分かりやすい. TensorFlowだとかフレームワークを使えるようになることが目標.
GWに読み終わりたい. 3日で5章まで読んだ. ここらで一旦まとめておく.
1章 Python入門
- PythonとNumPyの紹介. NumPyは本を通じて使っていくが, 別に難しいことはない
- ブロードキャストは単純な積(内積ではない)を簡単に表現する
2章 パーセプトロン
- 多層パーセプトロン(というか理論的には2層)を使えばいかなる関数も表現出来る. なぜならばコンピュータを構成するNANDが実現出来るから
3章 ニューラルネットワーク
- パーセプトロンはステップ関数を使っていたけど, これをシグモイド関数などの滑らかな関数に変更することによって学習が出来るようになる(勾配法では微分を使うから, ステップ関数は傾きゼロでまずい)
- 線形関数は使ってはいけない. なぜならばそうすると層を重ねることの恩恵が得られないから(1層に出来てしまう)
- ニューラルネットワークの順伝播は行列計算で出来る. 拡張してバッチ化(複数のテストデータを一気に入力する)することも出来る
- ソフトマックスは確率を表す. 直接の値を使って学習すると微分が不連続になるためうまくいかない
4章 ニューラルネットワークの学習
- 損失関数を最小化するパラメータを探すことが目標
- 2乗和, 交差エントロピーともに, 逆伝播をした時に都合よい
- 学習は常にパラメータ空間における勾配(偏微分のベクトル)方向に学習率ごとに進んでいく. 学習率はハイパーパラメータと呼ばれる
5章 誤差伝播法
- 各パラメータについて数値計算で偏微分を行うのは毎回ニューラルネットワークの計算が必要になってしまうし死ぬほど遅い. 実用的ではない
- 計算をASTのような感じでグラフ化したものを計算グラフと呼ぶ. ニューラルネットはこの組み合わせで書ける
- 計算グラフに登場するノードをレイヤと呼ぶことにする. レイヤには加算レイヤ, 乗算レイヤなどがある
- 偏微分の連鎖律を使うと, 各レイヤでの偏微分を逆方向に伝播していくことで上流の偏微分が順に求められる. 偏微分の計算には, 各レイヤでの入力値が必要になることもあるため, 順方向の計算をした後に逆伝播をする
- レイヤは, forwardとbackwardをもったものとして抽象化出来る. forwardを使うことで順方向の計算が, backwardを使うことで逆伝播が出来る
- レイヤを重ね合わせることで任意のニューラルネットワークが構築出来る