在上期的,我们盘点了TensorFlow,CNTK,SystemML,DeepMindLab等各大互联网巨头的开源平台。本期,雷锋网将带领大家来看看诞生于民间(学界)的另外四大开源项目:谷歌、微软、OpenAI等巨头的七大机器学习开源项目看这篇就够了
1.Theano
Theano在深度学习框架中是祖师级的存在。它的开发始于,早期开发者包括传奇人物YoshuaBengio和IanGoodfellow。
Theano基于Python,是一个擅长处理多维数组的库(这方面它类似于NumPy)。当与其他深度学习库结合起来,它十分适合数据探索。它为执行深度学习中大规模神经网络算法的运算所设计。其实,它可以被更好地理解为一个数学表达式的编译器:用符号式语言定义你想要的结果,该框架会对你的程序进行编译,来高效运行于GPU或CPU。
它与后来出现的Tensorflow功能十分相似(或者应该说,Tensorflow类似Theano),因而两者常常被放在一起比较。它们本身都偏底层,同样的,Theano像是一个研究平台多过是一个深度学习库。你需要从底层开始做许多工作,来创建你需要的模型。比方说,Theano没有神经网络的分级。
但随着这些年的发展,大量基于Theano的开源深度学习库被开发出来,包括Keras,Lasagne和Blocks。这些更高层级的wrapperAPI,能大幅减少开发时间以及过程中的麻烦。甚至,据雷锋网所知,很少开发者会使用“裸奔”的Theano,多数人需要辅助的API。顺便说一句,Theano是一整套生态系统,别只用它裸奔,然后抱怨不好用。
在过去的很长一段时间内,Theano是深度学习开发与研究的行业标准。而且,由于出身学界,它最初是为学术研究而设计,这导致深度学习领域的许多学者至今仍在使用Theano。但随着Tensorflow在谷歌的支持下强势崛起,Theano日渐式微,使用的人越来越少。这过程中的标志性事件是:创始者之一的IanGoodfellow放弃Theano转去谷歌开发Tensorflow。
因此,资深一些的开发者往往认为,对于深度学习新手,用Theano练练手并没有任何坏处。但对于职业开发者,还是建议用Tensorflow。
优点:
Python+NumPy的组合使用计算图RNN与计算图兼容良好有Keras和Lasagne这样高层的库不少开发者反映,它的学习门槛比Tensorflow低
缺点:
本身很底层比Torch臃肿不支持分布式有的错误信息没什么用大模型的编译时间有时要很久对事先训练过的模型支持不足用的人越来越少
2.Caffe
这又是一个祖师级的深度学习框架,年就已问世。
它的全称是“ConvolutionArchitectureForFeatureExtraction”,意为“用于特征提取的卷积架构”,很明白地体现了它的用途。Caffe的创始人,是加州大学伯克利分校的中国籍博士生贾扬清。当时贾在伯克利计算机视觉与学习中心做研究。博士毕业后,他先后在谷歌和Facebook工作。
在AI开发者圈子中,Caffe可以说是无人不知、无人不晓。据GitHub最新的机器学习项目热度排名,Caffe仅位列Tensorflow之后,雄踞第二。它是一个被广泛使用的机器视觉库,把Matlab执行快速卷积网络的方式带到C和C++。虽然Caffe被部分开发者看做是通用框架,但它的设计初衷是计算机视觉——并不适于其他深度学习应用,比如文字、语音识别和处理时间序列数据。
Caffe的主要用途:利用卷积神经网络进行图像分类。这方面它代表了业内一流水平,是开发者的首选。
说到Caffe,就不得不提ModelZoo。后者是在Caffe基础上开发出的一系列模型的汇聚之地。因此,开发者使用Caffe最大的好处是:能在ModelZoo海量的、事先训练好的神经网络中,选择贴近自己使用需求的直接下载,并立刻就能用。
就雷锋网所知,这些模型中有很多是世界一流的。有很多它们的教程:
Alex’sCIFAR-10tutorialwithCaffeTrainingLeNetonMNISTwithCaffeImageNetwithCaffe
业内人士普遍认为,Caffe适合于以实现基础算法为主要目的的工业应用,有利于快速开发。但对于处理较特殊的任务,它存在灵活性不足的问题——为模型做调整常常需要用C++和CUDA,虽然Python和Matlab也能做些小调整。
优点:
非常适合前馈神经网络和图像处理任务
非常适于利用现有神经网络
不写代码也能训练模型
Python交互界面做得不错
缺点:
需要C++和CUDA来编写新GPU层级。
在循环神经网络上表现不佳
对于大型神经网络,它十分繁琐(GoogLeNet,ResNet)
没有商业支持
3.Torch
相比其他开源框架,Torch是一个非主流。
没错,说的就是它的开发语言:基于年代诞生于巴西的Lua,而非机器学习界广泛采用的Python。其实Lua和Python都属于比较容易入门的语言。但后者明显已经统治了机器学习领域,尤其在学界。而企业界的软件工程师最熟悉的是Java,对Lua也比较陌生。这导致了Torch推广的困难。因此,虽然Torch功能强大,但并不是大众开发者的菜。
那么它强大在哪里?
首先,Torch非常适用于卷积神经网络。它的开发者认为,Torch的原生交互界面比其他框架用起来更自然、更得心应手。其次,第三方的扩展工具包提供了丰富的递归神经网络(RNN)模型。
因为这些强项,许多互联网巨头开发了定制版的Torch,以助力他们的AI研究。这其中包括Facebook、Twitter,和被谷歌招安前的DeepMind。
与Caffe相比,在Torch里定义一个新层级比它要容易,因为你不需要写C++代码。和TensorFlow和Theano比起来,Torch的灵活度更高,因为它是命令式的;而前两者是陈述式的(declarative),你必须declare一个计算图。这使得在Torch上进行束搜索(beamsearch)这样的操作要比它们容易得多。
Torch的热门应用:在增强学习领域,用卷积神经网络和代理处理图像问题。
兴趣主要在增强学习的开发者,Torch是首选。
优点:
灵活度很高高度模块化容易编写你自己的层级有很多训练好的模型
缺点:
需要学Lua通常需要自己写训练代码不适于循环神经网络没有商业支持
4.SciKit-learn
SciKit-learn是老牌的开源Python算法框架,始于年的GoogleSummerofCode项目,最初由DavidCournapeau开发。
它是一个简洁、高效的算法库,提供一系列的监督学习和无监督学习的算法,以用于数据挖掘和数据分析。SciKit-learn几乎覆盖了机器学习的所有主流算法,这为其在Python开源世界中奠定了江湖地位。
它的算法库建立在SciPy(ScientificPython)之上——你必须先安装SciPy才能使用SciKit-learn。它的框架中一共包括了:
NumPy:基础的多维数组包SciPy:科学计算的基础库Matplotlib:全面的2D/3D测绘IPython:改进的交互控制器Sympy:符号数学Pandas:数据结构和分析
它命名的由来:SciPy的扩展和模块在传统上被命名为SciKits。而提供学习算法的模组就被命名为scikit-learn。
它与Python世界另一大算法框架——TensorFlow的主要区别是:TensorFlow更底层。而SciKit-learn提供了执行机器学习算法的模块化方案,很多算法模型直接就能用。
优点:
经过筛选的、高质量的模型覆盖了大多数机器学习任务可扩展至较大的数据规模使用简单
缺点:
灵活性低
5.MXNet
提到出身学界的开源框架,就不得不提MXNet。不过,因为亚马逊已将其作为御用平台,因而上期的盘点()中已经对其作了介绍。有兴趣的读者请戳链接。谷歌、微软、OpenAI等巨头的七大机器学习开源项目看这篇就够了