RNN を考える
RNN って何かというと Recurrent Neural Network 再起構造型ニューラルネットワークの意味。
再帰構造型の意味って何かというと、前回のニューロンの出力と現在の入力を引数にして「前回の状態を含めて判断する」ニューラルネットのこと。
普通、ニューラルネットを扱うとき、活性関数を 学習データを とし、重み バイアス とすると ニューロンの作りは
ということになる。
ただしこれはその時点でのデータとしたときの問題で、前の状態が次の状態に影響するようなデータには正常に適用できない。
そこで、RNN ではデータ のある時点のデータを と仮定して
こんな感じに前回のニューロン応答に追加の重み を加えて取り込む動作をする。
少し展開するとこんな感じ
RNN の活性関数には をよく使われてる。
これはこんな関数らしい
もう少しシンプルな書き方で一般化して
逆伝播
これを微分するのかー(汗
連鎖律(下式)使って
で、次の様に定義して
は一つ前の出力層から拾ってこれて、 は活性関数の偏微分。
から偏微分するとした場合
これを偏微分すれば $w$ の無い項は消失するので
置き換えすると
の偏微分も考えると同様な展開して
バイアスなんかはもっと単純に
ここから特定時刻の入力 [tex: x^{(t)}i ] の勾配を考えると、ニューロン毎の $u^{(t)}k$ を挟んだ連鎖律を使って求める。
ここで なので
は
なので、 の偏微分なら を含まない項は消えるので、
通して
前の時刻の出力の勾配を考えると