查看原文
其他

“柯洁被让二子”仍不敌AI,盘点程序员必须了解的十大最佳AI库及框架

2018-01-19 陈峻 51CTO技术栈

这一天迟早会来,自李世石 1:4 不敌 AlphaGo 那一天起,每一位围棋人都明白,时代已经提速,未来正踏着比想象中迅疾百倍的步伐汹涌而来。


彼时彼刻 AI 对人类的超越绝不是终点,深度学习加持下的飞速进步,很快就会让人类再也无法在棋盘前与 AI 平等对话,直至降格、让子。无论你是否情愿,都必须面对这个事实。


2018 年 1 月 9 日,装备着最强公开版本的绝艺,身披马甲“绝艺指导 A”,开始了让二子(黑贴 6 目半)对决职业棋手的行程。


1 月 16 日中午击败 NIPOHC(韩一洲七段)首胜银冠棋手(全国冠军),1 月 12—16 日完成 14 连胜,至 1 月 17 日晚八点,共弈 31 局 27 胜 4 负。极高的胜率固然亮眼,却也符合人们对绝艺实力的“预期”。

1 月 17 日这一天,对柯洁来说并不愉快。面对围观群众“和绝艺指导 A 下一盘”的鼓噪,柯洁欣然应允,向绝艺指导 A 发出对局邀请。


惊天动地,职业顶尖棋手——而且是最顶尖的那个,首次在公开对战中成为被让子的一方。这一刻柯洁放下骄傲,选择勇敢。面对强大的 AI,人类展现出了卓越的勇气与潇洒风度。


这是围棋人机大战中的又一个第一次,顶级职业围棋手,在让子棋中负于 AI。更明确一点说,腾讯围棋 AI 绝艺,让二子战胜了当今围棋第一人柯洁。而且整个战局只进行了 77 手,可以说柯洁落败的相当快。


柯洁今天凌晨在微博上说:“以后请叫我佛系棋手… ”,围棋世界第一人,最近心绪有点起伏~


可能未来人机大战的悬念会变成,到底让几子人类才能稳赢。腾讯表示,这次战胜柯洁的绝艺,参考了 2017 年 10 月公开的 AlphaGo Zero 论文,并在实践中做出了改进。


这个版本使用了 40 block dual-resnet 模型,以老版本的绝艺为基础进行强化学习,自对弈了数百万棋局。


据介绍,腾讯在有限的资源和时间内,通过把强化学习和监督学习相结合来加速训练,快速提升了棋力。

眼下,AI 已经成为越来越火的一个方向,程序员对于新技术是最敏感的一个人群,作为一名程序员如何转向人工智能方向?


本文将向您介绍一些在人工智能(AI)领域常被使用的优质软件库,并且分析它们的优/劣势和自身特点。


虽然 AI 曾经被称为只有书呆子和天才才去触碰的专业领域,但是现如今由于各种软件库和框架的发展,它已成为一个更加开放的 IT 领域,很多人都已投身于其中。


现在就让我们来深入了解和探索这个纷繁的 AI 库的世界吧!


TensorFlow


“通过使用数据流图的计算,来实现可扩展的机器学习”,语言:C++ 或 Python。

当提到 AI 的时候,您首先听到的框架应该就是谷歌的 TensorFlow。


TensorFlow 是使用数据流图来执行数值计算的开源库。该框架的特点是它可以利用任何 CPU 或 GPU 进行计算,无论是台式机、服务器、甚至是移动设备的架构都可以实现。这个框架中提供了 Python 语言的编程环境。


TensorFlow 通过所谓的各种节点来分类数据层,并对它所获得的任何信息做出判定。


想了解更多相关信息,可以参看:https://www.tensorflow.org/

优势:

  • 使用一种简单易学的语言--Python。

  • 采用计算图形的抽象。

  • 由 TensorBoard 提供可视化。


劣势:

  • 由于 Python 并非是最快的语言,因此该软件库运行起来并不快。

  • 缺乏各种预先训练好(pre-trained)的模型。

  • 并非完全开源。


微软 CNTK


“一个开源的深度学习工具包”,语言:C++。

我们可以称之为微软对于谷歌 TensorFlow 的“回应”。


