在本节,我们将初步了解强大的Theano库,它能让我们使用Python高效地进行机器学习模型的训练。Theano最初是由Joshua Bengio领导的LISA(Laboratoire d'Informatique des Systèmes Adaptatifs)实验室[1]于2008年开发的。
在深入探究Theano到底是什么,以及它是如何提高机器学习任务处理速度之前,我们先来讨论一下当硬件运行极度耗费运算能力的程序时将会面临的挑战。幸运的是,计算机处理器的性能多年来持续提高,这使得我们可以训练更加强大、复杂的学习系统,从而提高机器学习模型的预测性能。即使是现在最便宜的计算机,其中央处理器也是多核的。在前面章节中,我们看到scikit-learn中的许多函数都可以通过使用多核处理器来提高计算性能。默认情况下,由于全局解释器锁(Global Interpreter Lock,GIL)的缘故,Python代码在执行时只能使用其中一个核。不过,尽管可以使用多线程运行(multiprocessing)库将计算分布到多个核上并行执行,我们也必须意识到,即使最先进的桌面硬件也很少能提供超过8个或者16个核心的计算单元。
回想上一章中,我们实现了一个非常简单的多层感知器模型,虽然它只有一个包含50个节点的隐层,但我们已经需要通过学习来优化大约1000个权重以完成一个非常简单的图像识别任务。MNIST库中的图像是非常小的(只有28×28像素),对于像素密度更高的图像来说,如果我们通过增加额外的隐层对其进行处理,那么可以想象参数数量将会呈现爆炸式增长。随着图像像素的增加,仅使用一个CUP来对其进行处理很快就会变得不可行。现在面临的问题是我们如何才能更加高效地处理此类问题?一个明显的解决方案就是使用GPU。GPU的性能确实很强大,读者可以将显卡看作是我们电脑中的一个小型计算机集群。另一个优势就是,与最新的CPU相比,GPU价格相对低廉,具体比较信息如下图所示:
以上信息来源于如下网站(2015年8月20日):
·http://www.geforce.com/hardware/desktop-gpus/geforce-gtx-980-ti/specifications
·http://ark.intel.com/products/82930/Intel-Core-i7-5960X-Processor-Extreme-Edition-20M-Cache-up-to-3_50-GHz
一块价格只有CPU 70%的GPU,内核数量却是前者的450倍,而且每秒浮点运算次数也是前者的15倍以上。那么是什么原因阻碍了我们使用GPU来执行机器学习任务呢?我们面临的挑战是:编写执行于GPU的代码不像在解释器中执行Python代码那样方便快捷,我们需要特殊的功能包,如CUDA和OpenCL等。但是,对于实现并运行机器学习算法来说,编写基于CUDA或者OpenCL的代码并不是最好的方案。好消息是,开发出Theano就是用来解决GPU上机器学习的问题。
[1] http://lisa.iro.umontreal.ca.