谷歌为什么开源开源的TensorFlow可以如何应用,用什么语言可以修改

【编者按】本文作者李理 人工智能科技公司出门问问NLP工程师。

这两天发现朋友圈被Google开源深度学习系统TensorFlow的新闻刷屏了这当然是一个很好的消息,尤其对我们这种用机器學习来解决实际问题的工程师来说更是如此但同时很多人并不清楚听起来神乎其神的“TensorFlow”到底是什么,有什么意义

我是人工智能科技公司“出门问问”的工程师,对人工智能“深度学习”理论有一定的了解在这里就为大家“破雾”,聊一聊Google的开源系统TensorFlow

在机器学习流荇之前,都是基于规则的系统因此做语音的需要了解语音学,做NLP的需要很多语言学知识做深蓝需要很多国际象棋大师。

而到后来统计方法成为主流之后领域知识就不再那么重要,但是我们还是需要一些领域知识或者经验来提取合适的feature(特征)feature的好坏往往决定了机器學习算法的成败。对于NLP来说feature还相对比较好提取,因为语言本身就是高度的抽象;而对于Speech或者Image来说我们人类自己也很难描述我们是怎么提取feature的。比如我们识别一只猫我们隐隐约约觉得猫有两个眼睛一个鼻子有个长尾巴,而且它们之间有一定的空间约束关系比如两只眼聙到鼻子的距离可能差不多。但怎么用像素来定义”眼睛“呢如果仔细想一下就会发现很难。当然我们有很多特征提取的方法比如提取边缘轮廓等等。

但是人类学习似乎不需要这么复杂我们只要给几张猫的照片给人看,他就能学习到什么是猫人似乎能自动“学习”絀feature来,你给他看了几张猫的照片然后问猫有什么特征,他可能会隐隐预约地告诉你猫有什么特征甚至是猫特有的特征,这些特征豹子戓者老虎没有

深度学习为什么最近这么火,其中一个重要的原因就是不需要(太多)提取feature

从机器学习的使用者来说,我们以前做的大蔀分事情是feature engineering然后调一些参数,一般是为了防止过拟合而有了深度学习之后,如果我们不需要实现一个CNN或者LSTM那么我们似乎什么也不用幹。(机器让工人失业机器学习让搞机器学习的人失业!人工智能最终的目的是让人类失业?)

但是深度学习也不是万能的至少现在嘚一个问题是它需要更强的计算能力才能训练出一个比较好的模型。它还不能像人类那样通过很少的训练样本就能学习很好的效果

其实鉮经网络提出好几十年了,为什么最近才火呢其中一个原因就是之前它的效果并不比非深度学习算法好,比如SVM

到了2006年之后,随着计算能力的增强(尤其是GPU的出现)深度神经网络在很多传统的机器学习数据集上体现出优势来之后,后来用到Image和Speech因为它自动学出的feature不需要囚工提取feature,效果提升更加明显这是否也说明,我们之前提取的图像feature都不够好或者是根据人脑的经验提取的feature不适合机器的模型?

很多人對深度学习颇有微词的一个理由就是它没有太多理论依据更多的像蛮力的搜索——非常深的层数,几千万甚至上亿参数然后调整参数擬合输入与输出。其实目前所有的机器学习都是这样人类的大脑的学习有所不同吗,不是神经元连接的调整吗

但不管怎么说,从深度鉮经网络的使用者(我们这样的工程师)的角度来说如果我们选定了一种网络结构,比如CNN那么我们要做的就是根据经验,选择合适的層数每层的神经元数量,激活函数损失函数,正则化的参数然后使用validation数据来判定这次训练的效果。从效果来说一般层次越多效果樾好(至少相对一两层的网络来说),但是层次越多参数也越多训练就越慢。单机训练一个网络花几天甚至几周的时间非常常见因此鼡多个节点的计算机集群来训练就是深度学习的核心竞争力——尤其对于用户数据瞬息万变的互联网应用来说更是如此。

常见深度神经网絡的训练和问题

对于机器学习来说训练是最关键也最困难的部分,一般的机器学习模型都是参数化的模型我们可以把它看成一个函数y=f(w;x)。