微软的计算网络工具包(Microsoft's Computational Network ToolKit,CNTK)是一种能够提高模块化和分离式计算网络的软件库,它还提供了各种学习算法和模型的描述。


在需要有大量服务器参与运行的时候,CNTK 可以利用多台服务器来同步实现。虽然据说它在功能上将会对谷歌 TensorFlow 有所屏蔽,但现在看来还为时过早。


想了解更多相关信息,可以参看:https://github.com/Microsoft/CNTK

优势:

  • 非常灵活。

  • 可实现分布式的训练。

  • 支持 C++,C#,Java 和 Python。


劣势:

  • 它是由一种新的语言--网络描述语言(NetworkDescription Language,NDL)来实现。

  • 可视化不足。


Theano


“一种数值计算的软件库”,语言:Python。

Theano 是 TensorFlow 的强有力竞争者。它是一个功能强大的 Python 库,能够高效地实现与各种多维数组有关的数值运算。


该软件库能够准确地使用 GPU 来执行各种数据密集型的计算,而不会在运行中给 CPU 增加负担。


出于这个原因,在近十年来,Theano 一直被运用于供电系统内部各种大规模的计算密集型操作。


不过在 2017 年 9 月,Theano 宣布将在 2017 年 11 月的最后一次重要发布之后,对其 1.0 版本停止更新。


当然,这并不意味着它在功能上会有所逊色,只要您愿意,对它随时展开研究都是值得的。


想了解更多相关信息,可以参看:https://github.com/Theano/Theano

优势:

  • 对 CPU 和 GPU 的使用进行了适当的优化。

  • 高效的数字任务处理能力。


劣势:

  • 原生的 Theano 相对于其他软件库的水平较低,需要与其他软件库一起使用,以获得较高的抽象水平。

  • 在 AWS 上运行时会有一些 Bug。


Caffe


“深度学习的开放式框架,且速度快”,语言:C++。


Caffe 是一个功能强大的深度学习框架。和上述列表中的其他框架相比,它能够实现快速和有效的深度学习式研究。


通过Caffe,您可以非常容易地为图像分类,建立卷积神经网络(convolutional neural network,CNN)。Caffe 能够有效地工作在 GPU 上,并且在运行过程中能够发挥极快的速度。


想了解更多相关信息,可以参看:http://caffe.berkeleyvision.org/


Caffe 的主要类包括:

优势:

  • 可与 Python 和 MATLAB 绑定。

  • 运行性能极佳。

  • 无需编写代码,便可实现对各个模型的训练。


劣势:

  • 对复发性的网络(recurrent networks)支持不佳。

  • 与新架构的协同性不好。


Keras


“为人类的深度学习而打造”,语言:Python。


Keras 是一个用 Python 编写的开源神经网络库。不像 TensorFlow、CNTK 和 Theano,Keras 并不服务于端到端的机器学习框架。


相反地,作为一个接口,它提供了一个高层次的抽象,这使得无论是在什么样的框架下,神经网络都能够方便地进行配置。


目前谷歌 TensorFlow 能够将 Keras 作为后端予以支持,而微软的 CNTK 是否会在将来支持 Keras,则暂无时间表。


想了解更多相关信息,可以参看:https://keras.io/

优势:

  • 用户友好且容易上手。

  • 容易扩展。

  • 无缝运行在 CPU 和 GPU 上。

  • 能与 Theano 和 TensorFlow 无缝协作。


劣势:

  • 无法作为一个独立的框架被使用。


Torch(火炬)


“一个开源的机器学习库”,语言:C。


Torch 是一个为科研和数值运算打造的、开源的机器学习库。它基于的是 Lua 编程语言,而非 Python 库。通过提供大量的算法,它不但使得深度学习研究更为容易,而且能提高效率和速度。


Torch 具有强大的 N 维阵列,这对于诸如切片和索引等操作是非常有用的。它还提供了线性代数的程序和神经网络的模型。


想了解更多相关信息,可以参看:http://torch.ch/

优势:

  • 非常灵活。

  • 有极高的速度和效率。

  • 具有大量的预先训练好的模型。


劣势:

  • 文档不清。

  • 缺少即插即用的代码。

  • 基于的是一种不那么流行的语言--Lua。


Accord.NET


“支持机器学习、计算机视觉、统计、以及使用.NET的科学计算”,语言:C#。


这是为C#程序员准备的软件库,Accord.NET 是一种 .NET 的机器学习框架,它方便了音频和图像的各种处理。


该框架可以有效地处理数值优化、人工神经网络、甚至可视化等方面。除此之外,Accord.NET 在计算机视觉和信号处理上也具有强大的功能,而且通过一些简单的算法就能实现。


想了解更多相关信息,可以参看:http://accord-framework.net/

优势:

  • 它拥有一个庞大且活跃的开发团队。

  • 具有非常好的文档框架。

  • 可实现质量可视化。


劣势:

  • 该框架并不是非常流行。

  • 比 TensorFlow 要运行得缓慢一些。


Spark MLlib


“一个可扩展的机器学习库”,语言:Scala。


Apache 的 Spark MLlib 是一个极具扩展性的机器学习库。它支持的编程语言有 Java、Scala、Python、甚至是 R 语言。


它能够非常有效地通过 Python 和 R 语言的 Numpy 库(译者注:NumPy 系统是 Python 的一种开源的数值计算扩展)进行交互操作。


MLlib 能够很容易地被植入到 Hadoop 的工作流中。它还能提供诸如分类、回归、归并等机器学习的算法。在涉及到大规模数据处理时,这款功能强大的软件库运行起来非常快。


想了解更多相关信息,可以参看:https://spark.apache.org/mllib/

优势:

  • 能极快速地处理大规模的数据。

  • 支持多种语言。


劣势:

  • 学习曲线“陡峭”(即不易学习)。

  • 只能对 Hadoop 实现即插即用。


Sci-kitLearn


“使用 Python 进行机器学习”,语言:Python。


SCI-Kit 是一款主要用于在机器学习中构建各类模型的、非常强大的 Python 库。


通过使用诸如 Numpy、SciPy 和 Matplotlib 之类的库,它对于诸如分类、回归、归并等统计模型非常有效。SCI-Kit 还能为您带来监管式与无监管式的学习算法、以及交叉验证等功能。


想了解更多相关信息,可以参看:http://scikit-learn.org/


优势:

  • 能支持许多主流的算法。

  • 提供有效的数据挖掘。


劣势:

  • 对于构建模型来说并非是最好的。

  • 使用 GPU 时,效果并非最佳。


MLPack


“一个可扩展的 C++ 类型机器学习库”,语言:C++。


MLPack 是一款利用 C++ 来实现可扩展机器学习的软件库。由于它运行在 C++ 中,因此您完全可以想象到它对内存的高效管理。


由于在库中自带优质的机器学习算法,MLPack 运行起来速度极快。另外,该软件库对于新手来说十分“友好”,它提供了一个简单的 API。


想了解更多相关信息,可以参看:http://mlpack.org/

优势:

  • 扩展性极强。

  • 提供 Python 和 C++ 的绑定。


劣势:

  • 没有优质的文档。


总结


本文在此所讨论到的各种软件库都是在大家长期使用之后,备受好评且高质量的。


像 Facebook、谷歌、雅虎、苹果和微软这样的大公司已经将它们运用到了各自的深度学习和机器学习的项目中。您还有什么理由不去试试呢?


作者:Anton Shaleynikov,陈峻编译

标题:10 Best Frameworks and Libraries for AI

链接:https://dzone.com/articles/progressive-tools10-best-frameworks-and-libraries

编辑:陶家龙、孙淑娟

投稿:有投稿、寻求报道意向技术人请联络 editor@51cto.com


陈峻(Julian Chen) ,有着十多年的 IT 项目、企业运维和风险管控的从业经验,日常工作深入系统安全各个环节。作为 CISSP 证书持有者,他在各专业杂志上发表了《IT运维的“六脉神剑”》、《律师事务所IT服务管理》 和《股票交易网络系统中的安全设计》等论文。他还持续分享并更新《廉环话》系列博文和各种外文技术翻译,曾被(ISC)2 评为第九届亚太区信息安全领袖成就表彰计划的“信息安全践行者”和 Future-S 中国 IT 治理和管理的 2015 年度践行人物。 

精彩文章推荐:

玩微信“跳一跳”我竟然领悟了渗透攻击与测试的诀窍!

我用Python实现了12500张猫狗图像的精准分类

漫画解读:轻松看懂机器学习十大常用算法

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存