• 发表时间:
    , 文章来源:MyZaker, 新闻取自各大新闻媒体,新闻内容并不代表本网立场

    *(photo:MyZaker)

    图片来源 @视觉中国

    文 | 郭华

    2015 年,Google 发布了机器学习框架 TensorFlow,凭借其在技术上无可争议的统治地位,TensorFlow 迅速成为这一领域的霸主。

    2017 年,TensorFlow 如日中天之际,Facebook 发布了 PyTorch,谁也没有想到,短短四年后,它竟把前者从王座上拉了下来。

    剥离正义与邪恶后,从某种意义上来说,这就大卫打败巨人歌利亚的故事。

    01 机器学习框架简史

    什么是机器学习框架?

    这要从机器学习说起。

    大家应该都听过人工智能,机器学习就是人工智能的一种实现手段。机器学习之父 Tom Mitchell 曾下过这么一个定义—— " 如果一个程序可以在任务 T 上,随着经验 E 的增加,效果 P 同步增加,则称这个程序可以学习 "。

    这里有两个要点,第一是程序,第二是经验。程序的核心是模型,而经验则表现为数据。其实这个定义也覆盖了大数据的概念,只不过大数据一般强调数据,机器学习则更突出模型。

    而机器学习框架,简单来说就是一套为机器学习服务的工具,用以加速模型的开发与应用。

    就像你可以用乐高快速搭建出房子、汽车等各种各样的模型一样,乐高就是一种框架。

    所以机器学习框架和机器学习的关系,就像生产关系和生产力一样,机器学习技术的发展决定框架的形态,而框架反过来又可以促进前者的发展。

    比较有名的框架,根据诞生时间排序,主要有 2002 年的 Torch,2007 年的 Theano,2013 年的 Caffe,2015 年的 TensorFlow 和 Keras 和 2017 年的 PyTorch 这六个。

    当然,这些只是和本主题相关的,其它还有很多传统 AI 框架和库,它们每个都满足了某种特定场景,但总体上来看,可以说是多点散发。

    直到 2016 年 AlphaGo 大战李世石,这似乎是一个奇点事件。

    我记得首局李世石便投子认输了。那时我们正在云南团建,AlphaGo 不仅打败了李世石,也打败了云南的美景,一路上所有人都在谈论它。

    用李安的话说," 我看不懂,但我大受震撼。"

    受震撼的不止我们,全世界的人和资本都受到了震撼。

    AlphaGo 用的技术是深度学习,深度学习是机器学习的一种,其特征在模型上,深度学习的模型是神经网络模型。

    AlphaGo 之后,机器学习的方向开始朝深度学习统一。

    对底层框架来说,这相当于吹响了冲锋的号角。

    经过不断的分分合合,它们逐渐形成了两大阵营。

    一个是 TensorFlow 阵营。

    TensorFlow 2015 年由 Google 开源。其设计理念和 Theano 非常相似,所以在 Google 加持的 TensorFlow 出现之后,Theano 就没什么存在的必要了。而且 Theano 的关键创始人 Ian Goodfellow 也一直在谷歌工作。2017 年,Theano 官宣不再维护,同年,Keras 被添加到了 TensorFlow 之中。这构成了实力强劲的第一阵营。

    一个是 PyTorch 阵营。

    PyTorch 2017 年由 Facebook 开源。PyTorch 设计之初可以看成是 Torch 的 Python 版。和 Theano 类似,Torch 的关键创始人也一直在 Facebook。Caffe 的创始人贾扬清在完成 Caffe 后先是去了 Google 开发 TensorFlow,随后又到了 Facebook。在 Facebook,他开发了 Caffe2。2018 年,Torch 被标注为不再活跃,其主要维护者宣布精力将主要投入到 PyTorch 上,同年,Caffe2 也被合并到了 PyTorch 之中。这构成了第二阵营。

    在一个要素自由流动的市场里,行业成熟的标志是出现头部公司。

    所以 TensorFlow 和 PyTorch 的脱颖而出,意味着决战将在它们之间展开。

    从时间上来看,TensorFlow 总比 PyTorch 早,开源的时间早,整合的时间也早。

    但从趋势来看,TensorFlow 的领先优势越来越不明显,Google Trends 显示,甚至 PyTorch 已经超过了它。

    *(photo:MyZaker)

    图 1 Google Trends : PyTorch VS TensorFlow

    02 巨人歌利亚

    Google 确实是技术上的歌利亚。

    不说安卓,不说搜索,不说谷歌地图。

    熟悉的人,应该还记得大数据的故事。

    2003 年开始,Google 把自己内部用的几种数据处理技术陆续整理成论文,公开发表。其中具有奠基性的有三个,分别是计算框架 MapReduce,文件系统 GFS 和表格存储 BigTable。

    芸芸众生借此一时眼界大开。

    读论文的众多人中,有一个叫做 Doug Cutting 的青年,他认为这些技术很有通用性,便照着论文把里边的系统自己做了一个出来。

    Google 言之,于我心有戚戚焉。

    于是,大名鼎鼎的,很快成为大数据事实标准的 Hadoop 就这么诞生了。

    大家或许听过阿里云飞天 5K 的故事。在王坚的力推下,阿里云参考 Hadoop 开发了一套自己的大数据系统,而飞天 5K,就是指这套系统成功支撑住了 5 千个节点。

    但飞天 5K 发生在 2013 年,Hadoop 诞生在 2006 年,Google 发论文在 2003 年,而 Google 的内部系统的启用时间,不知何年。

    什么叫技术代差,这就叫技术代差。

    Doug Cutting 后来被称为 " 盗火者 ",而那三篇论文,史称 "Google 三驾马车 "。

    所以技术圈一直有一种印象,那就是 Google 藏了很多黑科技,随便把自己内部用了很久、甚至已经不用的系统拿出来发表一下,便能引起江湖上的血雨腥风。比如我在阿里时,就总听说某某 Google 大佬回国后,在阿里把自己在 Google 用过的系统重新实现一遍而走上巅峰的故事,长恨自己眼界太窄又不在其中。

    而 TensorFlow 不仅是 Google 直接开源自己的内部系统,而且是优化版—— TensorFlow 之前,Google 还有一个 2011 年开始的 DistBelief,TensorFlow 正是总结了 DistBelief 的很多问题后升级而来的。

    而且,AlphaGo 也是 Google 的,再而且,它还运行在 TensorFlow 之上。

    所以按理说,TensorFlow 应该比被人抄出来的 Hadoop 更容易成功,可 Hadoop 出来后就成了大数据的事实标准,TensorFlow 却没有。

    不仅没有,似乎还在走下坡路。

    IT 界有个达维多定律,说市场的第一代产品总能自动获得 50% 的市场份额。TensorFlow 比 PyTorch 早,技术上没有代差,却在有明显优势的情况下被 PyTorch 拉了下来。

    确实不可思议,说 Google 输了也不为过。

    03 大卫的策略

    那 PyTorch 做对了什么?

    知乎上对两者有相当多的讨论,但主要集中在技术层面的对比。

    诚然技术是一切的基础,但毕竟被比较的是 Google,在这个领域,他有 Jeff Dean,有深度学习的图灵奖获得者,还有一系列顶级专家。引用腾讯机器学习平台负责人潘欣的原话来说,Google 在 2015 年后的几年间包揽了全世界在深度学习领域一半以上的关键技术突破,比如 TPU, Transformer, BERT, Neural Machine Translation, Inception, Neural Architecture Search, GAN,Adverserial Training, Bidrectional RNN ……说 Google 技术不行,似乎很难成立。

    所以我更倾向于认为问题在别处。

    周其仁说自己观察经济现象有两个法门,一曰远,一曰简,远是远远的看大势,简是永远选择最简单的指标。

    我认为 PyTorch 在大势上的策略才是问题的关键。

    具体有三,一是差异化的产品定位,一是顺应了用户趋势,一是拿住了 TensorFlow 的反关节。

    三点环环相扣,构成了 PyToch 的竞争策略。

    先说差异化的产品定位。

    任何一个挑战者进入市场时,都需要通过差异化找到自己的立足之地。

    PyTorch 也不例外。

    它发现市场上的用户可以分两个群体,一是工业界,一是学术界,两者有不同的需求。工业界更关注模型的应用,比如部署、性能等,而学术界更关注模型的开发。这很容易理解,工业界的基本诉求是稳定,一般模型上线后会跑很长一段时间,而学术界以研究为主,会频繁修改模型以验证想法,对性能要求不高,对部署更不在乎。

    TensorFlow 的优势在模型的应用上。

    在 Google 强大的开发能力下,TensorFlow 不仅性能优越,而且支持多端部署,不管是云上的分布式还是边缘的手机端都没问题。但可能就是因为 Google 的开发能力太强了,TensorFlow 在模型开发的易用性上并不上心。

    PyTorch 认识到这是个机会,它在自己的官方论文里,清晰的表达了自己的定位——把研究者放在第一位(put researchers first)。

    *(photo:MyZaker)

    图 2 Facebook 论文 《PyTorch : An Imperative Style,High-Performance Deep Learning Library》

    于是它很快占领了学术界。

    根据 paperswithcode 的统计,截止 2021 年 10 月,论文里 PyTorch 与 TensorFlow 的应用比例为 86:14,而且 TensorFlow 下滑明显。

    *(photo:MyZaker)

    图 3 paperswithcode-- 论文中应用的框架比例

    这时市场格局是这样的。

    *(photo:MyZaker)

    图 4 PyTorch VS TensorFlow 市场格局 1

    再说用户趋势。

    地产界有个说法,短期看金融,中期看土地,长期看人口。

    机器学习框架的用户也是有趋势的。

    工程师是怎么来的?高中毕业进入大学,大学读完本科、硕士和博士后,毕业上班,进入工业界。

    这个朴素的道理决定了用户基本是从学术界流向工业界的。

    所以 PyTorch 占领了学术界,相当于占领了上游。习惯了 PyTorch 的人会带着 PyTorch 进入工业界,同时新同学源源不断进入学术界,又构成了增量用户。

    用发展的眼光看问题,市场是这样的。

    *(photo:MyZaker)

    图 5 PyTorch VS TensorFlow 市场格局 2

    最后说说 TensorFlow 的反关节。

    周鸿祎在《我的互联网方法论》里提到过一个词叫反关节,小公司一旦拿住大公司的反关节,大公司的优势就会变成包袱,越反抗越疼,只能眼睁睁看你扩张。

    PyTorch 就拿住了 TensorFlow 的反关节。

    构建神经网络有两种技术路线,分别是静态图和动态图,静态图性能好,动态图调试方便。

    TensorFlow 一开始选择的是静态图,PyTorch 是动态图,这就是产品差异化背后的技术原因。

    不过这种技术选择带来的影响是长期的,因为图的构建方式确定了,框架的 API 也就随之确定了。

    API 是框架和用户之间的接口,像汽车的方向盘和刹车。同时就像汽车不能随便升级成用刹车挂档、方向盘加油一样,API 也必须力求稳定。

    事实上所有严肃的基础软件都会把避免 breaking change(破坏式升级)当作 API 设计的首要原则。

    所以 TensorFlow 在看到 PyTorch 靠动态图不停抢占市场的时候,自己却动弹不得,因为它升级就需要改变 API,而它的用户基数越大,它就越难作出改变。

    只能缝缝补补往里继续加东西,比如 Keras。

    但 PyTorch 并没闲着,它站稳脚跟后开始向工业界扩张。2018 年,PyTorch 借助合并 Caffe2,在性能和部署上大大前进了一步。

    这相当于打到了 TensorFlow 的大本营。

    TensorFlow 终于坐不住了,于是以壮士断腕的决心,不顾 breaking change 的恶名,2019 年把 TensorFlow 升级到了 2.0,重构 API,增加动态图。

    有人说这体现了 Google 的傲慢,它视开发者如草芥。还有人建议 Google 出一个技术团队,把原来在 TensorFlow1.0 上的能跑的东西在 2.0 上重新实现一遍。

    但可能它也是没办法,总不能坐以待毙吧。

    04 后记

    仔细想想,PyTorch 的三点其实是一点,叫一点的三个方面可能更加准确。

    这样的分析或许有点马后炮的意思,但不管 PyTorch 是有意为之还是纯属巧合,这个边缘崛起的故事还是相当值得一看。

    那是不是 TensorFlow 就这样输掉了?

    并不是,前边提到,只是决战会在他们两个之间展开,现在功能上两者几乎齐平,但从用户存量来说,TensorFlow 的绝对值应该比 PyTorch 还要多不少。

    而且未来还有新变量,那就是云。

    云作为一种新的软件分发机制,势必对软件的市场格局产生深远影响。根据 Google 的测算,2029 年,77% 的企业 IT 将以云为主。

    谁在云上做的好,谁才是最终赢家。

    不过我觉得真正精彩的是框架背后的人。框架的分分合合叫趋势,人的流动才是故事。

    比如 Torch 的创始人里,Ronan Collobert 在 Facebook,而 Samy Bengio 去了 Google;比如 Caffe 的作者贾扬清,读博时自己开发了 Caffe,毕业后去 Google 参与了 TensorFlow,之后又到 Facebook,在这里不仅开发了 Caffe2,还推动了 PyTorch 跟 Caffe2 的合并……

    颇有东汉末年群雄并起,有识之士纵横天下的意味。

    而所谓最终格局,与其说是趋势上的客观必然,不如说是他们推动下的主观偶然。

    更多精彩内容,关注钛媒体微信号(ID:taimeiti),或者下载钛媒体 App