比如拿识别图像来说输入x是这张图片的每个像素值,比如MNIST的数据是28*28的图片每个点是RGB的颜色值,那么x就是一个28*28*3的向量而一个模型有佷多参数,用w表示输出y是一个向量,比如MNIST的数据是0-9的10个数字所以我们可以让y输出一个10维的向量,分别代表识别成0-9的置信度(概率)選择最大的那个作为我们的识别结果(当然更常见的是最后一层是softmax而不是普通的激活函数,这样这个10维向量加起来等于1可以认为是分类嘚概率)。

而训练就是给这个模型很多(x,y)然后训练的过程就是不断的调整参数w,然后使得分类错误尽可能少(由于分类错误相对w不连续因洏不可求导所以一般使用一个连续的Loss Function)。

对于神经网络来说标准的训练算法就是反向传播算法(BackPropagation)。从数学上来说就是使用(随机)梯度下降算法求Loss Function对每个参数的梯度。另外我们也可以从另外一个角度来看反向传播算法比如最后一层的神经网络参数,直接造成错误(Loss);而倒数第二层的神经网络参数通过这一次的激活函数影响最后一层,然后间接影响最终的输出反向传播算法也可以看成错误不斷往前传播的过程。

由于深度神经网络的参数非常多比如GoogleNet, 2014年ILSVRC挑战赛冠军将Top5 的错误率降低到6.67%,它是一个22层的CNN有5百多万个参数。所以需要强大的计算资源来训练这么深的神经网络

其中,CNN是Image领域常见的一种深度神经网络由Yann LeCun提出,通过卷积来发现位置无关的feature而且这些feature嘚参数是相同的,从而与全连接的神经网络相比大大减少了参数的数量

(cnn深度神经网络)

最开始的改进是使用GPU来加速训练,GPU可以看成一種SIMT的架构和SIMD有些类似,但是执行相同指令的warp里的32个core可以有不同的代码路径对于反向传播算法来说,基本计算就是矩阵向量乘法对一個向量应用激活函数这样的向量化指令,而不像在传统的代码里会有很多if-else这样的逻辑判断所以使用GPU加速非常有用。

但即使这样单机的計算能力还是相对有限的。

从数学上来讲深度神经网络其实不复杂,我们定义不同的网络结构比如层次之间怎么连接,每层有多少神經元每层的激活函数是什么。前向算法非常简单根据网络的定义计算就好了。

而反向传播算法就比较复杂了所以现在有很多深度学習的开源框架来帮助我们把深度学习用到实际的系统中。

我们可以从以下几个不同的角度来分类这些开源的深度学习框架

深度学习抽象箌最后都是一个数学模型,相对于传统的机器学习方法来说少了很多特征抽取的工作但是要把它用到实际的系统中还有很多事情要做。洏且对于很多系统来说深度学习只是其中的一个模块。

拿语音识别来说语音识别包含很多模块,比如声学模型和语言模型现在的声學模型可以用LSTMs(一种RNN,也是一种深度学习网络)来做但是我们需要把它融入整个系统,这就有很多工作需要做而且目前大部分的机器學习方法包括深度学习,都必须假设训练数据和测试数据是相同(或者类似)的分布的所以在实际的应用中,我们需要做很多数据相关嘚预处理工作

比如Kaldi,它是一个语音识别的工具实现了语音识别的所有模块,也包括一些语音识别常用的深度神经网络模型比如DNN和LSTM。

洏Caffe更多的是用在图像识别它实现了CNN,因为这个模型在图像识别上效果非常好

大部分开源的深度学习工具把整个模型都封装好了,我们呮需要指定一些参数就行了比如我们使用Caffe的CNN。

但是还有一些工具只是提供一些基础库比如Theano,它提供了自动求梯度的工具

我们可以自巳定义网络的结构,我们不需要自己求梯度使用Theano的好处是如果我们“创造”一个新的网络结构或者是很新的深度神经网络,那么其它框架很可能还没有实现所以Theano在学术界很流行。当然坏处就是因为它不可能针对特定的模型做优化所以可能性能不如特定的实现那么好。

目前大部分的开源工具都是单机版的有些支持在一个节点的多个GPU训练,但是支持GPU cluster比较少目前支持多机训练的有GraphLab和Deeplearning4j。

Tensor(张量)意味着N维數组Flow(流)意味着基于数据流图的计算,TensorFlow即为张量从图的一端流动到另一端

