自己动手实现深度学习框架-7 RNN层--GRU, LSTM
目标 这个阶段会给cute-dl添加循环层,使之能够支持RNN--循环神经网络. 具体目标包括: 添加激活函数sigmoid, tanh. 添加GRU(Gate Recurrent Unit)实现. 添加LSTM(Long Short-term Memory)实现. 使用基于GRU和LSTM的RNN模型拟合一个正余弦叠加函数. RNN原理 原始的RNN RNN模型用来捕捉序列数据的特征. 给定一个长度为T的输入系列 \(X=(x_1, x_2, .., X_T)\) , RNN层输出一个长度为T的序列 \(H=(h_1, h_2, ..., H_T)\) , 对于任意时间步t, 可以表示为: \[H_t = δ(X_tW_x + H_{t-1}W_h + b), \quad t = 2, 3, .., T \] 函数δ是sigmoid函数: \[δ = \frac{1}{1 + e^{-x}} \] \(H_t\) 包含了前面第1到t-1步的所有信息。 和CNN层类似, CNN层在空间上共享参数, RNN层在时间步上共享参数 \(W_x, W_h, b\) . RNN层中隐藏层的数量为T-2, 如果T较大(超过10), 反向传播是很容易出现梯度爆炸. GRU和LSTM就是为了解决这个问题而诞生, 这两种模型,可以让RNN能够支持长度超过1000的输入序列。 GRU