专访TensorFlow贡献者唐源:掌握 Google 深度学习框架的正确姿势

  自 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 的核心创始成员,研究专利数据挖掘、无关键字现有技术搜索、策略推荐等。

  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 的实现。

  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 上面也有很多值得学习的代码和例子,如果对源代码比较感兴趣,也鼓励大家积极参与贡献。

上一篇:python爬虫抓取富贵论坛


下一篇:盘点市面上主流的时序数据库