ディープラーニングのお勉強体験記”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...

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

「ゼロから作るDeep Learning 2 ―自然言語処理編」でRNNコードの数式導出


DNNの時と同様、コード全体が見えるようになったので、私としては、アルゴリズムを追いかけやすくなりました。

ということで、また同じように次のステップは「ゼロから作るDeep Learning 2 ―自然言語処理編」P216、第5章「5.5.3 RNNLMの学習コード」でRNNのバックプロパゲーションの数式を導くことにします。

まず、一般式を記すと、
(以下ウェイト:wについて書きます、バイアス:bは端折っています)
となるのですが、ここら辺の詳細は、


のサイトを見て頂けるでしょうか、私はここをとても参考にさせてもらいました。このサイトの式を「ゼロつく2」に合うように書き直したのが、ここで紹介する式ということになります。

さて、DNNのときと同様に、誤差「L」の「w(h)jj」と「w(x)ji」の勾配をチェーンルールに従って変形すると

「w(h)jj」の勾配の場合
となって、
「w(x)ji」の勾配の場合
となります。
ほぼ、DNNと一緒で、誤差「L」の「w(h)jj」と「w(x)ji」の勾配はどちらも、
が得られれば、求められことになります。
で、DNNのときと同じで、「dL / du」はバックプロパゲーションで求めていく、ということになります。
なんですが、、、、このときに注意することは、DNNの時とちょっとだけ違っていて、

「(l)層のdL / du」


「(l+1)層のdL / du」だけでなく、「(t+1)層のdL / du」の勾配

も使って、チェンルールで求めるということです。つまり(上(先)の層)と(先の時間の層)の2つの項の勾配が必要なんですね。
この後で求めますが、先に書きますと「2つ」と言っているのは
「(t+1)層のdL / du」
のことで
「(l+1)層のdL / du」
のことです。

では、具体的に求めてみますと、
と計算されます。(もう一度断っておきますがバイアスbに関しては端折っています)
ここで、活性化関数gの微分(dg/du)で括れば


となって、さらに今回、活性化関数gは「tanh()」なので、その微分が


となるので、最終的に得られる式は、


となります。
つぎは、この式とコードとの関係を見ていきたいと思います。



以上です。






コメント

このブログの人気の投稿

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

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

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