首届TensorFlow开发者大会:TensorFlow发展这一年来的总结

56b14b53ffb03ebde42d361a5fc36dd8.jpg

\\

Google于2017年2月16日(北京时间)凌晨2点在美国加利福尼亚州山景城举办了首届TensorFlow开发者峰会。Google现场宣布全球领先的深度学习开源框架TensorFlow正式对外发布V1.0版本,并保证Google的本次发布版本的API接口满足生产环境稳定性要求。前言

\\

TensorFlow 在 2015 年年底一出现就受到了极大的关注,经过一年多的发展,已经成为了在机器学习、深度学习项目中最受欢迎的框架之一。自发布以来,TensorFlow不断在完善并增加新功能,直到在这次大会上发布了稳定版本的TensorFlow V1.0。这次是谷歌第一次举办的TensorFlow开发者和爱好者大会,我们从主题演讲、有趣应用、技术生态、移动端和嵌入式应用多方面总结这次大会上的Submit,希望能对TensorFlow开发者有所帮助。

\\

TensorFlow: 为大众准备的机器学习框架

\\

TensorFlow在过去获得成绩主要有以下几点:

\\
  • TensorFlow被应用在Google很多的应用包括:Gmail, Google Play Recommendation, Search, Translate, Map等等;\\t
  • 在医疗方面,TensorFlow被科学家用来搭建根据视网膜来预防糖尿病致盲(后面也提到Stanford的PHD使用TensorFlow来预测皮肤癌,相关工作上了Nature封面);\\t
  • 通过在音乐、绘画这块的领域使用TensorFlow构建深度学习模型来帮助人类更好地理解艺术;\\t
  • 使用TensorFlow框架和高科技设备,构建自动化的海洋生物检测系统,用来帮助科学家了解海洋生物的情况;\\t
  • TensorFlow在移动客户端发力,有多款在移动设备上使用TensorFlow做翻译、风格化等工作;\\t
  • TensorFlow在移动设备CPU(高通820)上,能够达到更高的性能和更低的功耗;\\t
  • TensorFlow ecosystem结合其他开源项目能够快速地搭建高性能的生产环境;\\t
  • TensorBoard Embedded vector可视化工作;\\t
  • 能够帮助PHD/科研工作者快速开展project研究工作。\

Google第一代分布式机器学习框架DistBelief不再满足Google内部的需求,Google的小伙伴们在DistBelief基础上做了重新设计,引入各种计算设备的支持包括CPU/GPU/TPU,以及能够很好地运行在移动端,如安卓设备、ios、树莓派等等,支持多种不同的语言(因为各种high-level的api,训练仅支持Python,inference支持包括C++,Go,Java等等),另外包括像TensorBoard这类很棒的工具,能够有效地提高深度学习研究工作者的效率。

\\

TensorFlow在Google内部项目应用的增长也十分迅速:在Google多个产品都有应用如:Gmail,Google Play Recommendation, Search, Translate, Map等等;有将近100多project和paper使用TensorFlow做相关工作。

\\

8fbdc14725901669490f0817e48e1615.jpg

\\

TensorFlow在过去14个月的开源的时间内也获得了很多的成绩,包括475+非Google的Contributors,14000+次commit,超过5500标题中出现过TensorFlow的github project以及在Stack Overflow上有包括5000+个已被回答的问题,平均每周80+的issue提交。

\\

过去1年,TensorFlow从最开始的0.5,差不多一个半月一个版本:

\\

475bc5a185ba9004c787e4deb943e1a2.jpg

\\

   TensorFlow 1.0的发布

\\

TensorFlow1.0也发布了,虽然改了好多api,但是也提供了tf_upgrade.py来对你的代码进行更新。TensorFlow 1.0在分布式训练inception-v3模型上,64张GPU可以达到58X的加速比,更灵活的高层抽象接口,以及更稳定的API。

\\

   New High Level API

\\

对于新的抽象接口,TensorFlow相对于其他DeepLearning FrameWork做的比较好,layers能让人很容易build一个model,基于layer之上的包括TF.Learn里面仿照scikit-learn风格的各种estimator设计以及之后将融入TensorFlow官方支持的Keras,能够让小伙伴用几行配置模型结构、运行方式、模型输出等等;在这层之上就有canned Estimator,所谓的model in box,比如lr,kmeans这类。

\\

049dc0fa451b8104fdb3e70de2256ea6.jpg

\\

   Broad ML Support

\\

在TensorFlow中有一些高兴的机器学习的算法实现,如LR, SVM、 Random Forest,在TF.Learn中有很多常用的机器学习算法的实现,用户可以很快的使用,而且API风格和scikit-learn很类似,而且在后续的video提到会有分布式的支持。

