0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[ゼロから作るDeep Learning]ニューラルネットワークの高速化 逆伝播処理について解説してみた

Posted at

#はじめに
この記事はゼロから作るディープラーニング 6章誤差逆伝播法を自分なりに理解して分かりやすくアウトプットしたものです。
文系の自分でも理解することが出来たので、気持ちを楽にして読んでいただけたら幸いです。
また、本書を学習する際に参考にしていただけたらもっと嬉しいです。

#逆伝播処理とは
前回も少し話しましたが、逆伝播処理とは計算グラフを右から左に解いていく処理のことで、各変数の微分を求めることができます。

前章で実装したニューラルネットワークの勾配式は数値微分という変数に微小な値を加えて微分を求める方法を使っていました。
数値微分は単純でわかりやすいのですが、処理時間が長いという欠点があります。
そこで使うのが逆伝播処理です。
ニューラルネットワークの処理に逆伝播処理を実装してあげることで勾配を今までよりも高速に効率よく求めることができます。

それでは手始めに、簡単な計算グラフの順伝播処理と逆伝播処理をpythonで実装したいと思います。
スクリーンショット 2019-10-31 20.35.55.png

a = 100
as = 3
o = 50
os = 4
t = 1.1

# 順伝播処理
az = a * as # リンゴの合計金額
oz = o * os # みかんの合計金額
z = az + oz # リンゴみかんの合計金額
y = z * t # 合計金額

# 逆伝播処理
dy = 1 # 順伝播処理の答えyの微分

# z * tは掛け算なので各変数の値をそれぞれ入れ替えて前の微分をかける
dz = t * dy = 1.1 # zの微分
dt = z * dy = 500 # tの微分

# az + oz は足し算なので前の微分をそのまま継承する
daz = dz = 1.1 # azの微分
doz = dz = 1.1 # ozの微分

# o * osは掛け算なので各変数の値をそれぞれ入れ替えて前の微分をかける
do = os * doz = 4.4 # oの微分
dos = o * doz = 55 # osの微分

# a * asは掛け算なので各変数の値をそれぞれ入れ替えて前の微分をかける
da = as * daz = 3.3 # aの微分
das = a * adz = 330 # asの微分

上のように掛け算と足し算の逆伝播処理は簡単にできるので、これを用いてニューラルネットワークに逆伝播処理を実装する。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?