.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

損失関数勾配を計算するための
数値微分は、計算に時間がかかるので、
誤差逆伝播法」を使用して効率よく計算を行う。

誤差逆伝播法」は、

  • 数式
  • 計算グラフ
  • , etc.

によって理解する。

前者が一般的であるが、ここでは、
後者を使用して視覚的に理解した上で実装する。

計算グラフ

概要

  • 計算過程をデータ構造としてのグラフによって表す。
  • データ構造としてのグラフは、複数の
    • ノードと
    • エッジ(ノードを結ぶ直線)

によって表現される。

  • 中間の計算結果は保持される。
  • 順伝播
    • 右(始点)から左(終点)に流れる。
    • 保持された計算結果と逆伝播で、微分を効率よく計算できる。

例1

  • 100円のリンゴを2個買う(消費税10%が適用される)。
          100       200         220
(リンゴ)--->(*2)--->(*1.1)--->(支払い)
  • 数値を外出にする(ノードは演算子だけ)。
          100      200      220
(リンゴ)--->(*)--->(*)--->(支払い)
               ↑2      ↑1.1
  (リンゴの個数)(消費税)

例2

  • 以下を購入(消費税10%が適用される。
    • 100円のリンゴを2個
    • 150円のみかんを3個
          100         200         650      715
(リンゴ)--->(*)--------->(+)--->(*)--->(支払い)
                ↑2           ↑       ↑1.1
    (リンゴの個数)          │   (消費税)
                              │
          150          450    │
(みかん)--->(*)-----------┘
                ↑3
    (みかんの個数)

局所的な計算

  • 局所的な計算を伝播することによって、最終的な結果を得ることが出来る。
  • 局所的な計算に集中できる。これによって問題に集中できる。
          100            200         4,200    4,620
(リンゴ)--->(*)------------->(+)--->(*)--->(支払い)
                ↑2               ↑       ↑1.1
    (リンゴの個数)              │   (消費税)
                                  │
                                  │
(沢山の買い物)--->(複雑な計算)┘4000

逆伝播

  • 例えば、リンゴの値上がりが支払金額に同影響するかを計算する。
    これは、=リンゴの値段に関する支払金額の微分を求めることに相当する。
  • 逆方向の伝播では、連鎖率によって
    「局所的な微分」を「順方向の逆方向に伝播」する。

順伝播の例

  • y = 2.2x
    • x = リンゴの値段
    • y = 支払金額
          100(1x)  200(2x)   220(2.2x)
(リンゴ)--->(*)---->(*)---->(支払い)
               ↑2       ↑1.1
  (リンゴの個数) (消費税)

逆伝播の例

  • dy
    ─ = 2.2
    dx
          100(1x)  200(2x)   220(2.2x)
(リンゴ)--->(*)---->(*)---->(支払い)
          <--- ↑  <---- ↑  <----
           2.2 │   1.1  │    1.0
               │2       │1.1
  (リンゴの個数) (消費税)

連鎖律

計算グラフの逆伝播

順方向と逆向きに局所的な微分を乗算。

 x         y
---->(f)---->
<----     <----
   dy
 E ─      E
   dx

連鎖率とは

合成関数の微分についての性質。

「ある関数が、合成関数で表される場合、合成関数の微分は、
合成関数を構成する関数の微分の積で表すことが出来る。」

合成関数

合成関数(関数Aと関数B)

     2
z = t
t = x + y

関数Aの微分

dz
─ = 2t
dt

関数Bの微分

dt
─ = 1
dx

合成関数の微分

dz    dz dt
─ =  ─ ─ = 2t * 1 = 2t = 2( x + y)
dx    dt dx

連鎖率と計算グラフ

連鎖率の計算を計算グラフで表現する。

    x           t          z
--------->(+)---->(^2)---->
<--------- ↑  <----      <----
  dz dt    │    dz         dz
1 ─ ─    │  1 ─         ─ = 1
  dt dx    │    dt         dz
           │
            y
    x             t          z
------------>(+)---->(^2)---->
<------------  ↑ <----      <----
               │   
 1 * 2(x + y)  │  2t = 2(x + y)
               │
               │
                y

演算毎の逆伝播

加算ノード

  • z = x + y
  • xで微分
    dz
    ─ = 1
    dx
  • yで微分
    dz
    ─ = 1
    dy
  • 計算グラフ
    x ──┐  dL
          │1 ─
          │  dz
          ↓         z                         L
          (+) <-------------(何らかの計算)<------
          ↑         dL                        dL
          │  dL     ─                        ─
          │1 ─     dz                        dL
    y ──┘  dz

乗算ノード

  • z = x * y
  • xで微分
    dz
    ─ = y
    dx
  • yで微分
    dz
    ─ = x
    dy
  • 計算グラフ
    x ──┐  dL
          │y ─
          │  dz
          ↓         z                         L
          (*) <-------------(何らかの計算)<------
          ↑         dL                        dL
          │  dL     ─                        ─
          │x ─     dz                        dL
    y ──┘  dz

リンゴの例

これらの微分値は、

  • それぞれの値が1増えた時、
  • その他の値に変更がない場合、
  • 最終結果に影響を与える大きさ

を表している。

          100(1x)   200(2x)     220(2.2x)
(リンゴ)---->(*)------>(*)---->(支払い)
          <----↑│ <------ ↑│<----
           2.2 ││   1.1   ││ 1.0
               ││         ││
              2│↓110   1.1│↓200
         (リンゴの個数)(消費税)
          100         200         650      715
(リンゴ)--->(*)--------->(+)--->(*)--->(支払い)
          <---↑│ <--------- ↑│<---↑│ <---
          2.2 ││    1.1     ││1.1 ││  1
             2│↓110         ││    ││
    (リンゴの個数)          ││ 1.1││650
                              ││    │↓
          150           450   ││ (消費税)
(みかん)--->(*)-----------┘│
          <---↑│ <------------┘
          3.3 ││      1.1
             3│↓165
    (みかんの個数)

レイヤの実装

単純なレイヤの実装

乗算レイヤ:MulLayer?

加算レイヤ:AddLayer?

誤差逆伝播法

誤差逆伝播法(バックプロパゲーション)
ニューラルネットワークを学習させる際に用いられるアルゴリズム


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-05-12 (日) 20:45:50 (12d)