GoogleのTensorFlowプログラマの親指の記事!
序文
内容:
- ベクトル表現とその寸法
- RNNセル
- RNN前方伝播
焦点を当てます:
- 、その寸法はどのようにデータをどのように定量化することです
- 実際には二つのステップの合計:単一ユニットRNN計算は、プルを介してする計算RNNの
この記事を見て前に、あなたがこの記事のリコールを読むことができます:
アンドリュー・ウdeepLearning.aiリカレントニューラルネットワークRNNの研究ノート(理論セクション)
私たちは、この場合のTx = Tyの中で、構造以下のRNNを実現します。
ベクトル表現とその寸法
単位のNX番号を入力
-
単一の入力サンプル、X(i)は、一次元入力ベクトルです。
-
例えば言語、Xは(i)は次元(5000)であるように、ワンホットベクター5K単位で符号化して5K言語の語彙を有します。
-
私たちは、シンボルNXを持つ単一の訓練サンプルの単位の数を示します。
サイズのバッチ M
-
我々は少量(ミニバッチ)を取る場合は、20サンプルの各バッチを訓練があります。
-
ベクトル化から利益を得るために、我々は20個のサンプルは、2次元アレイ(マトリックス)中に(I)×あろう。
-
そのような寸法は、(5000,20)ベクトルです。
-
私たちは、訓練サンプルの数を表すためにメートルを使用します。
-
トレーニングデータの少量の寸法が(NX、m)となります。
サイズの時間ステップ のTx
-
リカレントニューラルネットワークは、私たちが表現するためにトンを使用して、より多くの時間ステップがあります。
-
私たちは、複数の時間を経験するトレーニングサンプルx(i)を参照されますTxは、手順、例えば、その後のTx = 10 10時間ステップは、存在する場合。
形状の三次元テンソル (NX、M、テキサス州)
-
寸法入力xが使用されている三次元テンソルを表すために(NX、M、テキサス州)です。
各時間ステップのための2Dスライスをとります。
-
すべての時間ステップは、我々は学習データ(個々のない学習サンプル)の少量を使用します。
-
したがって、各時間ステップtのために、我々は、次元が2次元スライスの(NX、M)である使用します。
-
私たちは、XTとしてそれを表します。
隠された次元
-
定義:別の時にはステップ活性値へのステップからの時間、我々は隠され、それを呼び出します。
-
個々のトレーニングサンプルのステータスを非表示にする入力を持つテンソルXは、それがベクトルNAの長さです。
-
我々は、訓練サンプルのm個のデータの少量を含む場合には、寸法が少量(NA、M)です。
-
我々はリストに追加のステップに時間がかかる場合は、隠された次元がある(NA、M、テキサス州)。
-
各操作は、2次元ベクトルに三次元テンソルからスライスであるため、我々は、トラバース時間ステップtにインデックスを使用します。
-
我々は、二次元スライスで表され、その寸法は(NA、M)です。
予測値y ^寸法
-
そしてy ^が寸法である、として入力xと隠された三次元テンソルの(NY、M、Tyの)です。
-
NY:予測値の代わりに単位数。
-
M:トレーニング小さいバッチのサンプル数。
-
TY:時間予測の数。
-
例えば、単一の時間ステップt、寸法Yの二次元スライスは^(NY、M)です。
RNNセル
我々の最初のタスクは、以下のように計算され、計算の単一の時間ステップを実行することです。
入力^ <T-1>で、XTは、出力で、YT ^です。次のコードは、実際に、総ステップ4の手順を上記の式をコーディングされます。
-
パラメータを削除します。
-
で算出しました。
-
^ YTを計算します。
-
戻り出力で、YT ^、だけでなく、キャッシュされたいくつかの値を格納します。
NPとしてインポートnumpyの DEF rnn_cell_forward(XT、a_prev、パラメータ): 「」」 実装し、図に記載されているようにRNN細胞の単一前進工程(2) 引数: XT -タイムステップにおける入力データ『T』 、形状(n_x、M)のnumpyのアレイ。 a_prev -タイムステップにおける隠れ状態"T-1"形状のnumpyのアレイ(N_A、m)の パラメータ- Pythonの辞書を含む: ワックス-重み行列が入力を乗算し、numpyの形状のアレイ(N_A、n_x)WAA -隠された状態を乗算する重み行列、形状のnumpyのアレイ(N_A、N_A) WYA -形状の出力に隠された状態に関連する重み行列、numpyのアレイ(n_y、N_A) BA -バイアス、形状のnumpyのアレイ(N_A、1) -バイアス出力に隠された状態に関連して、形状のnumpyのアレイ(n_y、1) 戻り値: a_next -次隠れ状態、形状の(N_A、M) yt_pred - 「T」タイムステップにおける予測、numpyのアレイ形状(n_y、M)の キャッシュ-復路のために必要な値の組、(a_next、a_prev、XT、パラメータ)を含む "" " #取计算的参数 ワックス=パラメーター[ "ワックス"] WAA =パラメーター[" WAA "] WYA =パラメーター[" WYA "] "] BA =パラメーター[ "BA =パラメータで[" "]によって #用公式计算下一个单元的激活值 a_next = np.tanh(np.dot(WAA、 a_prev)+ np.dot(ワックス、XT)+ BA) セルの出力電流を算出# =のSoftMaxは(np.dot(WYA、a_next)+によって)yt_pred 逆方向伝搬のため#キャッシュされた値 キャッシュ=(a_next、a_prev、XT、パラメータ) リターンa_next、yt_pred、キャッシュ
RNN前方伝播
-
上記で作成したRNNリカレントニューラルネットワークは、常に単位を繰り返しています。
-
あなたの入力したデータ系列は10時間ステップである場合は、あなたのRNNセルを10回繰り返す必要があります。
-
各時間ステップにおいて、二つの入力を有する単位の各々:
-
<T-1>:隠されたユニット前の状態。
-
XT:現在の入力データの時間ステップ。
-
これは、2つの出力各時間ステップがあります。
-
隠された状態A T
-
測定値^ Y ⟨t⟩
-
重みおよびバイアス (WAA、BA、ワックス、BX ) 各時間ステップにおける意志サイクルが、それらは、「パラメータ」変数に格納されています。
DEF rnn_forward(X、A0、パラメータ): 「」」 図に記載リカレントニューラルネットワーク(3)の前方伝播を実装する。 引数: X -すべての時間ステップのための入力データ、形状(n_x、Mの、 T_x)。 A0 -初期隠れ状態、形状の(N_A、m)の パラメータ-を含むPythonの辞書: WAAを-隠された状態を乗算する重み行列、形状のnumpyのアレイ(N_A、N_A) ワックス-重み行列を乗算します形状の入力、numpyのアレイ(N_A、n_x) WYA -出力に隠された状態に関連する重み行列、形状のnumpyのアレイ(n_y、N_A) 形状のバイアスnumpyのアレイ(N_A、1) - BA によって-出力に隠された状態に関連するバイアス、形状(n_y、1)のnumpyのアレイ 戻り値: A -隠し-STEP国のために毎回、numpyのアレイ状の(N_A、M、T_xは) y_pred -毎回-STEPのための予測、アレイ状のnumpyの(n_y、M、T_x) キャッシュ-タプルを復路の値に必要なの(キャッシュ、Xのリスト)が含ま "「」 #全てのキャッシュメモリのリストを、それが初期化 キャッシュ= [] # いくつかの緯度、後でのための初期化変数撤回 n_x、Mを、T_x = x.shape n_y、N_A =パラメータ[ "WYA"]。シェイプ #初期化およびy_pred np.zeros =((N_A、M、T_x)) np.zeros =((n_y、M y_predをt_x)) #初期a_next a_next = A0 INPUT「X」の全ての時間ステップにわたって#ループ 範囲でT用(T_x): #更新次に隠れ状態、計算予測は、GETキャッシュ XT = X [:、:、T]からのスライス方法により#除去された入力変数は、現在の時間ステップTのXT入力xは a_next、yt_pred、キャッシュrnn_cell_forward =(XT、a_next、パラメータ) a_next電流値算出手段に保存# [:、:、T] = a_next #現在のユニット保存予測値Yは y_pred [:、:、Tは= yt_pred #単位の値ごとにキャッシュを追加 caches.append(キャッシュ) キャッシュに伝播するために必要#下位ストア値 キャッシュ=(キャッシュ、X)は 、返さy_pred、キャッシュ
あなたが持っておめでとうございます(* ^▽^ *)、0から1まで前方に伝播ニューラルネットワークプロセスサイクルを構築することができるようにします。
現代の深い学習の枠組みでは、あなただけの実装前に合格する必要があり、フレームワークを提供するために後処理ので、ほとんどのエンジニアは、ケアの後に渡すために、詳細の深さを学ぶ必要はありません。私は戻って広がりを書いていません。