分岐演算では勾配が加算されることになります。これは分岐演算する状態変数の数が増加しても同じことになります。ついての誤差逆伝播をまとめておきましょう。図5に示す通りベクトルや行列になりますが、誤差逆伝播の基本的な考え方はスカラー値の場合と同じです。h_j}\)も\(h_j\)と同次元の行ベクトルになるという点です。ベクトルや行列の形状に注意しながら、上記の加算演算や乗算演算の知識を使えば、次式を得ることができます。ここで、右肩に\(T\)を付けて転置行列を表示していますので、\((w_{ij})^T\)は\(w_{ij}\)の転置行列を意味します。誤差逆伝播をまとめておきましょう。Embedding層の演算は、重み\(w_{ij}\)の\(i\)行を抽出して隠れ層(単語ベクトル層)の\(t\)行に挿入するというものです。\(V\)はそのシステムにおける語彙数ですので、採用しているシステムにより数万~100万語程度とかなり大きな値となります。分岐演算の誤差逆伝播の項で説明した通り、その逆伝播は誤差を加算することになります。隠れ層の\(t\)行の誤差を抽出して重み\(w_{ij}\)の\(i\)行の誤差に加算して行くということがEmbedding層の誤差逆伝播になります。述べた通り、RNNの実装の際には大量のデータをまとめて処理するバッチ処理が行われますが、その際にはバッチ処理の部分と時刻処理の部分を切り離して処理することになります。RNN層の誤差逆伝播もこの考えに従って計算して行きます。RNN層の単一時刻における誤差逆伝播まず、バッチ処理を行う際の単一時刻における誤差逆伝播についてまとめておきましょう。(5)式に従えば、RNN層の計算情報の流れや誤差の逆伝播は図7のように表現できます。ここでは表現を簡単化するため、第\(L\)層である隠れ層に下流側から伝播する誤差を次式で定義します。)_t\)と表現していますので、\((h_{nj}^{(L)})_t\)は\(h_{ntj}^{(L)}\)の時刻\(t\)の要素であることを意味しています。\(\tanh\)関数が行列の要素ごとに作用しているため、逆伝播も要素ごとを掛け合わせるアダマール積が使用されることになります。隠れ層の状態\((h_{nj}^{(L)})_t\)と次元を一致させるためNumPyのブロードキャストという機能を使用して\(n\)方向に値をコピーしています。このため、\(b_{j}^{(L)}\)へ伝播する誤差は分岐演算の誤差逆伝播と同様、\(n\)方向に値を加算して求められます。\]さらに、第\(L-1\)層および時系列変数\(t-1\)の隠れ層の状態変数や重みへ逆伝播する誤差は、次式で表すことができます。ここで、右肩に\(T\)を付けて転置行列を表示していますので、\((w_{ij}^{(L)})^T\)は\(w_{ij}^{(L)}\)の転置行列を意味します。以上で、時刻\(t\)におけるRNN層の各要素の逆伝播が計算ができました。見落としがちな二点の注意点を示しておきましょう。加算した値を使用して、次式のように与えなければなりません。)\)は、RNN層の単一時刻における誤差逆伝播の式である(16)式から(20)式をまとめて表示した関数と考えてください。図4に示す通り、RNN層の時刻t要素の出力は2つに分岐していますので、その逆伝播は加算することになります。b_{j}^{(L)}\)は、時刻\(t\)に関して合計を取る必要がある点です。\(t\)方向に重みやバイアスが分岐していることに相当しているためです。述べた通り、LSTMはRNNの弱点であった長期依存性のある言語モデルの学習おける勾配消失が起こりにくくなっていますので、広く活用されている技術です。ここでは、このLSTM層の誤差逆伝播についてまとめておきましょう。LSTM層の時系列行列の誤差逆伝播はRNN層と同じですので、ここではLSTM層の単一時刻における誤差逆伝播のみ記述しておきます。a_{nj}^{(L)})_t\)は、次式で表されます。tanh関数やシグモイド関数を通過後のセル状態の新たな候補やゲートへ逆伝播する誤差などは次式で表現されます。使用すれば、アフィン層へ伝わる誤差は、次式のようにまとめることができます。A_{nj}^{(L)})_t\)が計算できましたので、その前にあるアフィン変換の逆伝播はRNN層の(16)式~(20)式をLSTMの変数を使用して書き直すだけです。第\(L-1\)層や時系列変数\(t-1\)の隠れ層の状態変数、重みやバイアスへ逆伝播する誤差は以下のように表すことができます。ここで、右肩に\(T\)を付けて転置行列を表示していますので、\((w_{ij}^{(L)})^T\)は\(w_{ij}^{(L)}\)の転置行列を意味します。以下に示すようなをbackward()というとてもシンプルなPythonの関数として実装することができます。どのページでもご自由にリンクして下さい。こちらからメールをご送付下さい。-172.31.37.45。