私はLSTM細胞がどのように働くかを私自身の理解から、最初からLSTMネットワークを構築しています。無階層のLSTMネットワークをゼロから構築する、順方向パスと逆方向パスを行う方法?
レイヤーがないので、私はチュートリアルの方程式のベクトル化されていない形式を実装しようとしています。私はまた、細胞の状態から覗き穴を使用しています。
これまでのところ、私はそれがこのようになっていることを理解して:私は往路用ゲートの各々のためにこれらの式を作ったことでLSTM network
:
そのため_wの平均体重i_t = sigmoid(i_w * (x_t + c_t) + i_b)
f_t = sigmoid(f_w * (x_t + c_t) + f_b)
cell_gate = tanh(c_w * x_t + c_b)
c_t = (f_t * c_t) + (i_t * cell_gate)
o_t = sigmoid(o_w * (x_t + c_t) + o_b)
h_t = o_t * tanh(c_t)
バイアスのためにそれぞれのゲートと_b。また、私は最初のS字状の名前を "cell_gate"の左端に付けました。
バックパスとは、私にとっては曖昧なものですが、これらの式を正しく引き出す方法がわかりません。
私は一般的にエラーを計算することを知っていますが、方程式はerror = f '(x_t)*(received_error)です。ここで、f '(x_t)は活性化関数の一次導関数であり、received_errorは出力ニューロンの場合は(target-output)、隠れニューロンの場合はΣ(o_e * w_io)のいずれかになります。
ここで、o_eは現在のセルが出力するセルの1つのエラーで、w_ioはそれらを接続する重みです。
LSTMセル全体がニューロンと見なされるかどうかはわかりません。そのため、各ゲートをニューロンとして扱い、それぞれのエラー信号を計算しようとしました。その後...バックネットワークを渡すために単独で細胞ゲートからの誤差信号を使用:
o_e = sigmoid'(o_w * (x_t + c_t) + o_b) * (received_error)
o_w += o_l * x_t * o_e
o_b += o_l * sigmoid(o_b) * o_e
...ゲートの残りの部分は同じフォーマットに従う...
を次にためのエラーLSTMセル全体はo_eに等しい。
そして、現在のセルの上LSTM細胞のために、それは受信エラーがに等しいです:
tanh'(x_t) * ∑(o_e * w_io)
はこのすべて正しいですか?私は何か完全に間違っているのですか?