随着 TensorFlow 和 PyTorch 等框架的流行,很多时候搭建神经网络也就调用几行 API 的事。大多数开发者对底层运行机制,尤其是如何使用纯 NumPy 实现神经网络变得比较陌生。以前机器之心曾介绍过如何使用 NumPy 实现简单的卷积神经网络,但今天会介绍如何使用 NumPy 实现 LSTM 等循环神经网络。
一般使用纯 NumPy 实现深度网络会面临两大问题,首先对于前向传播,卷积和循环网络并不如全连接网络那样可以直观地实现。为了计算性能,实践代码与理论之间也有差别。其次,我们实现了前向传播后还需要继续实现反向传播,这就要求我们对矩阵微分和链式法则等数学基础都有比较充足的了解。
尽管 NumPy 不能利用 GPU 的并行计算能力,但利用它可以清晰了解底层的数值计算过程,这也许就是为什么 CS231n 等课程最开始都要求使用 NumPy 手动实现深度网络吧。
项目地址:https://github.com/krocki/dnc
在这个项目中,作者主要使用 NumPy 实现了 DNC、RNN 和 LSTM,其中 RNN 代码借鉴了 A.Karpathy 以前写过的代码。此外,作者还写了 Gradient check 以确定实现的正确性,是不是感觉自深度学习