循环神经网络(Recurrent Neural Network, RNN)
假设 Xt∈Rn×d X t ∈ R n × d 是序列中时间步 t 的小批量输入 Ht∈Rn×h H t ∈ R n × h 该时间步的隐藏层变量。跟多层感知机不同在于这里我们保存上一时间步的隐藏变量 Ht−1 H t − 1 并引入一个新的权重参数 Whh∈Rh×h W h h ∈ R h × h ,它用来描述在当前时间步如何使用上一时间步的隐藏变量。具体来说,当前隐藏变量的计算由当前输入和上一时间步的隐藏状态共同决定:
Ht=ϕ(XtWxh+Ht−1Whh+bh), H t = ϕ ( X t W x h + H t − 1 W h h + b h ) ,
这里隐藏变量捕捉了截至当前时间步的序列历史信息,就像是神经网络当前时间步的状态或记忆一样,因此也称之为隐藏状态。
Ot=HtWhy+by. O t = H t W h y + b y .
def rnn(inputs, state, params):
# inputs 和 outputs 皆为 num_steps 个形状为(batch_size, vocab_size)的矩阵。
W_xh, W_hh, b_h, W_hy, b_y = params
H, = state
outputs = []
for X in inputs:
H = nd.tanh(nd.dot(X, W_xh) + nd.dot(H, W_hh) + b_h)
Y = nd.dot(H, W_hy) + b_y
outputs.append(Y)
return outputs, (H,)
深度循环神经网络
H(1)t=ϕ(XtW(1)xh+H(1)t−1W(1)hh+b(1)h), H