返回 登录
0

深度对话贾扬清:Caffe与深度学习的现在与未来

在深度学习(Deep Learning)的热潮下,Caffe作为一个高效、实用的深度学习框架受到了广泛的关注。了解Caffe研发的背景、愿景、技术特色、路线图及其开发者的理念,对于我们选择合适的工具更好地进行深度学习应用的迭代开发大有裨益。《程序员》记者近日深度对话Caffe作者贾扬清,剖析Caffe的起源、目标、差异性、现存的一些问题和改进工作,以及未来的规划。

部分观点摘录如下:

安装和配置的改进

Caffe的安装和配置的确是一个比较让人头疼的问题,特别是如果不熟悉Linux或者不在Linux的系统上的话,安装Caffe可能需要不少的一段时间。最近我们也在社区的帮助上面做一些改进,主要是:
1.NVIDIA在帮助我们将Caffe放到apt-get系统里面,使得将来可以直接apt-get install caffe;
2.我们在完善各个layer的文档,使得大家更容易地实现一些自己的算法;
3.在protobuf上,我们加入了Python Wrapper,可以借助简单的Python函数来定义网络,而不是写一个巨大的protobuf(GoogLeNet如果手写有两千多行… 的确有点发指)。
4.我在简化一些Caffe的依赖关系,使得我们不需要编译所有的库(比如说leveldb,HDF5等等)也可以使用Caffe,或者可以根据自己需要选择相应地库文件来编译。

总的来说,因为是个C++的框架,所以使用Caffe还是有一定的门槛,如果大家遇到问题,也可以在caffe-users@googlegroups.com上面发信交流。

Theano和Caffe

Theano和Caffe的定位稍微有点不同:Theano主要定位在更加容易地做一些快速的研究和迭代上,所以实现的方法很多时候是基于Python以及底层的C转译的。这样做的好处是可以更加容易地修改代码,但是优化上就不那么容易。我的感觉是,可以采用Python这样的语言来做很快的迭代,但是等到确定一个具体的算法以后,可能还是需要转成C++/CUDA的代码来达到比较好的速度。从这一点上,Caffe提供了Python Layer来帮助做一些prototype,应该会有帮助。

优化技巧

说到通用的优化技巧,我的经验就是从简单的实现开始,寻找到瓶颈以后再做具体的优化。一个比较直接的例子是Caffe的卷积层:我当时使用了一个将它转化为矩阵乘积的方法来进行计算,虽然相对比较耗费内存,但是在实际应用中一度是最快的实现。后来因为卷积在Deep Learning当中的重要性,大家纷纷开始实现更加有效的算法(比如说cuDNN),解决了最初实现中的种种问题。

另外,我个人觉得在研究生阶段,特别是机器学习的研究生阶段,学一点实际的编程语言(比如C++和Python)是很有帮助的,我以前大部分程序都在Matlab下实现,但是改用C++和Python以后,发现Matlab下很难实现的很多优化,比如说多GPU,多个机器的通信等等,可以非常容易地实现出来,于是就不再用Matlab了(听起来有点广告嫌疑…)。

并行版本

Caffe并行的实现应该很快就会整合进来,因为其实实现本身并不困难:我最近几次报告都提到了基于MPI的实现方法。目前在伯克利我们有一个基于自己的机群所编写的并行实现,Yahoo/Flickr在github上也有一个并行实现的pull request。什么时候并入caffe的master branch其实主要是人手的问题,大家都在忙于实现新的算法,没有太多精力处理代码库的问题…

原文链接贾扬清:希望Caffe成为深度学习领域的Hadoop

评论