【AI创新者】是CSDN人工智能频道精心打造的专栏,本期主人公是PPmoney大数据算法总监黄文坚,他将为大家讲述Google深度学习框架TensorFlow以及他与唐源共同著作的《TensorFlow实战》一书。在CSDN学院,黄文坚老师即将开课:《使用TensorFlow创建可自动玩游戏的DQN模型》,本次课程集中讲解Deep-Q Network及其TensorFlow的实现。欢迎大家报名学习、交流。
同时也欢迎人工智能相关的技术投稿、约稿、行业分析、热点新闻、编译等,请发送邮件至[email protected],期待大家投稿。
自Google AlphaGo以4:1总比分战胜韩国名将李世石后,深度学习开始被人们广泛关注。2月16日,Google发布了TensorFlow1.0版本,该版本的发布是深度学习框架发展中里程碑的一步。TensorFlow于2015年底正式开源,这期间TensorFlow不断给人惊喜,并推出了分布式版本,服务框架TensorFlow Serving、可视化工具TensorFlow、上层封装TF.Learn、其他语言(Go、Java、Rust、Haskell)的绑定、Windows的支持、JIT编译器XLA、动态计算图框架Fold,以及数不胜数的经典模型在TensorFlow上的实现(Inception Net、SyntaxNet等)。在这一年多时间,TensorFlow已从初入深度学习框架大战的新星,成为了几近垄断的行业标准。
PPmoney大数据算法总监黄文坚
为了帮助机器学习、分布式计算领域的学生、从业者,特别是正在学习深度学习技术,立志从事AI相关行业的朋友快速上手TensorFlow,PPmoney黄文坚和Uptake唐源共同撰写了《TensorFlow实战》一书,希望可以帮助读者快速入门TensorFlow和深度学习,在工业界或者研究中快速地将想法落地为可实践的模型。日前,黄文坚接受CSDN记者专访,介绍了他在深度学习领域的实践经验和成长心得,以及完成《TensorFlow实战》一书背后的原因和故事。
以下为采访实录:
CSDN:您在什么样的情况下第一次使用深度学习?其效果是否让您满意?
黄文坚:第一次接触深度学习和神经网络是在读研的时候,当时是要做一个图片二维码,就是把QR Code黑白块藏到一张图片中,手机通过扫描图片然后解出这个码。其实从图片上人眼是看不出任何差别的,通过特殊的频率编码将信息存储在图片中,通过神经网络来进行解码,使用这个几层深的神经网络模型做分类,即对每一个module进行解调制,然后将它的输出结果连到LDPC纠错码进行整体解码,最后再把网址信息恢复出来,当时的效果还是挺满意的。
这是我在读研究生时候的主要工作,后来也通过这个拿到了MobiCom的一个奖项,学校为此申请了几个专利,也就是从那个时候开始,了解到深度学习的强大,尤其是在图片分类这块应用是非常强的。
CSDN:从阿里到明略再到PPmoney,您一直在和数据打交道,其中有哪些业务使用了深度学习技术?
黄文坚:在阿里,负责天猫的个性化搜索,主要是针对不同用户,搜同一个关键词时,其页面展示的结果不同,使用户最感兴趣的排在前面。当时是使用了阿里内部的一个深度学习框架实现的,取得了一个不错的效果;
在明略,主要是服务一些大型的企业客户,比如银行、券商、保险公司、制造业公司和政府机构等。以某制造业龙头企业为例,当时是在那个企业有一个高端机械设备的故障率预测项目,我们有很多时间序列信息,也就是来自机械设备的信号接收装置。它是每隔0.01秒甚至更短的时间就会产生一个信号,根据这些时间信号来预测未来可能出现的故障情况,这在当时也取得了很高的准确率;
在PPmoney,主要业务是金融风控、量化策略以及P2P理财产的推荐。在金融风控方面,因为我们有大量的客户数据,这些数据可以用来判断客户是否容易逾期,甚至是否是一个欺诈客户或者不良客户,通过预测可以降低我们平台系统的风险。此前是运用了大量特征工程的方法,但后面使用深度学习后,我们对这些特征就不用进行大量的手工处理,直接交给深度学模型即可,从而得到比其他模型更好的结果;在量化策略方面,像金融、股票、期货这种数据天然就是以时间序列排序的,所以这种应用CNN或者RNN深度学习处理特别好。而平时我们做交易会有一些技术指标,而这些是人工提取出来的,但使用深度学习后,让这个模型自己根据历史的数据总结出最有价值的特征,从而减少人工操作的部分,虽然可解释性不强,但实际的效果会非常好。
CSDN:各种深度学习开源工具让DL变得更简单,但TensorFlow是在2015年才开源,在此之前,您尝试过哪些DL框架?如何看待它们的优缺点?
黄文坚:在这本书中详细比较了十个最为常见的深度学习框架,而在使用TensorFlow之前,早期主要有Theano、Keras、Caffe、Torch等这几个开源框架。
当时学术界应用较多的是Theano,同时Theano也是和TensorFlow最像的深度学习框架,可以说TensorFlow是它的一个升级版。它们都支持符号计算和自动求导,但在Theano里限制比较多,如它的编译速度特别慢,它的整个代码包括CUDA的代码,都是写在Python文件里,CUDA代码是以字符串的形式存在Python文件中,使用起来不是特别方便,同时运行速度也比较慢,这也限制了Theano在大规模的工业应用上的应用;
Keras当时是构建在Theano上的一个上层封装,现在他也支持构建在TensorFlow上,它是一个极简的深度学习框架,可能只用几行或者十几行就能实现一个非常复杂的神经网络。当然,它的缺点也很明显,就是它的底层当时是基于Theano,所以运行速度、功能会有一定限制,同时也不能支持多GPU或者分布式;
Caffe当时应该是最火的开源框架,它主要是使用一个二进制文件,通过执行训练或者预测命令。而它的网络是通过写一个Protobuf格式的文件来定义的,所以它调试参数或者调试网络结构时不是很方便,但它的训练速度确是几个框架中最快的,而且针对卷积神经网络优化做的特别好。而缺点就是刚刚提到的,当要进行大量的实验时,不是特别方便,因为它的配置文件和它的二进制程序不太适合在Python中反复修改和调试;
关于Torch,这个是Facebook的开源框架,历史比较悠久,最开始是使用Lua语言编写,平时执行的效率非常高,可能会比Python高几十倍。但该框架的问题在于应用的语言比较小众,使用的人相对比较少,学习成本较高以及语言内部的配套组件相对较少等。而在Python中,有Pandas、NumPy、XGBoost、Scikit-learn等配套组件,应用起来特别方便。但Torch使用的Lua中就缺少这些东西,所以使用起来不是很方便,同时它框架本身跟Keras比较像,Keras借鉴了Torch,在定义网络的时非常简洁。但如果从来没有使用过Python或者没有使用过Keras的人,尝试一下这个框架也是可以的,最近Torch也推出了Python的版本叫PyTorch,从某些角度上解决了它语言本身的问题。
CSDN:您写《TensorFlow实战》这本书的初衷和动力是什么?这本书适合的阅读对象是谁?读者有哪些收益?他们需要一些知识基础吗?
黄文坚:当时是在一个技术分享活动结束后,电子工业出版社有位编辑联系我,咨询我是否有兴趣写一本这样书。其实我听后还是非常感兴趣的,因为TensorFlow也才刚火起来不久,正好国内使用的人还不多,希望通过一本入门同时包含一些经典网络实现的书籍,能让大家更熟悉这个开发框架,用它能做出更多有用的模型。
这本书适合阅读的对象应该是对深度学习有一定了解,同时对Python编程比较熟悉的人士。不需要对深度学习理解特别深,因为在书中对各个神经网络的原理和结构也有很多的解释,读者需要了解什么是神经网络和机器学习的一些基础概念,比如说训练集、测试集、准确率评价等等。
而读者的收益主要包含两个方面,一方面如果读者对深度学习不是太熟悉和了解,在本书中能够学到各个类型的神经网络,比如说自编码器、多层感知机、卷机神经网络、循环神经网络、深度强化学习等等;另一方面读者可以使用TensorFlow来实现一些经典模型或者网络。书中会通过实际的例子,也就是具体实现什么模型,顺带讲解TensorFlow的代码和API接口,整个初衷还是通过实现一些经典的模型,以此构成整本书的发展。
CSDN:写作过程中有哪些有趣的事可以分享给大家?
黄文坚:开始写作时并没有觉得工作量这么大,但在写的过程中发现需要花费的时间还是非常多的。在讲解一些网络实现时也查阅了大量的相关论文,从中也学到了很多东西。希望能把这些内容分享给读者,因为深度学习是一个发展非常迅速的领域,基本每年都会有很多新的东西出来,可能在最新的一些论文中,大家都开始使用TensorFlow来实现,在此之前都是运用Caffe,这也是学习TensorFlow的一个优势,即能最快地跟上一些最新的技术发布,如果有新的论文研究成果开源,其绝大多数也是使用TensorFlow来实现的。
CSDN:书中有哪些重点内容是尤其推荐的?
黄文坚:《TensorFlow实战》的第六章介绍TensorFlow实现经典卷积神经网络,中间有详细讲解AlexNet、VGG、Inception和ResNet这四个经典的深度学习网络,推荐大家重点阅读。因为从中可以看到卷积网络中各个应用和实现起来的技巧。
第八章介绍深度强化学习,这块能做出很多有意思的东西。比如可以实现自动玩游戏的程序,通过游戏的视频画面像素直接学习如何来进行游戏。在此我们也列举了实例,是个简单的游戏,实际上是可以推广到非常复杂的模型。像之前DeepMind推出的程序是可以在太空中自动来玩打飞机的游戏,这个游戏叫Atari。在本书中并没有实现那么复杂的网络,但整体的框架和Atari是类似的,读者可以通过它来进行其他游戏的尝试。
CSDN:对开发者选择深度学习平台有什么建议?
黄文坚:对大部分开发者而言选择深度学习框架有三点特别重要,首先这个框架是不是主流的,如果是主流的就会在上面有很多的开源实现,从而查找资料、文档,问问题也会比较方便,这也是最重要的一点。而且它会比较稳定,使用中遇到的问题多半可以得到快速修复;
其次使用它开发起来的效果,简单来说就是写的速度快不快。TensorFlow的设计是比较偏底层的,但它上层有很多比较方便的封装,比如说TFLearn、TFSlim、Keras。有了这些上层封装后,我们就能快速的进行一些简单模型的开发。如果要对底层网络结构进行一些细节上的修改,我们就可以使用最底层的API接口;
最后是该平台的运行速度,TensorFlow在刚刚推出时,它的运行速度还不是很快,后来则是凭借谷歌强大的工业实力,尤其是Google强大的技术团队,大约有200人从事该平台的开发,所以它在性能上的进步非常大,现在基本上已经达到主流分布式深度学习平台的执行效率。
最近Google发布了TensorFlow1.0版本,并且还特意提到对Inception v3分布式网络性能的提升。此前多块显卡或者多机器的效率不高,而现在使用8块显卡可以达到7.3倍的提速,64块显卡更是达到56倍的速度提升,所以它并行计算的效率还是非常高的。所以综合比较来说,还是推荐TensorFlow,毕竟它在主流性、开发的便捷性上,还有执行速度上都有不错的表现。
CSDN:目前深度学习相关的论文和工业界实践都很多,其中有哪些最新进展让您印象深刻?
黄文坚: AlphaGo无疑给人们留下了深刻印象,主要是深度强化学习,对强化学习过程的一些细节有所改进,但是对网络本身的内容以及结构改进和优化并不多。
另外一个特别火的就是GAN这系列,GAN已经能做非常有意思的事情,比如给它大量的语言和图片进行数据训练,它可以完成事务的描述,比如我说一只红色的鸟,它就能自动把这只红色的鸟绘制出来,从无到有就是根据它从大量数据中的学习,以及掌握到的知识和经验实现的。拓展开来,以后可能不仅是图片,可能说一个内容概述,它就能把一段完整的话写出来。
最近一个能给给素描自动上色的人工智能程序,其效果也是非常惊艳的它把一个铅笔素描或者一幅黑白画,传至网络上,并自动配上一个比较合适的颜色。我也亲自在该网站测试了一次,虽然说可能还达不到人类的程度,但此效果已经非常理想了。
CSDN:有人认为AlphaGo能赢李世石一局就不错了,但现在AlphaGo的升级版Master已经横扫各大国手,出现这个”意外”的决定性因素有哪些?
黄文坚:起初,围棋是一个非常复杂的一个游戏,它有361个点,所以其状态数是3的361次方,其中除去一些非法的情况,总的状态数还是超过了整个宇宙原子的数量。因为变化实在太多,所以注定是无法穷举的。与国际象棋不同,现在只要计算能力够强,我们便可以暴力地搜索所有最优解,但在围棋上肯定是做不到的,所以之前业界普遍认为围棋是一个人工智能无法超越或者无法挑战的项目。
但AlphaGo做的确实非常好,它是使用了几个技术组合,就包括策略网络、估值网络、蒙地卡罗搜索树、快速走子这四部分。通过大量学习人类高手的对局以及自我对战,从中可以学到人类直觉上的一些战略。比如它对棋的厚薄会有一些判断,会对外势和实地会有一些考量,所以能以4:1战胜李世石。
之后AlphaGo的升级版Master则是完全抛弃了使用人类高手对战训练的一个网络,它是完全从0开始,自我对战,可能一开始是随机走子,到后面一步一步迭代,训练到现在这个水平。中间可能会抛弃掉很多人类棋手常见的错误,毕竟人类高手下的每步棋也不是最优解,即便学了大量的对局还是存在这个问题。但从0开始自己学习其效果可能会更好,这也是这次棋力提升的一个重大原因之一。
当然它可能还有使用到更深的网络,更好的训练方式,但是这里不管它是使用什么算法,它的底层肯定还是配置在TensorFlow这个集群上训练,所以也间接说明TensorFlow这个分布式计算或者它的科研能力还是非常强的,可以供给DeepMind研发出这样强的一个AI。
CSDN:对于AI在行业成熟应用有哪些启示?
黄文坚: AlphaGo一般来说不算一个成熟的应用,但它是一个特别好的宣传,成熟的应用目前更多还是在普通的判别模型或者是生成模型上。强化学习的话,目前比较稳定又有实际经济价值的点不是很多。像之前使用传统机器学习的地方,例如搜索推荐、广告,包括医学诊断,这块会大量应用深度学习,并且深度学习确实取得了远超其他传统模型的效果。
而在一些离钱近的方向,包括金融领域、风控、量化交易模型,在这块应用的规模比较大。在其他领域,像医疗诊断、自动驾驶亦或管理家庭生活,如Facebook CEO马克·扎克伯格前段时间就开发了一个叫Jarvis的AI程序,主要就是管理家庭生活中的一些操作。
总的来讲,并不是看上去最有轰动效果的实际价值就越大,很多时候可能是一些底层看不到的,比如说你今天被推荐了什么东西这类传统的推荐技术,这部分会慢慢开始使用深度学习,然后来替代之前一些老旧的机器学习模型。
CSDN:Chatbot是当前一个热点,DL powered assistant在数据积累和利用比较好的金融领域会首先成熟吗?
黄文坚: Chatbot目前来说挺有用,比如智能客服这类,会有直接的商业价值,但其中深度学习应用的点不是很多,更多是对规则和大量模板的匹配。而随机闲聊是可以用DL做出比较好的效果,例如让它回答的答案特别准确,但目前还没有实际的价值。
而DL powered assistant目前还处于早期阶段,当然有一些比较好的宣传,如国外有一家名为Kensho的AI企业,设计了一款针对金融领域的AI程序,目前看上去还没那么智能,很难给出决策或者建设性的意见。
但平时我们可以先从一些小的角度来思考问题,如深度学习能做得事情大概有三种,其一就是判别式,包括分类和回归;其二是生成式,包括生成语言和生成图像;其三是深度强化学习,可以对我们一系列的决策提供策略上的支持。如果不在这三个领域内,目前而言还是比较困难,理想中的人工智能还是比较遥远。
CSDN:有人说DL概念已经到了转折点,有人说GAN其实在以前就已经有类似的应用,计算、大数据和模型带来的深度学习红利是否已经见底?
黄文坚:深度学习当前正好处在发展中期的阶段,神经网络这个概念很早就被提出来,可能是在几十年前,当时的确轰动了一段时间,但受制于计算资源等问题之后便消沉了。而这次崛起一个方面是NVIDIA的GPU对深度学习提供了强大的计算资源,另外一个是我们积累了大量数据,其实深度学习对于数据量还有计算能力的要求是非常高的,一旦满足这两个条件就会获得非常好的效果,所以目前我并不认为深度学习概念已经到了转折点,而是处于加速上升的阶段。
但需要注意的是,有些报道中会把深度学习描述的无所不能,其实目前还是达不到的,现在我们能做的就是前面提到的那三个点,即判别式、生成式以及强化学习。这三个点还在持续的发展中,并且效果会越来越好,此后会有更多应用被人想到并付之行动最后被实施起来。
而GAN在此之前确实有一个跟它类似的概念,但两种方法从原理上是完全不一样的,所以GAN是一个全新概念。之后在并行计算和数据规模积累上,我相信会持续给深度学习带来额外的红利,如NVIDIA的GPU每年都会有50%左右的性能提升,之后可能会有专门针对深度学习的芯片和硬件被研发出来,包括Google在底层也在大规模使用它的TPU(Tensor Processing Unit),计算资源肯定会被不断提升,也会支持我们训练更加复杂的神经网络。
而大数据是最近这几年,其积累的数据量呈爆炸式增长,因为有特别多的东西可以被数字化,也包括物联网等。很多不为人们所知的Sensor会默默记录大量的数据,而这些数据未来又会给我们训练模型提供很好的帮助。
CSDN:对未来深度学习平台发展有哪些预测?
黄文坚:目前每家大公司都已经推出了自己的深度学习平台,如Google有TensorFlow;Facebook有Torch,可能接下来还会有Caffe2;Amazon有DSSTNE深度学习框架,最近它也接纳了MXNet作为AWS上最为推荐的深度学习框架;微软有CNTK;IBM最近也推出了一个名为Big DL的框架,是一个纯粹在CPU上计算的分布式深度学习框架。
基本上每家企业都有自己的DL平台,主要是为参与其标准的制订。如果哪家企业推出的框架,无论是在使用人数还是在应用面方面都有出色的表现,到后面的话语权也可能会最大,而且在框架上的一些应用,可以更灵活的进行操控,所以有实力的企业肯定会投入特别大的支持和资源。
但总体而言,我还是比较看好Google的TensorFlow,目前它最大的问题就是开发效率,Google已经还把Keras框架并到其中,作为它默认支持的一个辅助开发工具。现在我们就不用再使用几百行代码来实现一个复杂的网络,只需几十行代码就能搞定。当你需要在底层上进行一些微调,或者细节上做一些改进时,你同样可以使用最底层的接口,来实现一些当前不是特别流行或特别主流的方法,对于研究者而言也是非常方便的。
此外Google除了TensorFlow还推出了很多相关工具,比如它推出了tensorflow serving的服务框架,当我们训练好模型后,需要将它部署到服务器中提供预测服务,又或者是其他类型的计算服务。而其他几个框架部署还是比较复杂的,但TensorFlow提供了这个框架,就能实现特别高性能的部署服务。同时它还支持安卓和iOS以及嵌入式,所以应用面会特别广。现在已经可以在手机上,使用手机的CPU来计算运算深度学习的一些网络。
同时Google在这方面的投入应该也是最大的,目前有远超其他公司的研发人员,在全职做这一套工具,同时在GitHub上的Start数量也是遥遥领先其他框架,目前可能是有46000颗星,可能从第二名到第十名加起来也没有TensorFlow多,所以这是一个非常明显的优势。