求毛不易的消愁 毛不易,高品质最好,谢谢啦!

专访 TensorFlow 贡献者唐源:掌握 Google 深度学习框架的正确姿势
- 开源软件 - ITeye资讯
相关知识库:
自 2015 年底开源到如今更快、更灵活、更方便的 1.0 版本正式发布,由 Google 推出的第二代分布式机器学习系统 TensorFlow 一直在为我们带来惊喜,一方面是技术层面持续的迭代演进,从分布式版本、服务框架 TensorFlow Serving、上层封装 TF.Learn 到 Windows 支持、JIT 编译器 XLA、动态计算图框架 Fold 等,以及 Inception Net、SyntaxNet 等数不胜数的经典模型实现,TensorFlow 已然已经成为深度学习框架的事实标准之一。
而另一方面,在开源一年多的时间里,TensorFlow 已经帮助了包括研究人员、工程师、艺术家、学生等在内的诸多用户在各个领域取得了卓越进展,据 Google 官方统计,目前人们已经在 6000 多个在线开放代码存储区中使用 TensorFlow。那么,在业务场景及个人摸索实践中,我们可以如何更好地使用 TensorFlow?以及掌握与运用深度学习、机器学习的正确姿势?带着诸多问题,我们特别采访了 TensorFlow 项目贡献者——美国 Uptake 数据科学家唐源,一起聊聊深度学习框架的那些事儿。
引用唐源,美国 Uptake 数据科学家,带领团队建立用于多个物联网领域的数据科学引擎进行条件和健康监控,同时建立公司的预测模型引擎,现已被用于航空、能源等大型机械领域。是 TensorFlow 和 DMLC 的成员,TensorFlow、XGBoost、MXNet 等软件的 committer,曾荣获谷歌 Open Source Peer Bonus。在美国宾州州立大学获得荣誉数学学位,曾在本科学习期间成为创业公司 DataNovo 的核心创始成员,研究专利数据挖掘、无关键字现有技术搜索、策略推荐等。GitHub:
我是如何走上深度学习框架的开源贡献之路的
CSDN:您在大学获得荣誉数学学位,在此期间成为创业公司 DataNovo 核心创始成员,您是怎样开始接触到机器学习和深度学习?有哪些难忘的经历?
唐源:这一切起源于本科与教授做的一个数值分析,接触到了 Matlab 这样的编程语言,由此开始对编程产生了特别浓厚的兴趣,学习各种编程语言,也上过大部分的软件工程的课程,因为在学校读的是宾州州立大学荣誉学院的学位,很多课程都加深了难度,也认识了很多非常聪明和勤奋的同学,在导师 Luen-chau Li 的鼓励下也慢慢开始上了好几门统计、数学、以及计算机研究生的课程,其中第一门就是统计系 Le Bao 老师的研究生难度的数据挖掘课程,开始逐渐接触机器学习,也对这方面产生了浓厚的兴趣,也自己开始跟进了这方面的研究。
DataNovo 是我在上斯坦福公开课的时候和几个小伙伴成立的公司,几个核心成员分布在世界各地,我们有几个经验非常丰富的软件工程师,有着对专利这一块非常有研究的律师,也有拥有沃顿商学院 MBA 的数学家,在凭着我们各自已有的经验基础上,我们通过大量的讨论和调查,一起探索了这个在当时还尚未被挖掘的领域,建立了许多基于机器学习和深度学习比较新颖的应用。比较难忘的是这个摸索的过程,有许多失败也有成功,大家一起用带着各国口音的英语,跨越世界上几个不同的时区,来讨论相关文献和项目进展,一起朝着一个目标努力,是非常有意思的事情,在本科的时候就能够有着这样的创业和合作经验,算是比较有成就感的一件事了。
CSDN:您在什么时候开始接触到开源社区?什么情况下成为了多个深度学习框架的 committer?
唐源: 大四的时候在一家创业公司实习,公司对开源的政策特别开放,我们用到了各种各样的开源软件,用的过程中发现各种问题以及对用户体验度有着各种不满,Github 上面有地方可以提交建议,但是项目的管理者太忙,我就干脆自己对源代码进行研究然后提交修改,这样养成了一种习惯,遇到问题的第一反应是自己研究研究代码,然后自己直接去解决问题,独立阅读代码的能力也就这样慢慢培养出来了。很多时候由于对于某个开源软件特别熟悉,经常在做项目中会想到一些有趣的点子来对项目的性能进行改进和功能进行延伸。
至于成为深度学习框架的 committer,我最先开始参与的是 MXNet,当时只是业余时间做了一些小的深度学习的项目,发现这个开源项目还在初期,有很大的发展空间,然后又刚开始在其他项目中使用 Scala,在刘忆智的邀请和鼓励下,我们一起合作做了 MXNet Scala 语言包。又是机缘巧合,觉得 TensorFlow 的低阶 API 太难学也太难用,于是和谷歌的朋友合作建立了高阶的 API,也就是早期的 Scikit Flow, 类似数据科学领域中很热门的 Scikit-learn, 现在由于在 Google 内部和外部都需求特别大,也成为了 TensorFlow 中重要的一部分。
深度学习、机器学习的正确姿势
CSDN:机器学习在 Uptake 数据科学引擎的工作流程中扮演什么样的角色?
唐源:数据科学是 Uptake 的核心,我们成功地和大型工业界的巨头,比如说 Catepillar,来合作建立比较有需求的产品,帮助解决传统工业上的一些痛点,比如 24 小时对火车每个重要部件进行条件和健康监控,帮助维修工程师找到问题所在,推荐高效的解决方式,新部件的自动下单订购,等等。机器学习在这个过程中起到非常重要的角色,我们需要用机器学习来建立很多有效的预测模型,由于数据量的庞大,数据性质的特别,以及出于物联网数据在传统大型工业领域还没怎么被深度探索的原因,我们也不能仅仅依赖于现有的技术,我们有着非常优秀的研发团队来支撑这一整个技术链。
CSDN:对于数据科学团队来说,您认为他们需要对深度学习了解到什么样的程度?
唐源:深度学习并不是万能的,很多问题往往用传统的机器学习算法就足够了。如果设计到很多图像,语音,文本这样的数据,深度学习的算法当然更加适用,基本上能大概清楚有一些什么样的算法以及他们适用于什么样的问题,就能实现一些简单的应用了。但是往往很多问题不是简单的分类和回归模型就能解决的,这中间可能涉及到多个值得研究和仔细设计的步骤,来让模型更加精确,这时候对深度学习扎实的功底就派上用场了,因为需要自己设计一些特殊的模型架构来解决这些问题,比如说涉及时间序列的应用,更需要仔细推敲和设计出最理想的算法,这涉及到对现有的多种类型的模型进行结合和改动,需要对这些已有模型有非常深的理解才行。
CSDN:对于数学功底不是很好的程序员,如果想掌握深度学习,甚至成为数据科学家,您有什么好的建议?
唐源:深度学习其实一开始也就是从一个简单的神经网络发展来的。如果想扎扎实实做这一方面的研究,当然数学越好以及知识越广能够带你走的更远。但是如果没有很好的数学功底,走应用的路线也是非常好的,毕竟也不是所有的研究都有很大的影响力或者用到了很高深的数学,很多时候只要能够读懂大概的算法思路,知道这个算法在什么样的应用中适用就行了。现在数据科学家的门槛其实也是越来越低,以前是有 Scikit-learn 的帮助,现在是有着各种深度学习框架,甚至最近 TensorFlow 在机器学习应用方面的侧重,比如说大力研发高阶的 Estimator API,也更是让更多人能够更有效地学习和更快地进入到这个行业当中。
CSDN:如果没有数学基础的限制,能否给刚入门深度学习的开发者提供一些学习和实践经验?
唐源:可以对这些深度学习的算法和架构都进行了解,要知道每个算法都适用于哪些类型的运用,基础好的话可以直接读一些好的会议以及期刊论文,关注一下前沿的研究。一定要多积累实战经验,可以多参与项目,参与像 Kaggle 这样的竞赛,最近的 Data Science Bowl 就是个很好的切入点,可以多融入到论坛中的讨论,来学习学习大家的思路和方法。如果对模型具体的实现感兴趣的话,可以尝试着读一读源代码,因为这不仅能帮助理解模型,也能了解到对于这个模型的实现,具体有哪些需要注意的地方,比如说性能上为什么这样处理会更好,API 为什么这样设计,等等。
CSDN:在忙碌的工作之余,您把大量的时间都贡献给了开源社区以及图书编写,但您是否有其他兴趣爱好(除了爬山和烧烤:))?
唐源:没错,爬山和烧烤!我还喜欢 K 歌,认识新的朋友,旅游,以及各种运动,比如说乒乓球,羽毛球,篮球,滑冰,游泳,等等。
业务场景下的深度学习实现
CSDN:很多大公司都开源了自己的机器学习平台,侧重的模型可能有所不同,但都会有分布式、编程方面的优化,在您接触过的平台中,您如何推荐从业者在什么情况下采用哪种框架?
唐源:我认为还是得具体看自己的应用、需求、以及团队的背景。如果在语音上面的应用很多的话,需要用到很多类似于 LSTM, RNN,等深度学习模型,那可以在做实验比较的时候会考虑到这些模型在不同框架上的速度。如果团队的背景很多元,比如在做研究的时候可能用的编程语言不统一,那就得考虑一下哪个平台能够对这些语言提供更好的支持。再具体一点,可能要考虑哪个平台使用起来是既能够实现目的又能够灵活地在现有基础上进行必要的拓展来达到各种需求。社区的支持也很重要,不仅仅是开源社区,研究社区对某一平台的支持也是需要考虑进去的,比如说如果对 Facebook 的研究很感兴趣,那可能会更关注 Torch,因为他们的最新研究成果都会首先开源 Torch 的实现。
为什么我们应该使用 TensorFlow
CSDN:TensorFlow 开发者大会给我们呈现了大量的信息,您最为关注的有哪些?
唐源:我最关注的是那些高阶一点的 API,比如 Estimator 和 Keras 在 TensorFlow 内部的发展,我最早是和谷歌的 Illia Polosukhin 合作创建了 Scikit Flow 这个项目,然后紧接着被 TensorFlow 接受,放在了 TensorFlow 里面,得到了谷歌内部的大力支持和贡献,不仅仅适用于深度学习,也提供了许多机器学习的 Estimator,比如 KMeans、SVM、随机森林,等等,来帮助更广范围的用户方便地使用像 TensorFlow 这样分布式的系统。TensorFlow 对一般用户来说确实很难学好也很难写得很正确,尤其是一些分布式的逻辑,这样的高阶的 API 是特别有需求的。还有比较关注也是一直在关注的就是 DeepMind 在研究上的一些进展,比如说对皮肤癌的图片分类,对艺术和音乐的自动生成,这些都是非常有意义的事情,我很高兴他们能够不仅仅花时间在研发这个框架,也能够好好利用这个框架来做这一些有意义有影响力的一些研究。这也是各种深度学习框架的意义所在:把先进的技术免费提供给大家,帮助大家更好更有效地做研究和分享研究成果。
CSDN:XGBoost 最初的优势在于 boosting,不了解 DMLC、MXNet 的人也可能很喜欢 XGBoost,您最开始改进和延伸了 XGBoost 项目,请介绍近期的发展或进展,未来的重要工作是什么?
唐源: XGBoost 算是我比较早期的时候就开始一直参与的项目,经过了 Kaggle、学术界、以及工业界很多用户的千锤百炼,对于最近比较值得注意的一些进展,大家可以看看新增加的 Callback 功能,可以用来更方便地监控和观察模型的训练,最近也支持了 GPU,以及对 Spark、Flink 等大数据平台的结合使用的支持,未来的很大一部分工作就是更好地帮助用户使用,从他们的使用当中了解需求,尽可能帮助到大家更好地从事数据科学工作。
CSDN:如果用户已经使用 Spark 作为大数据处理平台,也用了 MLlib,有什么理由是他必须使用 TensorFlow 的?
唐源: TensorFlow 提供的不仅仅只是现有的一些比较热门的模型实现,深度学习和机器学习这个领域的发展是非常快的,很多问题往往不是简单的现有模型能够解决的,最重要的是一个框架的灵活性和可拓展性一定是不能丢的,Spark 的 MLlib 很优秀地实现了一些工业界需求比较大的一些算法,但是 TensorFlow 能提供的不仅仅是这些,它提供了很多建立机器学习和深度学习必有的元素,比如,TensorFlow 有着自己的 metrics、losses、optimizers、layers 等模块来帮助建立各种各样的深度学习模型,它也提供了许多高阶的 Estimator API 来帮助用户更好地搭建和定义自己的分布式的模型,FeatureColumn 模块来帮助数据科学工作中很重要的特征工程,DataFrame 和 QueueRunner 等模块来更好地实现数据的预处理,提取批量队列,等等。另外,TensorFlow 省去了在各种不同的设备(比如 CPU、GPU、TPU)上的实现,用户只需要集中精力调用已经实现好的 API 就可以在各种设备上进行自动优化以及资源分配,这些都是 Spark 目前还不能或者是很难做到的。最近雅虎开源的 TensorFlowOnSpark 也挺有意思,可以在现有的 Spark/Hadoop 分布式集群的基础上部署 TensorFlow 的程序,这样可以避免数据在已有 Spark/Hadoop 集群和深度学习集群间移动,HDFS 里面的数据能够更好地输入进 TensorFlow 的程序当中。
CSDN:您如何与黄文坚老师配合完成《TensorFlow 实战》?怎样实现了工作和写作之间的平衡?写完此书有哪些收获和体会?
唐源:我们一个在国内一个在国外,理论上来说合作起来本应该是相当困难。但由于我们都是 TensorFlow 的贡献者,对 TensorFlow 都是算比较熟悉的了,所以我们写起书来也是比较独立,每人负责几个章节。写的过程中也积极地互相交流,讨论书中的各个例子有没有更好的实现方法,书也不是一天两天就能写完的,所以在写的过程中也都得互相跟进和讨论 TensorFlow 的最近进展。写作基本上都是工作之余完成的,确实需要花很多的时间,因为毕竟是写出来帮助大家的,对很多代码和应用的解释,以及背景知识的介绍也需要反复推敲。写书的过程中也发现和激起了对 TensorFlow 没有贡献到的一些模块的兴趣,通常写着写着发现自己已经打开了无数的代码文件而只写下了一两段话,写书也是一个不断学习,灵感不断涌现的过程。
CSDN:在开发人员读完《TensorFlow 实战》之后,可能需更进一步的提升,您是否有下一步相关著作的计划?或者有其他的学习途径可以推荐?
唐源:我们这次虽然大部分的例子都是基于最新的 1.0 版本,但是 TensorFlow 的发展特别快,我们会在下一版介绍更多的新的功能,也会根据读者的反馈意见来更好地帮助大家学习。其他的学习途径,可以参考官方的一些例子,一般都是和代码比较兼容的,然后 Github 上面也有很多值得学习的代码和例子,如果对源代码比较感兴趣,也鼓励大家积极参与贡献。
引用本文为CSDN栏目「2017 AI 创新者」系列专访之一。旨在通过对AI领域杰出学者、资深专家、技术缔造者、顶尖团队的采写与刻画,向业界展现最新行业案例与趋势。寻求报道请发邮件至
引用将于 2017 年 3 月 17-19 日登陆申城,三大技术峰会 24 位嘉宾,汇聚国内一线的互联网公司大牛,畅谈运维、数据库和架构的热门话题和技术热点,精益运维发起人&优维科技 CEO 王津银、MongoDB 大中华区首席架构师唐建法和华为软件 API 开放平台架构师李林锋等亲临现场。3 月 5 日前门票八折优惠中,5 人以上团购立减 400 元,详情点击。谷歌开源Tensor Flow系统 背后都有什么门道?
> 谷歌开源Tensor Flow系统 背后都有什么门道?
谷歌开源Tensor Flow系统 背后都有什么门道?
  7月19日消息,据国外媒体报道,作为旗下最重要的人工智能系统,TensorFlow功能强大。其中包含的一些工具可以自动识别声音和图像,而另一些工具则可以根据上下文关系理解词语含义。同时,这也是一个开源系统,允许任何人下载源码。通过将所有工具开源,TensorFlow能够让开发人员打造出高度智能化的产品。本文引用地址:
  深度学习算法
  人工智能并不是什么新奇的概念。在1956年的一次大会上,信息论之父克劳德&艾尔伍德&香农(Claude Elwood Shannon)就提出了关于机器人工智能的相关概念,并预计将于20年之内解决这一问题。
  显然这一切并未发生。事实证明,人类的思维太过复杂,根本无法用简单的逻辑语句进行编码。许多计算机科学家都试图使计算机具有专业思维能力,但在信息理解上总会有巨大偏差。简单的说,基于逻辑规则的机器系统并不具备人类智力。
  相比之下,类似于之类的人工智能系统本身具有学习能力。因此也在开源TensorFlow不断改进自身算法的方式,允许人工智能知识有限的开发人员也能够开发出有用的应用程序。
  事实上,并不完美,但其可以帮助用户进行信息筛选,节省大量时间。其中包含的反馈机制也可以让系统本身不断从错误中学习改进。虽然尚未打造无所不能的人工智能系统,但却加强了人类和机器的有效协作。
  做出开放源码决定的是谷歌首席科学家杰夫&迪恩(Jeff Dean),他认为常规步骤下的创新工作进展过于缓慢。常常是一个谷歌开发人员写出代码,甚至要等上几个月才会在一次会议上进行讨论,此外另一个开发人员会再花上几个月的时间重复这一过程。
  迪恩认为,开源Tensor Flow能够显著加速这一进程。通过开源,谷歌开发人员能够实时与科学界进行协作。谷歌之外的人才也能够参与Tensor Flow源代码的编写。而机器学习技术的共享能够广泛吸引更多的技术人才完善Tensor Flow系统。
  Tensor Flow项目负责人Rajat Monga指出,&通过将Tensor Flow开源,我们能够与大学以及诸多初创企业的开发人员进行合作,接触新的理念,推进技术发展。开源使得代码开发的速度更快,TensorFlow也更加功能多样,灵活方便。&
  打造价值生态系统
  从传统观念看,谷歌开源机器学习工具似乎很奇怪。我们无法想象可口可乐会向社会公布其配方。而包括苹果在内的许多高科技公司也对新产品守口如瓶。即便是谷歌,也有很多处于保密状态,比如其搜索算法。
  然而世界正在不断变化。曾经通向成功的可靠途径是优化独有的价值链。通过磨砺企业内部流程以及拓展自身规模,不断提高自身在客户以及供应商之中的优势地位,从而创造更高的效率。这就是企业打造自身竞争优势的主要方式。
  如今,最成功的产品逐步转变为价值生态系统。虽然谷歌聘用的都是杰出人才,但其改进技术的唯一方式就是与更大规模的整个科学界进行合作。通过开源,可以借助社会广大技术人员使用谷歌的技术开发产品。
  这就是为什么很多高科技公司会开源其关键技术。除了谷歌开源其TensorFlow之外,Facebook也宣布开源其人工智能工具库,特斯拉也开源其电动汽车专利,而近期IBM也开源其量子计算平台。
  今天,我们生活在互联经济时代。降低成本以及资产优化不再是绝对的竞争优势,而打造价值生态系统才是真正意义上的竞争优势。相应的能力优势不再是金字塔的顶端,而是在网络中心。
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一关注微口网微博
微信号:iweikou
选自 cloud.google作者:&Kaz Sato机器之心编译参加:吴攀、李亚洲单个神经元的数学机制很简略,它所能做的仅仅将数据点分红两类。而许多神经元构成的深度神经网络能获取更多特征,处理更凌乱更笼统的疑问。(之前有关报导:)源码:/tensorflow/playground神经网络和深度学习近期现已变成了互联网上的热词,你或许也想一探求竟。可是当许多人拿起教科书预备自学成才时,却终究发现自个被数学模型和公式搞得晕头转向。横竖我即是这么的。关于和我相同的人来说,咱们还有一种不需求过分通俗的数学常识就能了解神经网络的办法:TensorFlow Playground,这是一个用 JavaScript 写的页面运用,能让你把玩在你的阅览器中运转的实在的神经网络,而且能够让你点击按钮和调整参数,然后了解它是怎样作业的。领会地址:http://playground.tensorflow.org/(图一)在这篇文章中,我会向你介绍怎样运用 TensorFlow Playground ,因而你能够了解神经网络背面的基地思维。然后你就能了解为何近期这么多人会变得对这项技能感到如此地振奋。让核算机处理疑问核算机编程需求程序员。人类经过一行行的代码拟定核算机施行的每一个进程,然后指示核算机处理疑问。但有了机器学习和神经网络,你就能够让核算机自个去处理疑问了。一个神经网络即是一个函数,能够学会练习数据会集的给定输入所对应的预期输出。(图二)神经网络即是能够从练习数据会集学习的函数比方,为了构建能够辨认猫的图画的神经网络,你能够运用许多猫图画样本练习网络。终究得到的网络就和一个函数相同,其将猫图画作为输入,然后输出「cat(猫)」标签。或许更有用的状况是--你能够向其间输入来自游戏效力器的许多用户活动日志,然后输出有较高转化概率的用户。这是怎样办到的?让咱们来看一个简略的分类疑问。假定你有一个如下的数据集。其间每一个数据点都有两个值:x1(横坐标)和 x2(纵坐标)。这儿有两组数据点:橙色组和蓝色组。(图三)要区别一个数据点是橙色的仍是蓝色的,你该怎样编写代码?或许你会像下面相同恣意画一条对角线来分隔两组数据点,界说一个阈值以断定每个数据点归于哪一个组。(图四)你的 IF 句子的条件应当看起来是这么:(图五)其间 b 是断定线的方位的阈值。经过别离为 x1 和 x2 赋予权重 w1 和 w2,你能够使你的代码的复用性更强。(图六)此外,假定你调整 w1 和 w2 的值,你能够按你喜爱的办法调整线的视点。你也能够调整 b 的值来移动线的方位。所以你能够重复运用这个条件来分类任何能够被一条直线分类的数据集。但疑问的要害是程序员有必要为 w1、w2 和 b 找到适宜的值--即所谓的参数值,然后指示核算机怎样分类这些数据点。一个神经元:将一个数据点分为两类如今,让咱们看看 TensorFlow Playground 背面的核算机是怎样处理这个特定疑问的。在 Playground 上,点击左上角的「Play(播映)」按钮。蓝色和橙色数据点之间的线开端缓慢移动。点击复位(reset)按钮然后再点击播映几回,查询有不相同初始值的线是怎样移动的。你看到的是核算机正在企图找到权重和阈值的最佳组合,然后画出两组之间的直线。(图七)TensorFlow Playground 上一个简略的分类疑问TensorFlow Playground 运用了一自个工神经元进行这个分类。啥是人工神经元?这是由人类大脑中生物神经元的做法所启示的一种概念。(图八)生物神经元之间的网络关于生物神经网络的机制的详细描绘,能够拜见维基百科「神经元」页面:当神经元接纳到来自其相连的神经元的电信号时,它会变得振奋(激活)。神经元之间的每个联接的强度不相同。一些神经元之间的联接很强,足以激活其它神经元,而另一些联接则会按捺激活。你大脑中的数千亿神经元及其联接一同构成了人类智能。对生物神经元的研讨致使了一种新的核算办法的诞生--人工神经网络。运用人工神经网络,咱们能够运用简略的数学办法仿照生物神经元的做法。为了处理上述的分类疑问,你能够运用下面的简略神经网络,它只具有一个神经元(即感知器(Perceptron))。(图九)x1 和 x2 是输入值,w1 和 w2 是权重--代表了输入与神经元联接的强度。b 是所谓的偏置(bias),标明一个神经元是不是可被输入激活的阈值。这个单一的神经元能够经过下面的公式核算。(图六)是的,这也即是前面说到的用一条直线分类数据集时所需的公式。而且实习上这也是一个神经元所能做的仅有作业:运用权重和偏置查看输入值,将一个数据点分到两类中的一类。带有两个输入时,一个神经元能够运用一条直线将一个数据点在一个二维空间中分红两类。假定有三个输入,一个神经元能够运用一个平面将一个三维空间分红两有些,以此类推。这即是所谓的「运用一个超平面切割 n 维空间(dividing n-dimensional space with a hyperplane)」。(图一十一)一个神经元能够将任何数据点分为两类运用单个神经元施行图画辨认一个「超平面(hyperplane)」怎样处理平常疑问呢?举个比方,假定你有许多如下的手写文本图画:(图一十二)手写文本的像素图画你能够练习一个神经元将一组图画分类为「数字 8 的图画」和「其它」两类。你该怎样做呢?首要,你需求预备数万张用于练习的样本。假定单张图画是 28×28 像素的灰度图画,它可对应于一个 28×28=784 个数字的数组。假定给定 55,000 张样本图画,那就将得到一个带有 784×55000 个数字的数组。(图一十三)关于这 5.5 万个样本中的每一张样本图画,你都能够将 784 个数字输入到一个神经元中,这些每个样本都带有一个练习标签--是不是标明晰「8」。(图一十四)正如你在 Playground 演示中看到的那样,该核算机遇测验寻觅权重和偏置的最优组合,进而分辩每张图画是不是是「8」。在经过了 5.5 万个样本的练习往后,该神经元会生成如下的一个权重调集,其间蓝色代表正值,赤色代表负值。(图一十五)即是这么的。即即是这么十分初始的单个神经元,你也能够在手写文本图画的辨认上完结 90% 的精确度[1]。要辨认 0-9 这 10 个数字,你只需求 10 个神经元就能抵达 92% 的精确度。再说一次,这个神经元所能做的仅仅将数据点分红两类:「8」或「其它」。啥才干算作是一个「数据点」?在这个事例中,每一张图画包括 28×28=784 的数字。从数学的视点上说,你能够说每张图画都代表了 784 维空间中的一个点。该神经元用一个超平面将这个 784 维空间分红了两个有些,然后将每张图画(每个数据点)分为了「8」或「其它」。(是的,咱们简直不或许期望维度空间和超平面看起来是怎样的。仍是不要去想了。)在上述比方中,咱们所用的样本数据是手写文本的图画,但你也能够运用神经网络分类其它许多类型的数据。比方,网络游戏供给商能够经过查看玩家活动日志来辨认做弊的玩家;电子商务供给商能够经过页面效力器拜访日志和生意前史辨认优异客户。换句话说,你能够将任何能够改换成数字标明的数据标明成 n 维空间中的数据点,然后让神经元找到所需的超平面,看它是不是能帮你有用地分类你的疑问。怎样练习神经网络?如你所见,神经网络是用根底数学完结的简略机制。神经网络和传统编程之间的仅有不相同是:你让核算机经过学习练习数据集来断定参数(权重和偏置)。换句话说,咱们的样本中练习出的权重办法不是由人类编程的。在这篇文章中,我不会详细地谈论你能够怎样运用反向传达和梯度下降等算法练习参数。我只想说,练习进程中的核算机遇测验一点点增大或减小每个参数,看其能怎样削减比照于练习数据集的差错,以望能找到最优的参数组合。(图一十六)你能够将核算机看作一个学生或初级职工。开端的时分,核算机遇犯许多错,它需求一些时刻才干找处处理实在国际疑问(包括或许的将来疑问)的实习办法并最小化差错(即所谓的泛化(generalization))。(图一十七)在其能够最小化差错之前,一个神经网络需求练习时刻咱们或许会在将来的一篇文章中从头谈到这一主题。至于如今,你只需求知道 TensorFlow 这么的神经网络库现已包括了大有些练习必需的数学常识,而不用过于忧虑。更多神经元,更多获取特征咱们现已展现了单个神经元进行简略分类的办法,但你或许也想知道怎样运用单个神经元树立能够辨认数千张不相同图画、以及能与专业围棋手对立的网络。有一个要素能够解说为何神经网络能变得比咱们上面描绘的更聪明。让咱们看一下来自 TensorFlow Playground 的另一个样例。(图一十八)这个数据集不能被单个神经元分类,由于两组数据点不能被一条直线分隔。这即是所谓的非线性分类疑问。在实习国际中,非线性和凌乱的数据集是无限的,比方上面这个,而疑问是怎样捕捉这种类型的凌乱办法?答案是在输入值与输出神经元之间添加一个隐含层(hidden layer )。(图一十九)TensorFlow Playground 上的非线性分类疑问这儿发作了啥?假定你点击隐含层中的每一个神经元,你就会看到它们每一个都在进行简略的单条直线的分类:榜首个神经元查看数据点是在左面仍是在右边第二个神经元查看它是不是在正右方第三个查看它是不是在右下方这三个作用被称为数据的特征。这些神经元的输出标明相应特征的强度。终究,输出层的神经元运用这些特征对数据分类。假定你制造一张包括这些特征值的三维空间图,这个终究神经元能用一个平面简略的区别该空间。这儿有一个将初始数据改换为特征空间的比方。(图二十)(图二十一)(图二十二)一个隐层将输入改换为特征空间,使其可线性分类在 Playground 的演示比方中,这么的改换致使多种特征对应一个三角形或矩形区域。假定你经过点击「plus」按钮参加更多神经元,你将看到输出神经元能捕捉数据会集更多凌乱的多边形。回到作业者的类推,你能够说这种改换是一个履历丰厚的专家在平常作业中获取见地。一个新职工会被来自邮件、手机、老板、花费者等各方的恣意信号所迷惑,但高档职工在从这些输入中获取要害信号却很高效,而且能依据一些首要准则安排这些凌乱事项。神经网络相同如此,企图获取数据会集最首要的特征处理疑问。这也是为何有时神经网络在处理一些凌乱的使命上能够恰当聪明。(图二十三)神经网络(看起来)好像能够从随机信号中获取见地咱们需求更深化:树立笼统的层次构造一个单隐含层有更多的神经元,你就能捕捉更多的特征。而且有更多隐层,意味着你能从数据会集获取更多凌乱的构造。鄙人一比方中,你能够看到它是怎样的强壮。(图二十四)分类此数据集你会编写啥样的代码?几十个 IF 句子带有许多的条件和阈值,每一个都会给定的数据点应当坐落哪个小区域。我自个是不想这么做。这个是机器学习和神经网络逾越人类程序员体现的展现。(图二十五)在 TensorFlow Playground 上的双螺旋疑问很帅,不是吗?你方才看到的是核算机企图树立深度神经网络的笼统层次构造( hierarchy of abstraction)。榜首张隐层中的神经元正在进行相同简略的分类,可是第二、第三隐含层中的神经元正在从简略特征中组合出凌乱特征,并终究产出双螺旋办法。更多神经元 + 更深的网络 = 更凌乱的笼统。这也是简略的神经元怎样变得更聪明,并在图画辨认、围棋这些特定疑问上体现如此之好的要素。(图二十六)Inception:google揭穿的一个图画辨认模型一些揭穿的深度网络可视化样例展现了它们进行练习、树立辨认办法的层级构造的办法--从简略的边际和斑斓,到方针的有些部位以及全体种类。两大应战:核算才干和练习数据在此文章中,咱们看到了一些 TensorFolw Playground 演示解说了神经网络的机制和才干。就像你看到的那样,这一技能的根底十分简略。每一个神经元只将一个数据点分类成两个种类中的一个。可是,经过有更多的神经元和深度层,一个神经网络能获取出练习数据会集躲藏的见地和凌乱办法,而且树立笼统的层级构造。接下来的疑问是,为何如今还不是每自个都在运用这一无穷的技能?这是由于神经网络还有两大应战。榜首个是练习深度神经网络需求许多的算力。第二,它们需求许多的练习数据集。一个强力的 GPU 效力器或许要花费数天、乃至数周的时刻,才干运用数百万张图画的数据集练习出一个深度网络。而且,为了得到最佳的练习作用,需求联络不相同的网络方案与算法,并进行许多的试错。如今,一些研讨者会运用几十个 GPU 效力器,乃至超级核算机来进行大方案散布式的练习。但在不久的将来,悉数处理的散布式练习与猜测效力--比方google TensorFlow 云机器学习路径--或许会处理这些疑问,为咱们供给本钱合理的依据云的 CPU 和 GPU,而且也或许会把大型的或深度的神经网络的才干敞开给每一自个。&这篇文章由机器之心编译,转发请联络本大众号获得授权。------------------------------------------------参加机器之心(全职记者/实习生):投稿或寻求报导:广告&商务协作:
关键字: 神经网络,理解,谷歌,官方,指南,深度,神经元,学习,源码,游乐场,试试
看过本文的人还看过
人气:1334 更新:
人气:656 更新:
人气:536 更新:
人气:481 更新:
机器之心的更多文章
大家在看 ^+^
推荐阅读 ^o^
『中國邊疆研究與歷史書寫』研討會日程安排
过真伤己、过直伤人
中国人走得太远太快,灵魂跟不上了(深度好文)
他说第二,有人敢说第一吗?
猜你喜欢 ^_^
24小时热门文章
微信扫一扫
分享到朋友圈

我要回帖

更多关于 消愁 毛不易 的文章

 

随机推荐