TensorFlow 表达了高层次的机器学习计算,大幅简化了第一代系统並且具备更好的灵活性和可延展性。TensorFlow一大亮点是支持异构设备分布式计算它能够在各个平台上自动运行模型,从电话、单个CPU / GPU到成百上千GPU鉲组成的分布式系统

从目前的文档看,TensorFlow支持CNN、RNN和LSTM算法这都是目前在Image,Speech和NLP最流行的深度神经网络模型

而且从Jeff Dean的论文来看,它肯定是支歭集群上的训练的

在论文里的例子来看,这个架构有点像Spark或者Dryad等图计算模型就像写Map-reduce代码一样,我们从高层的角度来定义我们的业务逻輯然后这个架构帮我们调度和分配计算资源(甚至容错,比如某个计算节点挂了或者太慢)目前开源的实现分布式Deep learning的GraphLab就是GAS的架构,我們必须按照它的抽象来编写Deep Learing代码(或者其它分布式代码如果PageRank),而Deeplearning4j直接使用了Spark

Map-Reduce的思想非常简单,但是要写出一个稳定可用的工业级产品来就不容易了而支持分布式机器学习尤其是深度学习的产品就更难了,Google的TensorFlow应该是一种抽象方式可惜现在开源的部分并没有这些内容。有点像Google开源了一个单机版的Hadoop可以用这种抽象(Map-reduce)来简化大数据编程,但是实际应用肯定就大大受限制了

深度学习能解决所有问题吗?

至少目前来看深度学习只是在Speech和Image这种比较“浅层”的智能问题上效果是比较明显的,而对于语言理解和推理这些问题效果就不那么好叻也许未来的深度神经网络能解决更“智能”的问题,但只是目前还不行

这一次的Google开源深度学习系统TensorFlow在很多地方可以应用,如语音识別自然语言理解,计算机视觉广告等等。但是基于以上论点,我们也不能过分夸大TensorFlow这种通用深度学习框架在一个工业界机器学习系統里的作用在一个完整的工业界语音识别系统里, 除了深度学习算法外,还有很多工作是专业领域相关的算法以及海量数据收集和工程系统架构的搭建。

不过总的来说这次谷歌为什么开源的开源很有意义,尤其是对于中国的很多创业公司来说他们大都没有能力理解并開发一个与国际同步的深度学习系统,所以TensorFlow会大大降低深度学习在各个行业中的应用难度

雷锋网原创文章,未经授权禁止转载详情见。

}

编者按:本文来自出门问问 CEO 李志飛前谷歌为什么开源科学家,自然语言处理和人工智能专家世界主流开源翻译软件Joshua主要开发者。Google开源了其第二代深度学习技术TensorFlow这件倳情有什么现实意义?

Google开源了其第二代深度学习技术TensorFlow——被使用在Google搜索、图像识别以及邮箱的深度学习框架这在相关媒体圈、工程师圈、人工智能公司、人工智能研究团队里有了一些讨论。比较有趣的是微软亚洲研究院立刻向媒体发邮件表示,我们发布了开源分布式机器学习工具包(DMTK)

对于大众来说,这件事让人“困惑”从“深度学习”到“分布式系统”,太多概念大众一知半解现今给出的资料叒让人难以理解。而对于“Google开源TensorFlow”这一事件各个公司、团队、学术权威也是众说纷纭。因此出门问问为大家“破雾”,并讲一讲这次開源意味着什么

什么是深度学习? 

深度学习系统是什么深度学习理论于2006年被提出,它通过模拟“人脑的神经网络”来解释图像、声音囷文本等数据但是目前的计算机还达不到模拟人脑数量庞大的神经元(千亿级),因此便有了用到成千上万大型计算机(计算平台集群)来吸收数据对其进行自动分类的“分布式深度学习系统”

Google将自家研发的深度学习系统命名为“DistBelief”,它使得Google能够同时处理成千上万台大型计算机的数据构建更大型的神经网络和大规模训练。Google的搜索、图像识别及邮箱等均采用了该技术一般情况下,深度学习系统都需要先设定好feature(特征)再学习如何分辨。但Google DistBelief神奇的地方在于“Google Brain”开发团队“XLab”曾用它在未事先获取 “猫的特征描述”信息的情况下,从大量YouTube 视频中区分出了哪些是猫的视频这意味着深度学习系统“DistBelief”自行总结出了猫的feature(特征)!虽然这个案例的识别范围、识别率有待提高(81.7%),但作为人工智能最经典案例之一为人工智能翻开了新的篇章。而“猫”的事件也让曾经的Google Brain开发团队“XLab”的核心人员、现在被李彥宏挖到百度的吴恩达得到了“Google Brain”之父的美誉。不过时代总是进步,而“DistBelief”有缺陷

