[关闭]
@sambodhi 2017-10-13T14:42:15.000000Z 字数 3300 阅读 3592

TensorFlow 太垃圾了!

关于作者

Mathpix (官网: https://mathpix.com/ )的 CEO,对,就是那个世界首款能够根据图片中的手写内容来解决数学问题的应用,可牛逼了!不仅可以用来解决高中代数和几何问题,更可以解决微积分问题!用户只需打开应用,启动手机摄像头,拍摄手写内容,应用即可高亮显示识别到的数学方程,并上传至服务器进行解答。

Nico Jimenez,自我介绍是 Mathpix 公司的 CEO,热爱开发深度学习产品的攻城狮一枚。Nico Jimenez 表示,Mathpix 团队利用强大的深度学习算法,在手写内容中读取数学信息。该团队向计算机提供了大量数据用于训练。“随着我们从用户那里得到更多数据(其 API 每个月为全球各地的数百万用户处理 2000 万个图像),算法也将越来越智能”。

Nico Jimenez 还开发了Losswise(https://losswise.com),他在 Mathpix 公司开发的这种内部机器学习监控和分析解决方案已向公众开放。

Nico Jimenez 和 Bill Gates 一样,也是辍学生,2015 年从斯坦福大学辍学后创业了。

他日前发表了一篇吐槽 Tensorflow 的博文,让我们先睹为快吧!

我可能用了假 Google

每隔几个月,我都会在 Google 中搜索这些关键词:“ Tensorflow sucks ”或“ f*** Tensorflow ”,希望能在网上找到志同道合的黑粉。很遗憾,尽管 Tensorflow 问世近两年,我还是找不到让我满意的抨击 Tensorflow 的战斗檄文。

或许是因为我使用搜索引擎的姿势不对?但是,我认为出现这种局面,可能是因为这个原因: Google 妒羡。有这么一个“ Google 极度妒羡”的现象,具体表现为全球各地的工程师都这样臆想:

让我们把这些臆想抛在脑后,客观地看一下 Tensorflow 到底是什么样的货色吧。

曾记否,当 Tensorflow 刚问世的时候,开发者是怎么承诺的?亲们!我们保证,深度学习框架缺乏维护的暗黑时代,永远永远结束啦!!不信去看看 https://github.com/BVLC/caffe/issues 吧。或许我们会拥有一个像 Java 那样“一次编写,随处运行”的深度学习框架,虽然不咋好玩,想有一个纯粹的陈述范式?亲,你想多了。

问题症结到底在哪儿呢?为了能够做出让所有人都心水的产品,Google 似乎只做出了方方面面都很一般般的东东。

Tensorflow 对研究人员来说,学好它、用好它太难了!研究注重的是灵活性,而灵活性的缺乏这个缺陷,正是 Tensorflow 病入膏肓的特性之一。

要提取神经网络中间层(intermediate layer)的值?你要定义一个图,然后用作为字典来传递的数据来执行这个图,另外,别忘了添加中间层作为该图的输出,不然你就无法检索它们的值。麻烦不?但好歹可以实现。

想有条件地执行层,比如只要句末(EOS)标记生成,就会停止的循环神经网络(RNN)?等你学会做这件事儿时,人家玩儿 Pytorch 的,早就开张第三家 AI 初创公司了。

对于像我这样的机器学习的从业人员来说,Tensorflow 也并非上上之选。这种框架具有声明性,所以调试变得很困难。能够在 Android 或iOS 上运行模型看上去很美?你看一下框架的二进制文件有多大(20MB 以上),或者你看看几乎不存在的 C++ 说明文档,或者你想进行某种条件式的网络执行(在移动端这种计算资源缺乏的情况下非常有用)时,你就不会这么想了。

与其他框架的对比

这点毋庸置疑:能够玩转 Tensorflow 的开发者都是深度学习的大牛。但是,最牛逼的 Tensorflow 最初开发者贾扬清,离开 Google 投奔到 Facebook 了,去玩快速崛起的 Caffe2 项目了。和 Tensorflow 不同的是,Caffe2 允许用户只用一行代码就能为数据创建一个层,哇塞,是不是很激进?

另外需要提到的是,越来越多的顶尖 AI 研究人员青睐 Pytorch。Torch 用户因为编写 Lua 代码执行简单的 string 操作不堪其烦,转投了 Pytorch,而非 Tensorflow 。看来,在顶尖 AI 实验室眼里,Tensorflow 还是不够好,骚瑞,Google。

我最感兴趣的问题是,为什么 Google 为 Tensorflow 选择了完全陈述性的模式?对这种模式这么显眼的缺陷视而不见?他们是否认为,把所有的计算囊括到一个计算图中就可以让模型在自家的 TPU 上运行,从而在深度学习驱动型应用的云计算服务上与 Nvidia 展开火拼,切断它高达数百万美刀的财路?很难说。反正对公众而言,Tensorflow 算不上一个完全开源的项目。如果开发者能够完善 Tensorflow 的设计,那我就没话可说。但是,与谷歌的其他开源项目(如 Protobuf、Golang 和 Kubernetes)相比,Tensorflow 落后的可不是一点点哦。

虽然陈述范式对于 UI 编程而言很有用,但是对于深度学习而言它并不是一个理想选择,原因有很多。

拿 React Javascript 库来说,它是当今交互式网页应用设计的标准选择。在 React 中,开发者不必知道数据在应用中如何,因为 Javascript 的执行速度要比 DOM (Document Object Model,文档对象模型)的更新速度快好几个数量级。只要终端用户的体验“足够好”,React 开发者就不必操心状态的传播机制。

但是在深度学习中,一个层就可以执行数百万个 FLOP!深度学习研究人员的目标就是理解计算过程并实现精确控制,因为他们要不断突破极限(例如动态神经网络),并找出获得中间层结果的简易途径。

举个栗子

让我举个简单的例子:训练一个模型,让模型将其输入乘以 3。

首先,我们先看 Tensorflow 的代码是怎么写的:

然后再看 Pytorch 完成相同任务的代码又是怎么写的:

虽然 Pytorch 的代码比 TensorFlow 代码少一行,但是它的操作过程更加简洁,训练过程中的语法结构与真实的学习流程配合得更加紧密:

  1. 向前传递输入
  2. 生成损失
  3. 计算梯度
  4. 反向传播

在 TensorFlow 中,核心操作则是神秘的 sess.run 调用。

为什么要再写一些结尾部分,让人难以理解且难以维护的代码呢?讲真,Pytorch 的界面要比 Tensorflow 好很多,好的可不是一星半点。

结论

想要快速进行原型设计?Google 家的 Tensorflow 框架太过低级了,很难用!那对尖端研究和资源驱动的生产环境呢?又太高级而无法轻松使用!

讲真,如果你意识到已经有六个开源的高级库,它们是建立在本就是高级库的 Tensorflow 的基础上,才能让一切变得可用起来,你是不是会顿悟:这里面水可深啦!

注意:我承认 Tensorboard(TensorFlow 的监测工具)真的是一个很好的工具。如果你想为机器学习项目制定一个很好的监测方案,你可以看看 Losswise (https://losswise.com)。我开发这个工具的目的是,为了让像我一样的机器学习开发者能在任何机器学习库中解耦追踪(decouple track)模型的性能,并且能够用上许多 Tensorboard 不提供的好功能。

原文链接:http://nicodjimenez.github.io/2017/10/08/tensorflow.html

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注