ゼロから作るDeepLearning本をやる(2)
4章やった。結構きつかった。
numpy勉強しないとじわじわソースが読めなくなってくる予感。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
参考どおりにコード書いて内容を動作を確認しながら進めたが、勾配の算出処理は次の章にあるという誤差逆伝播法で計算しないと、処理時間がかかりすぎる事がわかった。
ミニバッチ1回ごとの処理時間(誤差逆伝播法未使用)
実行時間:75sec
実行時間:75sec
実行時間:75sec
実行時間:75sec
実行時間:78sec....
ミニバッチ1回ごとの処理時間(誤差逆伝播法/参考ソースの実行結果)
※secオーダーだと実行時間表示できないほど早い
実行時間:0.0sec
実行時間:0.0sec
実行時間:0.0sec
実行時間:0.0sec
実行時間:0.015625476837158203sec.....
確かに本文中にも高速処理は次章!って書いてあったけど、せっかく手作りしたソース君の悲しさよ。
まぁその分誤差逆伝播法の凄みを感じた。次章は楽しくなるはずだ。きっとな。
まとめ
- ニューラルネットワークの重みを良い値に決定したい。
- 良い値に決める指標として損失関数を利用する。結果が小さいほどよい。
- 損失関数は2乗和誤差、交差エントロピー誤差がある(メモ:損失関数を変えて学習結果がどれ位変わるか見る)
- 損失誤差を小さくなるような変化を決めるには勾配を求めるとよい
- 算出した勾配の値に適当な係数(=学習率)を掛けて、元々のニューラルネットワークの重みを修正する。うまくいけば損失関数が前より小さくなる。
- これをある程度繰り返して、収束した結果を学習結果として利用する。
- 1回の学習はランダムに抽出した小さなまとまりで実施する。ミニバッチ学習。
- これら一連の手順を確率的勾配降下法(SDG)とよぶ