时序网络基础知识
RNN
前向传播
t t t、 t − 1 t-1 t−1、 t + 1 t+1 t+1为时间序列, s t s_t st表示样本在时间 t t t处的的记忆, s t = f ( W ∗ s t − 1 + U ∗ x t ) s_t=f(W*s_{t-1} +U*x_t) st=f(W∗st−1+U∗xt), W W W表示上一个时间记忆的输入权重, U表示此刻输入样本的权重, V表示输出的样本权重。
在 t = 1 t =1 t=1时刻, 一般初始化输入 s 0 = 0 s_0=0 s0=0, 随机初始化 W W W、 U U U、 V V V,进行下面的公式计算:
h t = U x t + W s t − 1 h_t=Ux_t+Ws_{t-1} ht=Uxt+Wst−1
s t = f ( h t ) s_t=f(h_t) st=f(ht)
o t = g ( V s t ) o_t=g(Vs_t) ot=g(Vst)
其中, f f f和 g g g均为激活函数,其中 f f f可以是 t a n h tanh tanh, r e l u relu relu, s i g m o i d sigmoid sigmoid等激活函数, g g g通常是 s o f t m a x softmax softmax也可以是其他。
注意:
- 这里的 W W W、 U U U、 V V V在每个时刻都是相等的(权重共享)。
- 隐藏状态可以理解为: s = f ( 现 有 的 输 入 + 过 去 记 忆 总 结 ) s=f(现有的输入+过去记忆总结) s=f(现有的输入+过去记忆总结)。
- 多层RNN只是多个RNN堆叠,一个RNN即一层,每一层的输出即为下一层的输入。
反向传播
参数的更新采用梯度下降法进行更新,也就是求每个参数的梯度。
每一次的输出值 O t O_t Ot都会产生一个误差值 e t e_t et, 则总的误差可以表示为: E = ∑ t = 1 n e t E=\sum_{t=1}^ne_t E=∑t=1net
d U = ∂ E ∂ U = ∑ t = 1 n ∂ e t ∂ o t ∂ o t ∂ s t ∂ s t ∂ U dU=\frac{\partial{E}}{\partial{U}}=\sum_{t=1}^n\frac{\partial{e_t}}{\partial{o_t}}\frac{\partial{o_t}}{\partial{s_t}}\frac{\partial{s_t}}{\partial{U}} dU=∂U∂E=∑t=1n∂ot∂et∂st∂ot∂U∂st
d V = ∂ E ∂ V = ∑ t = 1 n ∂ e t ∂ o t ∂ o t ∂ V t dV=\frac{\partial{E}}{\partial{V}}=\sum_{t=1}^n\frac{\partial{e_t}}{\partial{o_t}}\frac{\partial{o_t}}{\partial{V_t}} dV=∂V∂E