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乗和誤差を使うと綺麗になる
    • 認識率が低いと大きな誤差が逆伝播していく、認識率が高いと小さな誤差が逆伝播

数値微分の必要性

  • 勾配確認
    • 誤差逆伝播法は実装複雑なのでバグの可能性
    • 数値微分と勾配を比べる

学習の全体図

  1. ミニバッチの抽出
  2. 勾配の算出
  3. パラメータの更新
  4. 繰り返す

誤差逆伝播法は2を効率化するもの。

そういえば積分は?

全然本書とは関係ない話。

数値積分(長方形近似)

  • 数式解く→ 解析的
  • 長方形を細かく分けて面積求める → 数値積分

積分も本書で扱ってる微分と同じ。
数値積分はわかりやすい。

誤差逆伝播法みたいに積分を効率的にやる手法もあるのかな?