\\

   XLA: An Experimental TensorFlow Compiler

\\

TensorFlow XLA能够快速地将TensorFlow转成比较底层的实现(依赖device),后面也有talk详细讲述了XLA。

\\

f3365fc60401aaab0338266d6d721e08.jpg

\\

   广泛的合作

\\
  • Included in IBM's PowerAI\\t
  • Support movidus myriad 2 accelerator\\t
  • Qualcomm's Hexagon DSP (8倍加速,这里还请了Qualcomm的产品负责人来站台)\

   TensorFlow In Depth

\\

TensorFlow在research和production上有很好的优势,如下图:

\\

017e760917a25d42f5206e673f3c7bbc.jpg

\\

在模型训练上,1机8卡的性能无论是在一些标准的基准测试或者是真实数据上都有比较好的加速比:

\\

cc9c74794b1a0bfd2d6a83556ba7e639.jpg

\\

当然在多机分布式训练上,能够达到64张GPU上58倍的加速比:4b1317d8fe7f9defe7471a72ef67cdf1.jpg

\\

TensorFlow被一些顶尖的学术研究项目使用:

\\
  • Neural Machine Translation\\t
  • Neural Architecture Search\\t
  • Show and Tell\

当然TensorFlow在生产上也被广泛应用:

\\

c84dfea1a540332ce9e6f33d5cf816b5.jpg

\\

如Mobile Google Translate,Gmail等等,也被国内外很多大厂使用做为模型训练的工具。835f21ed861b3ab159404a418c0040b5.jpg

\\

这些都是Jeff Dean在Keynote的内容讲到的内容,内容有点多,而且个人感觉这群google的小伙伴的ppt做的有点任性,不过谁叫他们牛逼呢,接下来几个talk比较有技术含量,相信各位会更加有兴趣。

\\

有趣的应用案例 皮肤癌图像分类

\\

首先我们说下两个数据:1. 医疗机构统计皮肤癌在早期的治愈率是98%;2. 在2020,预计全球有61亿台智能手机。

\\

这位小哥做的工作是啥呢,他拿到了一批皮肤癌的数据,然后使用一个pretrained的inception-v3对数据来做一个inference:

\\

b63971950f2fc59735e94bf5f833c02d.jpg

\\

最终结果:

\\

577b13e8197528c50d28d7a69a219ff1.jpg

\\

而且在手机上很容易搭建,完成一个app用来做早起皮肤癌的检测:

\\

a5208b29fae374a17d8a54973ee5989d.jpg

\\

最终相关成果发表在Nature,而且在Nature的封面,这是一个特别成功地通过计算机视觉及深度学习相关的技术,利用廉价的移动设备,能够很有效地检测是否有皮肤癌,大大节省了医疗检测的成本,相信在未来会有更多相关的技术出现。

\\

cc96b72eb8a671eed6caf22b3c582080.jpg

\\

利用AI预测糖尿病,预防失明

\\

这个talk讲的前面也提到的通过视网膜图像预测糖尿病,预防失明:

\\

729edb4a8bc336a5cd739122cd65dc68.jpg

\\

1d0f06d20f8684095f95b87e569f12bd.jpg

\\

通过视网膜图片预测糖尿病是一个困难的问题,即使是专业的医生,也很难去判断,但是深度学习却可以帮助我们:

\\

83d22e945e00be3c5b2e1c4e22750a90.jpg

\\

通过收集适量的医疗数据,构建一个26layers的深度卷积网络,我们可以让网络自动学习这些图像中的feature,来获得较高的分类准确率,而这个是人眼很难解决的。

\\

这里有一个demo的演示:

\\

87212c35684ddd1050e34d952b5b5474.jpg

\\

模型最后的评估比专业医生对比,F-score为0.95,比专业医生的中位数0.91还高,这个太厉害了,相信不久会看到深度学习在医疗,尤其是这种病症图像分析上有很多惊人的成果。

\\

47020db22c18e57b5c9049fb47312e35.jpg

\\

Wide \u0026amp; Deep In Google Play

\\

这项技术有段时间特别火,被用来做推荐相关的应用,首先解释下Memorization和Generalization:

\\

d5beb0a6e512c1532d8946a0a351d31f.jpg

\\

模型的基本结构如下:

\\

cce11dc5b9e60593baf33a5b96ed8213.jpg

\\

整个推荐会同事考虑到商品的相关性以及一些推理关系,例如老鹰会飞、麻雀会飞这类逻辑属于Memorization, 而说带翅膀的动物会飞这属于Genralization。

\\

在具体的应用场景,如Google Play的App推荐:

