这是一个没有使用深度学习框架,只借助Python和Numpy实现的RNN网络。由于没有类似Pytorch的自动求梯度的功能,我们需要手动计算Loss到网络各层参数的梯度,这涉及到数学公式的推导,我们将数学公式的推导过程呈现在README文档中。 如果文档不能正常显示数学公式,请移步我的博客 Recurrent Neural Networks 查看。
conda create --name env_for_rnn python=3.9 numpy pandas matplotlib sympy ipykernel scikit-learn
conda activate env_for_rnn
网络的输入是一串m维向量序列
网络的状态是一串n维向量序列
网络的输出是一串m维的向量序列
网络在
(下面的推导式中省略了偏置项
网络在每个
记输出层
向量化计算梯度
记循环层
关于矩阵U的偏导
由上面的记号,
下面的公式推导出一个
由这个递推式可以得到
计算
计算
计算
实际计算中我们会一步一步地计算
计算
计算
最后结果U的梯度
计算
计算
计算
最后结果W的梯度
关于偏置项
计算
最后结果