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

目次

概要

誤差関数(損失関数)の最小化問題

パラメタ値の自動計算

見せかけの最適化を防ぐ

数式 or 計算グラフ

勾配降下法損失関数勾配を計算するための数値微分)は、
計算に時間がかかるので、ニューラルネットワークを学習させる際に用い効率よく計算を行う。

誤差逆伝播法は、

数式

計算グラフ

によって理解する。

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

勾配法

勾配降下法とも

微分

勾配

勾配の示す方向は、各場所で関数の値を最も減らす方向。

勾配法

NNに対する勾配

ニューラルネットワークの学習における勾配は、
重みパラメタに関する損失関数勾配となる。

連鎖律

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

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

合成関数

合成関数(関数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

計算グラフ

によって表現される。

計算グラフの例

例1

          100       200         220
(リンゴ)--->(*2)--->(*1.1)--->(支払い)
          100      200      220
(リンゴ)--->(*)--->(*)--->(支払い)
               ↑2      ↑1.1
  (リンゴの個数)(消費税)

例2

          100         200         650      715
(リンゴ)--->(*)--------->(+)--->(*)--->(支払い)
                ↑2           ↑       ↑1.1
    (リンゴの個数)          │   (消費税)
                              │
          150          450    │
(みかん)--->(*)-----------┘
                ↑3
    (みかんの個数)

局所的

          100            200         4,200    4,620
(リンゴ)--->(*)------------->(+)--->(*)--->(支払い)
                ↑2               ↑       ↑1.1
    (リンゴの個数)              │   (消費税)
                                  │
                                  │
(沢山の買い物)--->(複雑な計算)┘4000

逆伝播

順伝播の例

          100(1x)  200(2x)   220(2.2x)
(リンゴ)--->(*)---->(*)---->(支払い)
               ↑2       ↑1.1
  (リンゴの個数) (消費税)

逆伝播の例

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

計算グラフの逆伝播

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

 x         y
---->(f)---->
<----     <----
   dy
 E ─      E
   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

演算毎の逆伝播

加算ノード

乗算ノード

リンゴの例

これらの微分値は、

を表している。

          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