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

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

RNNバックプロパゲーションの「アルゴリズム」と「数式」の間のちょっとしたギャップ


DNNの時も言いましたが、繰り返しますと、

 

ディープラーニングに限ったことではないと思いますが、

「理論と実際の間には、何らかの落差がある」

というのが普通なのではないでしょうか。


このRNNのコードの「アルゴリズム」と「数式」との間にも、ちょっとしたギャップを感じていて、ほんとにちょっとしたことなんだと思うのですが、それが原因でいまいち理解できない人もいるんじゃないかと思っています。


「RNNコードと数式の関係」のところで気づいた人もいるかと思いますが、、、、、

どういうことかというと、

ディープラーニングは、RNNの場合、「入力層」、「中間(RNN)層」、「出力層」などがあって、この中間層がRNNになります。そして、時間層を「行ったり」「戻ったりしつつ」上下の層を「登ったり」「下ったり」して学習を進めるわけですね。

で、「RNNバックプロパゲーション」では、自分が注目している層を(l)層とすると、


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

「アルゴリズム」の方では

「(l)層に対して(l-1、t)層と(l、tー1)層」

との関係を示している。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



一方


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

「数式」の方では

「(l)層に対して(l+1、t)層と(l、t+1)層」

との関係を示している。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


ざっくり、こういう「違い(ギャップ)」があると思っています。



もうちょっと詳しくいうと、

「アルゴリズム」では、「(l)層」で計算した結果を「(l-1、t)層」と「(l、tー1)層」へ渡すという構造になっていますよね。つまりコードをみていると「(l-1)層」と「(t-1)層」を意識することになります。




一方

「数式」では、「(l)層」は、「(l+1)層」と「(t+1)層」から作られていることが分かります。



まあ、こちらもDNN同様、分かっている人は、「当然じゃん!」ということなんでしょうが、どんなことであっても初心者は、「当たり前」を知りません、こういうことを教えてくれないとどんなことでも入門段階で無駄な苦労をするんですよねー。


以上です。



コメント

このブログの人気の投稿

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

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

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