ゼロDeep4章のニューラルネットワーク学習
論理としては理解できたのでメモ。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (18件) を見る
- 教師データを食わせたとき、その演算結果(行列、インデックスがそれぞれ分類を示す)と、出てきてほしい結果(これまた行列)の誤差を行列で取得する関数を用意する。(損失関数)
- この損失関数と、現在のニューラルネットワークの重み、バイアスをパラメータに微分して、パラメータのどの方向に変動させるべきかを見る。 最急降下法というようだ。
- 出てきた誤差を、学習係数を踏まえて実際にパラメータへ入力する。
という流れで、ニューラルネットワークの各階層をの「重み」「バイアス」を弄っていく。
というのがどうも学習の論理らしい。
そこまでは腑に落ちた。
で、実際やってみたところ、サンプルの時点で処理オワンネ(汗
StudyDocs/two_layoput_net.py at master · Sunao-Yoshii/StudyDocs · GitHub
それも当然で、サンプルだけで見ると、ニューロンの数が
- 入力層: 784
- 出力層: 100
このニューロン1個あたりで「重みとバイアスで2回」x ニューラルネット判定(入力層と、出力層で2回) x 微分(前後計算で 2 回)で 8 回計算する羽目に…。
しかも行列計算、浮動小数店計算。
ベンチマークもびっくりの計算量ですよ。
しかも論理を説明するため、処理時間を考慮しないシングルスレッド…そりゃ無理でんがな