通过 Aparapi 进行 GPU 计算
像我之前提到的,神经网络在近些年复兴的一个重要原因是其训练的方法可以高度并行化,允许我们通过GPGPU高效的加速训练。本文中,我选择 库来进行GPU的支持。
Aparapi 在连接计算上强加了一些重要的限制:
- 只允许使用原始数据类型的一维数组(变量)。
- 在GPU上运行的程序只能调用 Aparapi Kernel 类本身的成员函数。
这样,大部分的数据(权重、输入和输出数据)都要保存在 实例里面,其内部是一个一维浮点数组。所有Aparapi 连接计算都是使用 (应用在全连接层和加权求和函数上)、 (应用在下采样层)或 (应用在卷积层)。这些限制可以通过 里介绍的内容解决一些。而且Aparapi 允许相同的代码运行在CPU和GPU上。
训练
的模块实现了多种训练算法。这个模块依赖于上文提到的两个模块。比如, (所有的训练算法都以 为基类)在前馈阶段使用前馈层计算,在误差传播和权重更新时使用特殊的广度优先层计算。
我最新的工作是在Java8环境下开发,其它一些更新的功能可以在这个 下获得,这部分的工作很快会merge到主干上。
结论
本文的目标是提供一个深度学习算法领域的一个简明介绍,由最基本的组成元素开始(感知机)并逐渐深入到多种当前流行且有效的架构上,比如受限波尔兹曼机。
神经网络的思想已经出现了很长时间,但是今天,你如果身处机器学习领域而不知道深度学习或其它相关知识是不应该的。不应该过度宣传,但不可否认随着GPGPU提供的计算能力、包括Geoffrey Hinton, Yoshua Bengio, Yann LeCun and Andrew Ng在内的研究学者们提出的高效算法,这个领域已经表现出了很大的希望。现在正是最佳的时间深入这些方面的学习。