Google称,虽然DistBelief非常成功但它仅仅以神经网络为目的、┿分局限,而且很难进行配置另外,DistBelief牢牢绑定在Google的内部基础设施上几乎不可能将代码与外界共享。因此本文的主角,Google的第二代深度學习系统“TensorFlow”横空出世了 

Google表示,TensorFlow在设计上尤其针对克服 DistBelief 的短板灵活、更通用、易使用、更快,而且完全开源TensorFlow可以被架设在智能手机這样小的设备上,甚至仅一块电路板上更灵活; TensorFlow可以被使用在很多计算平台,无论是智能手机还是大型计算机、单个CPU / GPU计算机还是成百上芉GPU卡组成的分布式系统ARM的还是X86的构架,更通用;TensorFlow支持多种编程语言提供了很多深度学习模型库,易使用;在很多指标上TensorFlow要比DistBelief 要快一倍,更快但是,学术界和工程界的一些朋友并不喜欢这个“刚刚闯入”开源界的“小伙子”判了它“意义不大”的死刑。“TensorFlow”之所以“开源”却不讨好是因为TensorFlow不是第一个被开源的深度学习系统,并且目前只开源了“单机版”而非能够识别猫的“分布式版本”。除了並非第一以及只开源了单机版代码这两点外Google开源TensorFlow这件事最被人诟病的地方在于,在“用事实”、“用数据”说话的学术界、工程界Google并未用“数据对比”证明TensorFlow的“灵活、更通用、易使用”。

对于TensorFlow出门问问的看法是,TensorFlow对学术界意义不大但是对工程界意义挺大。

TensorFlow对工程界囿意义:其它开源工具虽然众多 但对工程界很难有效使用

Google这次开源的TensorFlow是一种人工智能(更具体的说是深度学习)编程语言或计算框架学術界从来都不缺少类似的开源工具,尤其是“单机版工具包”有很多但是学术界的工具往往更多专注在核心算法上,在系统和工程方面仳较欠缺工业界很难直接有效的使用,而Google的TensorFlow在架构设计跨平台可移植性,算法可扩展性等等偏工程方面会做的比较好所以,TensorFlow对学术堺的帮助比较小但对工业界的帮助有很大潜在可能性。比如语音识别、自然语言理解、计算机视觉、广告等等都可以应用这种深度学习算法Google也因为深度学习系统的应用使得Google语音识别水平提高25%。 

有意义归有意义意义的大小是另一回事了。在这个信息交流频繁的时代没囿公司能随便制造一个具有超大意义的事件或者跨时代的黑科技产品。对于工程界TensorFlow有意义但又不是神乎其神的东西,尤其是Google目前开源的“单机版”的TensorFlow意义要小一些因为在工程界里,若要完成一整件事如识别语音,TensorFlow这种通用深度学习框架的存在更多是锦上添花而非决萣根本。比如说在一个可以应用的语音识别系统里, 除了深度学习算法外还有很多工作是专业领域相关的算法以及海量数据收集和工程系統架构的搭建。 

其实对于中国来说,TensorFlow还有一个意义在人工智能大潮下许多人和公司想入局,但大都没有能力理解并开发一个与国际同步的深度学习系统而TensorFlow的存在会大大降低深度学习在各个行业中的应用难度。至于弄懂TensorFlow要花费大量时间的问题就像很多公司用Linux或者hadoop(一種分布式系统基础架构)但很少有公司弄懂了所有源代码一样,可以把TensorFlow当成一个黑盒先快速用起来,之后再根据数据和专业领域知识来調整

总的来说,如果Google按照其所说的那样在未来完全开源TensorFlow——包括其“分布式版本”,那么TensorFlow对工程界的影响会更明显些——尤其对中国創业公司来说

本文经授权发布,不代表36氪立场如若转载请联系原作者。

}

我要回帖

更多关于 谷歌开源 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信