圖片來源@視覺中國
文 | 郭華
2015年,Google發(fā)布了機(jī)器學(xué)習(xí)框架TensorFlow,憑借其在技術(shù)上無可爭議的統(tǒng)治地位,TensorFlow迅速成為這一領(lǐng)域的霸主。
2017年,TensorFlow如日中天之際,F(xiàn)acebook發(fā)布了PyTorch,誰也沒有想到,短短四年后,它竟把前者從王座上拉了下來。
剝離正義與邪惡后,從某種意義上來說,這就大衛(wèi)打敗巨人歌利亞的故事。
什么是機(jī)器學(xué)習(xí)框架?
這要從機(jī)器學(xué)習(xí)說起。
大家應(yīng)該都聽過人工智能,機(jī)器學(xué)習(xí)就是人工智能的一種實(shí)現(xiàn)手段。機(jī)器學(xué)習(xí)之父Tom Mitchell曾下過這么一個定義——“如果一個程序可以在任務(wù)T上,隨著經(jīng)驗(yàn)E的增加,效果P同步增加,則稱這個程序可以學(xué)習(xí)”。
這里有兩個要點(diǎn),第一是程序,第二是經(jīng)驗(yàn)。程序的核心是模型,而經(jīng)驗(yàn)則表現(xiàn)為數(shù)據(jù)。其實(shí)這個定義也覆蓋了大數(shù)據(jù)的概念,只不過大數(shù)據(jù)一般強(qiáng)調(diào)數(shù)據(jù),機(jī)器學(xué)習(xí)則更突出模型。
而機(jī)器學(xué)習(xí)框架,簡單來說就是一套為機(jī)器學(xué)習(xí)服務(wù)的工具,用以加速模型的開發(fā)與應(yīng)用。
就像你可以用樂高快速搭建出房子、汽車等各種各樣的模型一樣,樂高就是一種框架。
所以機(jī)器學(xué)習(xí)框架和機(jī)器學(xué)習(xí)的關(guān)系,就像生產(chǎn)關(guān)系和生產(chǎn)力一樣,機(jī)器學(xué)習(xí)技術(shù)的發(fā)展決定框架的形態(tài),而框架反過來又可以促進(jìn)前者的發(fā)展。
比較有名的框架,根據(jù)誕生時間排序,主要有2002年的Torch,2007年的Theano,2013年的Caffe,2015年的TensorFlow和Keras和2017年的PyTorch這六個。
當(dāng)然,這些只是和本主題相關(guān)的,其它還有很多傳統(tǒng)AI框架和庫,它們每個都滿足了某種特定場景,但總體上來看,可以說是多點(diǎn)散發(fā)。
直到2016年AlphaGo大戰(zhàn)李世石,這似乎是一個奇點(diǎn)事件。
我記得首局李世石便投子認(rèn)輸了。那時我們正在云南團(tuán)建,AlphaGo不僅打敗了李世石,也打敗了云南的美景,一路上所有人都在談?wù)撍?/p>
用李安的話說,“我看不懂,但我大受震撼。”
受震撼的不止我們,全世界的人和資本都受到了震撼。
AlphaGo用的技術(shù)是深度學(xué)習(xí),深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一種,其特征在模型上,深度學(xué)習(xí)的模型是神經(jīng)網(wǎng)絡(luò)模型。
AlphaGo之后,機(jī)器學(xué)習(xí)的方向開始朝深度學(xué)習(xí)統(tǒng)一。
對底層框架來說,這相當(dāng)于吹響了沖鋒的號角。
經(jīng)過不斷的分分合合,它們逐漸形成了兩大陣營。
一個是TensorFlow陣營。
TensorFlow 2015年由Google開源。其設(shè)計理念和Theano非常相似,所以在Google加持的TensorFlow出現(xiàn)之后,Theano就沒什么存在的必要了。而且Theano的關(guān)鍵創(chuàng)始人Ian Goodfellow也一直在谷歌工作。2017年,Theano官宣不再維護(hù),同年,Keras被添加到了TensorFlow之中。這構(gòu)成了實(shí)力強(qiáng)勁的第一陣營。
一個是PyTorch陣營。
PyTorch 2017年由Facebook開源。PyTorch設(shè)計之初可以看成是Torch的Python版。和Theano類似,Torch的關(guān)鍵創(chuàng)始人也一直在Facebook。Caffe的創(chuàng)始人賈揚(yáng)清在完成Caffe后先是去了Google開發(fā)TensorFlow,隨后又到了Facebook。在Facebook,他開發(fā)了Caffe2。2018年,Torch被標(biāo)注為不再活躍,其主要維護(hù)者宣布精力將主要投入到PyTorch上,同年,Caffe2也被合并到了PyTorch之中。這構(gòu)成了第二陣營。
在一個要素自由流動的市場里,行業(yè)成熟的標(biāo)志是出現(xiàn)頭部公司。
所以TensorFlow和PyTorch的脫穎而出,意味著決戰(zhàn)將在它們之間展開。
從時間上來看,TensorFlow總比PyTorch早,開源的時間早,整合的時間也早。
但從趨勢來看,TensorFlow的領(lǐng)先優(yōu)勢越來越不明顯,Google Trends顯示,甚至PyTorch已經(jīng)超過了它。
圖1 Google Trends : PyTorch VS TensorFlow
Google確實(shí)是技術(shù)上的歌利亞。
不說安卓,不說搜索,不說谷歌地圖。
熟悉的人,應(yīng)該還記得大數(shù)據(jù)的故事。
2003年開始,Google把自己內(nèi)部用的幾種數(shù)據(jù)處理技術(shù)陸續(xù)整理成論文,公開發(fā)表。其中具有奠基性的有三個,分別是計算框架MapReduce,文件系統(tǒng)GFS和表格存儲BigTable。
蕓蕓眾生借此一時眼界大開。
讀論文的眾多人中,有一個叫做Doug Cutting的青年,他認(rèn)為這些技術(shù)很有通用性,便照著論文把里邊的系統(tǒng)自己做了一個出來。
Google言之,于我心有戚戚焉。
于是,大名鼎鼎的,很快成為大數(shù)據(jù)事實(shí)標(biāo)準(zhǔn)的Hadoop就這么誕生了。
大家或許聽過阿里云飛天5K的故事。在王堅的力推下,阿里云參考Hadoop開發(fā)了一套自己的大數(shù)據(jù)系統(tǒng),而飛天5K,就是指這套系統(tǒng)成功支撐住了5千個節(jié)點(diǎn)。
但飛天5K發(fā)生在2013年,Hadoop誕生在2006年,Google發(fā)論文在2003年,而Google的內(nèi)部系統(tǒng)的啟用時間,不知何年。
什么叫技術(shù)代差,這就叫技術(shù)代差。
Doug Cutting后來被稱為“盜火者”,而那三篇論文,史稱“Google 三駕馬車”。
所以技術(shù)圈一直有一種印象,那就是Google藏了很多黑科技,隨便把自己內(nèi)部用了很久、甚至已經(jīng)不用的系統(tǒng)拿出來發(fā)表一下,便能引起江湖上的血雨腥風(fēng)。比如我在阿里時,就總聽說某某Google大佬回國后,在阿里把自己在Google用過的系統(tǒng)重新實(shí)現(xiàn)一遍而走上巔峰的故事,長恨自己眼界太窄又不在其中。
而TensorFlow不僅是Google直接開源自己的內(nèi)部系統(tǒng),而且是優(yōu)化版——TensorFlow之前,Google還有一個2011年開始的DistBelief,TensorFlow正是總結(jié)了DistBelief的很多問題后升級而來的。
而且,AlphaGo也是Google的,再而且,它還運(yùn)行在TensorFlow之上。
所以按理說,TensorFlow應(yīng)該比被人抄出來的Hadoop更容易成功,可Hadoop出來后就成了大數(shù)據(jù)的事實(shí)標(biāo)準(zhǔn),TensorFlow卻沒有。
不僅沒有,似乎還在走下坡路。
IT界有個達(dá)維多定律,說市場的第一代產(chǎn)品總能自動獲得50%的市場份額。TensorFlow比PyTorch早,技術(shù)上沒有代差,卻在有明顯優(yōu)勢的情況下被PyTorch拉了下來。
確實(shí)不可思議,說Google輸了也不為過。
那PyTorch做對了什么?
知乎上對兩者有相當(dāng)多的討論,但主要集中在技術(shù)層面的對比。
誠然技術(shù)是一切的基礎(chǔ),但畢竟被比較的是Google,在這個領(lǐng)域,他有Jeff Dean,有深度學(xué)習(xí)的圖靈獎獲得者,還有一系列頂級專家。引用騰訊機(jī)器學(xué)習(xí)平臺負(fù)責(zé)人潘欣的原話來說,Google在2015年后的幾年間包攬了全世界在深度學(xué)習(xí)領(lǐng)域一半以上的關(guān)鍵技術(shù)突破,比如TPU, Transformer, BERT, Neural Machine Translation, Inception, Neural Architecture Search, GAN,Adverserial Training, Bidrectional RNN……說Google技術(shù)不行,似乎很難成立。
所以我更傾向于認(rèn)為問題在別處。
周其仁說自己觀察經(jīng)濟(jì)現(xiàn)象有兩個法門,一曰遠(yuǎn),一曰簡,遠(yuǎn)是遠(yuǎn)遠(yuǎn)的看大勢,簡是永遠(yuǎn)選擇最簡單的指標(biāo)。
我認(rèn)為PyTorch在大勢上的策略才是問題的關(guān)鍵。
具體有三,一是差異化的產(chǎn)品定位,一是順應(yīng)了用戶趨勢,一是拿住了TensorFlow的反關(guān)節(jié)。
三點(diǎn)環(huán)環(huán)相扣,構(gòu)成了PyToch的競爭策略。
先說差異化的產(chǎn)品定位。
任何一個挑戰(zhàn)者進(jìn)入市場時,都需要通過差異化找到自己的立足之地。
PyTorch也不例外。
它發(fā)現(xiàn)市場上的用戶可以分兩個群體,一是工業(yè)界,一是學(xué)術(shù)界,兩者有不同的需求。工業(yè)界更關(guān)注模型的應(yīng)用,比如部署、性能等,而學(xué)術(shù)界更關(guān)注模型的開發(fā)。這很容易理解,工業(yè)界的基本訴求是穩(wěn)定,一般模型上線后會跑很長一段時間,而學(xué)術(shù)界以研究為主,會頻繁修改模型以驗(yàn)證想法,對性能要求不高,對部署更不在乎。
TensorFlow的優(yōu)勢在模型的應(yīng)用上。
在Google強(qiáng)大的開發(fā)能力下,TensorFlow不僅性能優(yōu)越,而且支持多端部署,不管是云上的分布式還是邊緣的手機(jī)端都沒問題。但可能就是因?yàn)镚oogle的開發(fā)能力太強(qiáng)了,TensorFlow在模型開發(fā)的易用性上并不上心。
圖2 Facebook論文 《PyTorch : An Imperative Style,High-Performance Deep Learning Library》
于是它很快占領(lǐng)了學(xué)術(shù)界。
圖3 paperswithcode--論文中應(yīng)用的框架比例
這時市場格局是這樣的。圖4 PyTorch VS TensorFlow 市場格局1
再說用戶趨勢。地產(chǎn)界有個說法,短期看金融,中期看土地,長期看人口。
機(jī)器學(xué)習(xí)框架的用戶也是有趨勢的。
工程師是怎么來的?高中畢業(yè)進(jìn)入大學(xué),大學(xué)讀完本科、碩士和博士后,畢業(yè)上班,進(jìn)入工業(yè)界。
這個樸素的道理決定了用戶基本是從學(xué)術(shù)界流向工業(yè)界的。
所以PyTorch占領(lǐng)了學(xué)術(shù)界,相當(dāng)于占領(lǐng)了上游。習(xí)慣了PyTorch的人會帶著PyTorch進(jìn)入工業(yè)界,同時新同學(xué)源源不斷進(jìn)入學(xué)術(shù)界,又構(gòu)成了增量用戶。
圖5 PyTorch VS TensorFlow 市場格局2
最后說說TensorFlow的反關(guān)節(jié)。
周鴻祎在《我的互聯(lián)網(wǎng)方法論》里提到過一個詞叫反關(guān)節(jié),小公司一旦拿住大公司的反關(guān)節(jié),大公司的優(yōu)勢就會變成包袱,越反抗越疼,只能眼睜睜看你擴(kuò)張。
PyTorch就拿住了TensorFlow的反關(guān)節(jié)。
構(gòu)建神經(jīng)網(wǎng)絡(luò)有兩種技術(shù)路線,分別是靜態(tài)圖和動態(tài)圖,靜態(tài)圖性能好,動態(tài)圖調(diào)試方便。
TensorFlow一開始選擇的是靜態(tài)圖,PyTorch是動態(tài)圖,這就是產(chǎn)品差異化背后的技術(shù)原因。
不過這種技術(shù)選擇帶來的影響是長期的,因?yàn)閳D的構(gòu)建方式確定了,框架的API也就隨之確定了。
API是框架和用戶之間的接口,像汽車的方向盤和剎車。同時就像汽車不能隨便升級成用剎車掛檔、方向盤加油一樣,API也必須力求穩(wěn)定。
事實(shí)上所有嚴(yán)肅的基礎(chǔ)軟件都會把避免breaking change(破壞式升級)當(dāng)作API設(shè)計的首要原則。
所以TensorFlow在看到PyTorch靠動態(tài)圖不停搶占市場的時候,自己卻動彈不得,因?yàn)樗壘托枰淖傾PI,而它的用戶基數(shù)越大,它就越難作出改變。
只能縫縫補(bǔ)補(bǔ)往里繼續(xù)加?xùn)|西,比如Keras。
但PyTorch并沒閑著,它站穩(wěn)腳跟后開始向工業(yè)界擴(kuò)張。2018年,PyTorch借助合并Caffe2,在性能和部署上大大前進(jìn)了一步。
這相當(dāng)于打到了TensorFlow的大本營。
TensorFlow終于坐不住了,于是以壯士斷腕的決心,不顧breaking change的惡名,2019年把TensorFlow升級到了2.0,重構(gòu)API,增加動態(tài)圖。
有人說這體現(xiàn)了Google的傲慢,它視開發(fā)者如草芥。還有人建議Google出一個技術(shù)團(tuán)隊,把原來在TensorFlow1.0上的能跑的東西在2.0上重新實(shí)現(xiàn)一遍。
但可能它也是沒辦法,總不能坐以待斃吧。
仔細(xì)想想,PyTorch的三點(diǎn)其實(shí)是一點(diǎn),叫一點(diǎn)的三個方面可能更加準(zhǔn)確。
這樣的分析或許有點(diǎn)馬后炮的意思,但不管PyTorch是有意為之還是純屬巧合,這個邊緣崛起的故事還是相當(dāng)值得一看。
那是不是說TensorFlow就這樣輸?shù)袅耍?/p>
并不是,前邊提到,只是決戰(zhàn)會在他們兩個之間展開,現(xiàn)在功能上兩者幾乎齊平,但從用戶存量來說,TensorFlow的絕對值應(yīng)該比PyTorch還要多不少。
而且未來還有新變量,那就是云。
云作為一種新的軟件分發(fā)機(jī)制,勢必對軟件的市場格局產(chǎn)生深遠(yuǎn)影響。根據(jù)Google的測算,2029年,77%的企業(yè)IT將以云為主。
誰在云上做的好,誰才是最終贏家。
不過我覺得真正精彩的是框架背后的人。框架的分分合合叫趨勢,人的流動才是故事。
比如Torch的創(chuàng)始人里,Ronan Collobert在Facebook,而Samy Bengio去了Google;比如Caffe的作者賈揚(yáng)清,讀博時自己開發(fā)了Caffe,畢業(yè)后去Google參與了TensorFlow,之后又到Facebook,在這里不僅開發(fā)了Caffe2,還推動了PyTorch跟Caffe2的合并……
頗有東漢末年群雄并起,有識之士縱橫天下的意味。
而所謂最終格局,與其說是趨勢上的客觀必然,不如說是他們推動下的主觀偶然。
快報
根據(jù)《網(wǎng)絡(luò)安全法》實(shí)名制要求,請綁定手機(jī)號后發(fā)表評論