ディープラーニングのお勉強体験記”30:番外編「XP」の各sin波コード”(リカレントニューラルネットワーク”RNN”を中心にバックプロパゲーション”BPTT”を数式を使って理解したい!)

イメージ
「ゼロから作るDeep Learning 2 ―自然言語処理編」のRNNコード、P216、第5章「5.5.3 RNNLMの学習コード」から作ったWindows XPの各sin波コード 前回「Windows xp」でAnacondaを使えるようにしたと紹介しました。でもって、ここではそこで動く「sin波学習コード」紹介します。わざわざ紹介する内容でもないかもしれませんが、、、、、、 「Jupyter Notebook」を使うということと(普段は「Jupyter Lab」を使ってます)、コードの先頭部分に「%matplotlib inline」を追加する、グラフの表示部分をちょっと書き換えるだけ(1波形1コマンドラインにする)と、簡単ですから、、、、、 でもまあ、一応書かせてもらいます!(簡単なことでも、それなりに苦労はしていますので) 目次 1:xp用のRNNのSIN波コード 2:xp用のLSTMのSIN波コード 3:xp用のGRUのSIN波コード 1:xp用のRNNのSIN波コード # 完成版 Windows xp用 RNNコード # ゼロから作る Deep Learning2のP216、第5章「5.5.3 RNNLMの学習コード」でコード全体が見えるようにできるだけ「import」を外した # プログラムの動作検証用にSINカーブを学習させるため変更したコード # coding: utf-8 # import sys # sys.path.append('C:\\kojin\\資料\\AI関連\\ゼロから作る Deep Learning\\ゼロから作る Deep Learning2\\deep-learning-from-scratch-2-master\\') %matplotlib inline import matplotlib.pyplot as plt import numpy as np # from common.optimizer import SGD # from dataset import ptb # このimportを有効にするには上記パス設定「sys.path.append('C:\\kojin\\AI関連\\・・・」が必要! # from simple_r...

ディープラーニングのお勉強体験記”18:LSTMコードと数式”(リカレントニューラルネットワーク”RNN”を中心にバックプロパゲーション”BPTT”を数式を使って理解したい!)

「ゼロから作るDeep Learning 2 ―自然言語処理編」から変更したLSTMコードと数式の関係


前回、LSTMのバックプロパゲーション(誤差逆伝搬)の式を導きました。なので、続いてLSTMコードと数式の関係を確認していきたいと思います。

で、コードの全体は基本的にRNNと同じ内容なので、確認するのは「class LSTM」「class TimeLSTM」の「def backward(self, ***)」に対して行います。

この部分ですね。

「class TimeLSTM」の「layer.backward()」と数式の関係は

つまり、「class TimeLSTM」の部分では、(l+1,t)層と(l,t+1)層から誤差勾配をもらって、バックプロパゲーション(誤差逆伝搬)を行うわけですね。
RNNの時にも書きましたが、 ”(l+1,t)層” は、コード的には1層違うタイミングで計算しているので、一旦リストに保存しています、だから「dhs[:,t,:]」と書かれる訳ですね。( ”RNNバックプロパゲーションの「アルゴリズム」と「数式」の間のちょっとしたギャップ” を参照してください)

で、「Layer.backward」の中身は、下記なのですが、一部、数式を分けて表記しているので、ちょっと繋げて書くと、


とします。

でもって、コードと数式の対応は



になります。
記号がまあまあ対応しているので、分かりやすいかなと思います。

で、この4つの勾配にそれぞれ、Wx、Whを掛け算することで、(l-1)や(t-1)の層にdL/dh誤差勾配を伝播していくことができます。
こういう感じですね。(Σ記号は省略していますが、、、、、)


(lー1)層、(tー1)層、(l)層、(t)層、(l+1)層、(t+1)層などごちゃごちゃ出てきてややこしいですよね。

アルゴリズムと計算(数式)では多少違いがあって、これが話をややこしくしています。なので、 ”RNNバックプロパゲーションの「アルゴリズム」と「数式」の間のちょっとしたギャップ” を見て頂くと少しは理解に役立つかも知れません。

以上です。



コメント

このブログの人気の投稿

ディープラーニングのお勉強体験記”17:LSTM数式導出”(リカレントニューラルネットワーク”RNN”を中心にバックプロパゲーション”BPTT”を数式を使って理解したい!)

ディープラーニングのお勉強体験記”30:番外編「XP」の各sin波コード”(リカレントニューラルネットワーク”RNN”を中心にバックプロパゲーション”BPTT”を数式を使って理解したい!)