PyTorch打败TensorFlow
Posted 程序员的店小二
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyTorch打败TensorFlow相关的知识,希望对你有一定的参考价值。
文 | 郭华
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已经超过了它。
图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)。
于是它很快占领了学术界。
根据paperswithcode的统计,截止2021年10月,论文里PyTorch与TensorFlow的应用比例为86:14,而且TensorFlow下滑明显。
图3 paperswithcode--论文中应用的框架比例
这时市场格局是这样的。
再说用户趋势。
地产界有个说法,短期看金融,中期看土地,长期看人口。
机器学习框架的用户也是有趋势的。
工程师是怎么来的?高中毕业进入大学,大学读完本科、硕士和博士后,毕业上班,进入工业界。
这个朴素的道理决定了用户基本是从学术界流向工业界的。
所以PyTorch占领了学术界,相当于占领了上游。习惯了PyTorch的人会带着PyTorch进入工业界,同时新同学源源不断进入学术界,又构成了增量用户。
用发展的眼光看问题,市场是这样的。
图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的合并……
颇有东汉末年群雄并起,有识之士纵横天下的意味。
而所谓最终格局,与其说是趋势上的客观必然,不如说是他们推动下的主观偶然。
以上是关于PyTorch打败TensorFlow的主要内容,如果未能解决你的问题,请参考以下文章