O'Reilly Japan - ゼロから作るDeep Learning
誤差逆伝播法
- 数値微分は実装簡単だが遅い
- 本書では数式ではなく計算グラフで説明
計算グラフ
- メリット
- 局所的な計算に集中できる
- 途中の計算結果を保持できる
- 逆方向の伝播によって微分を効率的に計算できる
- リンゴの値段があがったら支払い金額はどうなる?
- 100円のリンゴ2個、消費税10%
- りんごの値段に対する支払い金額の微分
- 逆方向の矢印をたどればすぐわかる
- あがった値段の2.2倍増える
- 途中までの計算を再利用して、消費税に対する微分もすぐわかる
連鎖率の原理
- 合成関数の微分はそれぞれの関数の微分の積となる
- 合成関数
- 複数の関数で構成される関数
- 計算グラフの逆伝播はこれによって成り立つ
ノード
- 加算ノード
- 値をそのまま流す
- 乗算ノード
- xとyをひっくり返して掛けて流す
単純なレイヤの実装
- forward, backwordを持つ
- forwardはx, yを受け取る
- backwardはdout(微分)を受け取る
ニューラルネットのレイヤ実装
- ReLU
- Sigmoid
- 中身はややこしいけど計算グラフ上は1つのノードで表せる
- Affine
- 行列の内積(アフィン変換)+バイアス
- Softmax with Loss
- Softmaxと損失関数(交差エントロピー誤差)を合わせたレイヤ
- Softmaxは推論では省略される。省略されたAffineの生データのことをスコアと呼ぶ
- 逆電波はSoftmaxの出力(y1, y2, y3)と教師データ(t1, t2, t3)の差分という綺麗な結果になる
- 交差エントロピー誤差がそのために設計されたものだから
- 恒等関数は2乗和誤差を使うと綺麗になる
- 認識率が低いと大きな誤差が逆伝播していく、認識率が高いと小さな誤差が逆伝播
数値微分の必要性
- 勾配確認
- 誤差逆伝播法は実装複雑なのでバグの可能性
- 数値微分と勾配を比べる
学習の全体図
- ミニバッチの抽出
- 勾配の算出
- パラメータの更新
- 繰り返す
誤差逆伝播法は2を効率化するもの。
そういえば積分は?
全然本書とは関係ない話。
- 数式解く→ 解析的
- 長方形を細かく分けて面積求める → 数値積分
積分も本書で扱ってる微分と同じ。
数値積分はわかりやすい。
誤差逆伝播法みたいに積分を効率的にやる手法もあるのかな?