\\

526eef534fea599d35be9334f669aa6d.jpg

\\

135836eb97ca676a87b0dada212a2336.jpg

\\

这里构建一个如下图的网络来进行训练(joint training):

\\

cdbbfdebaf2d6600eda5413af5f9464d.jpg

\\

为啥要joint training,而不是直接用deep和wide的来做ensemble呢?

\\

这里做这个给出一个解释,因为wide和deep会相互影响,最后精确度会高,并且model会比较小:

\\

f8b32f23cea78561588b855dd9bab2f0.jpg

\\

而上面提到的Wide \u0026amp; Deep Learning Model在Tensorflow下仅仅只需要10行代码来实现(突然想起了那个100美元画一条线的故事):

\\

b19c1878619141998a3af4661ed41a47.jpg

\\

Magenta: 音乐和艺术生成

\\

这个项目讲的是利用深度学习来做一些艺术相关的工作,项目地址:https://github.com/tensorflow/magenta有一些很好玩的东西,如风格化,生成艺术家风格的音乐,利用深度学习模型模拟人类对艺术的想象力,创造出属于DeepLearning的艺术风格。

\\

DeepMind团队所做的一些开发工作

\\

DeepMind在被Google收购之后,也选择TensorFlow作为其深度学习相关研究的平台,然后做了很多很有意思的东西。

\\

   Data Center Cooling

\\

这是Google在全世界各地若干个数据中心之一:

\\

7f932fe44ac1bce9aa7c366d591db56a.jpg

\\

然后这群Google的小伙伴做了些什么事情呢?

\\

83afaa52a2be537844569cdde10ee0f9.jpg

\\

Google的小伙伴利用强化学习,是的!你没有听错,应用在AlphaGo上的一种技术来做数据中心冷却设备的自动控制,并且效果十分显著:

\\

613a8935ca61abc0e11c104a3842fec8.jpg

\\

   Gorila

\\

Gorial是DeepMind下的一个强化学习的框架,基于TensorFlow的高级API实现,很稳定,只需要更改其中极少部分代码就可以完成新的实验,支持分布式训练,十分高效,并且训练好的模型可以通过TensorFlow Serving快速地部署到生产环境。

\\

   AlphaGo

\\

这个相信不说,大家都知道的,第一次在围棋上打败人类,然后升级版的Master 连续60盘不败,原理不说了,网络上很多分析文章,贴两张图聊表敬意:

\\

a53261dd12859919c6ab300f092127cc.jpg

\\

13d96e376fd7fdf1520c8495b8d63a7f.jpg

\\

b4aba95886e5d61f4d084d415aae31ba.jpg

\\

0a31baa6b5ea635bbb44a940db0ab418.jpg

\\

   WaveNet:语音音频合成

\\

这里DeepMind的小哥演示了WaveNet的一些demo, 具体的可以参见(https://deepmind.com/blog/wavenet-generative-model-raw-audio/)来了解。贴一些效果对比:

\\

9b258763a9bfdb18f9285bf1d0cdb163.jpg

\\

XLA以及Keras与TensorFlow的融合 XLA与TensorFlow的结合

\\

TensorFlow的各方面的优势都很突出,除了在速度这块有些不足,如果,TensorFlow能在速度上做进一步优化,会怎么样呢 ?

\\

280b3b60dd50539d08a21817a3b91de7.jpg是的,Google的开发者也意识到这个问题,于是有了这个XLA, XLA的优势:

\\
  • 提高执行速度,编译子图会减少生命周期较短的op的时间,来至少TensorFlow执行是的时间;融合pipelined的op来减少内存的开销;\\t
  • 通过分析和调节内存需求,来减少很多中间结果的缓存;\\t
  • 减少定制化op的依赖,通过提供自动化融合底层ops的性能来达到原先需要手工去融合定制化op的性能;\\t
  • 减少移动设备的内存占用,使用AOT编译子图来减少tensorflow执行时间,能够共享object/header file pair给其他应用,能够在Mobile Inference上减少几个数量级的内存占用;\\t
  • 提高了程序的可移植性,能够在不改变大部分tensorflow源码的前提下,很容易地更改以适应新的硬件设备,\

XLA主要包括两种使用方式:JIT(Just in time)能够自动将Graph中的部分子图通过XLA融合某些操作来减少内存需求提高执行速度;AOT(Ahead of time)可以提前将Graph转换为可以执行的源码,减少生成的可执行文件的大小,减少运行的时间消耗,一个很明显的应用场景是模型在移动设备上的Inference优化。

\\

因为XLA原理涉及到编译器,这块不是我擅长的地方,所以这里就这样过了, 如果有兴趣的小伙伴可以关注下(https://www.tensorflow.org/versions/master/experimental/xla/)还有此次TensorFlow Dev Submit上XLA的talk(https://www.youtube.com/watch?v=kAOanJczHA0\u0026amp;index=2\u0026amp;list=PLOU2XLYxmsIKGc_NBoIhTn2Qhraji53cv#t=108.706756)

\\

最后贴几张XLA的一些评测性能:

\\

f609a1d4f4da6822edb6e64b0e67ba31.jpg

\\

09fb4078b2f2112780d7d5f7178e8e95.jpg

\\

cfc571101c9226f66f6e95368e1d0cd3.jpg

\\

Keras与TensorFlow的集成

\\

Keras 是一个可以在很多平台上应用的深度学习框架,\"An API Specify for building deep learning models across many platforms\"。

\\

TensorFlow已经会在官方TensorFlow支持,1.1会在tf.contrib,1.2会tf.keras,而且会支持TensorFlow Serving,是不是很心动。

\\

Keras的作者在TensorFlow Dev Submit上讲了以下内容:

\\

6ee5cbb10f1a7e53cca5e06aece1a03d.jpg

\\

所以之后Keras的用户可以更快的在TensorFlow的框架下做出相应地模型,能更方便地进行分布式训练,使用Google的Cloud ML, 进行超参,还有更更重要的:TF-Serving。这些feature现在好像还没有支持,不过应该很快了,大家可以期待下。

\\

这里,Francois Chollet使用Keras构造了一个Video-QA的model,这个模型在Keras的官方文档也有描述,具体可以去那边看看,大概是这样一个场景:

\\

4dbd555531071eb01049bcdf6cf5f443.jpg

\\

这样一个场景,利用原生的python构造太难了,但是用Keras,只需要考虑设计你的模型,如何来完成类似的功能,完全不用担心coding的实现,如图是一个类似问题的一个简单地模型设计:

\\

dd4bd54d3ac250d4d2073ff16fecc4d5.jpg

\\

更详细一点:

\\

5bec4fdc4c99aac4a1ea310860e443e3.jpg

\\

而在Keras中如何实现呢?

\\
\video = tf.keras.layers.Input(shape=(None, 150, 150, 3))\cnn = tf.keras.applications.InceptionV3(weights='imagenet', include_top=False, pool='avg)\\cnn.trainable = False\encoded_frames = tf.keras.layers.TimeDistributed(cnn)(video)\encoded_vid = tf.layers.LSTM(256)(encode_frames)\\question = tf.keras.layers.Input(shape=(100), dtype='int32')\x = tf.keras.layers.Embedding(10000, 256, mask_zero=True)(question)\encoded_q = tf.keras.layers.LSTM(128)(x)\\x = tf.keras.layers.concat([encoded_vid, encoded_q])\x = tf.keras.layers.Dense(128, activation=tf.nn.relu)(x)\outputs = tf.keras.layers.Dense(1000)(x)\\model = tf.keras.models.Mode([video, question], outputs)\model.compile(optimizer=tf.AdamOptimizer(), loss=tf.softmax_crossentropy_with_logits)
\\

这里代码是无法在现在的tensorflow版本上跑的,如果想了解下keras上构建上述模型的简便性,可以看看Keras的文档(https://keras.io/getting-started/functional-api-guide/)。Keras在构造深度模型的方便是大家众所周知的,值得期待之后Keras在TensorFlow的更新:

\\

c5f9373fcfd1cffa22a9d6d9ac6f2017.jpg

\\

TensorFlow High-Level APIs: Models in a Box

\\

TensorFlow在灵活性、可扩展性、可维护性上做的很好,但是现在在高级api、模块式算法这块原先都还不足,但是Google Brain的工程师在这个talk上介绍了一些High-level API的相关工作。

\\
  • layers: 封装了一些层的操作,简化用原生TensorFlow源码,比如new 一个variable来做weight等等;\\t
  • Estimator or Keras: 封装了一些更高层的操作包括,train和evaluate操作,用户可以通过几行代码来快速构建训练和评估过程;\\t
  • Canned Estimators: 更高级API,所谓的Models in a box\

c00ea6c75edb5d3e64a2d75388777af9.jpg

\\

构造左图中所示的深度网络只需要如图右中的七行代码同样,构建训练、评估、预测也很快可以通过api调用完成:

\\

cf345ef92aa867215a6d81fcba91ddf0.jpg

\\

最后是Model in a Box

\\
\area = real_valued_column(\"square_foot\")\rooms = real_valued_column(\"num_rooms\")\zip_code = sparse_column_with_integerized_feature(\"zip_code\