『王霸之路』從0.1到2.0一文看盡TensorFlow奮鬥史
0 序篇
2015年11月,Google正式釋出了Tensorflow的白皮書並開源TensorFlow 0.1 版本。
2017年02月,Tensorflow正式釋出了1.0.0版本,同時也標誌著穩定版的誕生。
2019年10月,TensorFlow在經歷七個多月(2019年3月1日-2019年10月1日)的 2.0 Alpha 版本的更新迭代後釋出 2.0 正式版。
2.0 正式版官方介紹視訊
https://v.qq.com/x/page/b3003v2g8dq.html
雖然 2.0 正式版才剛剛釋出,就已經引起了學術界與科研界廣泛關注與好評:
- Google深度學習科學家以及Keras的作者表示,TensorFlow 2.0 是一個新時代的機器學習平臺,這將改變了一切。
- 深度學習研究和教育者、fast.ai創始人Jeremy Howard也稱讚 2.0 版本的釋出是”令人興奮的一步,與TensorFlow一代相比是一個巨大的飛躍“。
- 目前GitHub上排名第一的NLP機器學習課程practicalAI的作者以及蘋果公司AI研究員Goku Mohandas在推特上說,他們正在從PyTorch轉向TensorFlow 2.0。
為什麼TensorFlow 2.0 的釋出能夠引發了廣泛的討論和關注?下面筆者通過對於TensorFlow“奮鬥史”介紹與解讀來分析TensorFlow如何成就的王霸之路。
TensorFlow的“奮鬥史”包括三個章節:鋒芒初露(0.1),中原逐鹿(1.0),王者歸來(2.0)。
1 鋒芒初露·源起
在2011年,Google Brain內部孵化出一個專案叫做DistBelief,它是為深度神經網路構建的一個機器學習系統。雖然這個著名的系統並沒有開源,但是Google研究者有大量關於它設計的論文被大家所熟知,它也被廣泛應用於Google內部的科研和商業產品中。這個專案最早可以追溯到2009年,由Geoffery Hinton帶領的團隊開發的一個實現了廣義反向傳播演算法的框架,基於這個框架,Google內部可以快速試驗新的深度學習演算法並提高演算法精度。比如在使用這套框架後,Google內部語音識別的錯誤率降低了25%。
後來,Google決定將DistBelief打造成更加穩健、快速、通用的機器學習框架,調動了相當多的工程師和科學家投入到對DistBelief的改造,這其中就包括大名鼎鼎的Jeff Dean。有了這樣的豪華開發陣容,DistBelief迅速成熟蛻變,成為一個高魯棒和工業級的機器學習框架,這就是後來於2015年11月釋出的TensorFlow 0.1 版。
雖然相較於較早開源的Caffe、MXNet等優秀的機器學習框架,TensorFlow還略顯年輕,但是作為Google內部的第二代機器學習框架,TensorFlow有了更加有趣的靈魂。相較於側重於卷積的Caffe與剛從校園走出來的MXNet,TensorFlow以更加成熟完備的姿態展露鋒芒。它是基於DataFlow的計算模型,運算元相組合形成一個計算圖,計算的過程就是資料在這個計算圖的節點進行計算並流動。同時,這個計算圖可以被切成不同的子圖,並分配到不同的Device上,包括CPU、GPU和其他的計算裝置,這樣天然地對分散式友好。此外,TensorFlow從一開始就被設計成執行在多個平臺上,如inference可以執行在iOS和Android裝置上,訓練則可以執行在不同的硬體裝置上。
2016年4月14日,Google釋出了分散式TensorFlow,版本號為 0.8,這是TensorFlow釋出之後的比較重大的版本更新。Google的博文介紹了TensorFlow在影象分類的任務中,在100個GPUs和不到65小時的訓練時間下,達到了78%的正確率。在激烈的商業競爭中,更快的訓練速度是人工企業的核心競爭力。而分散式TensorFlow意味著它能夠真正大規模進入到人工智慧產業中,產生實質性影響。
在2016年6月,TensorFlow釋出了新版本的早期版本,版本號為 0.9,增加了對iOS的支援。隨著谷歌增加了TensorFlow對iOS的支援,應用程式將能夠在更聰明的功能整合到它們的應用程式,最終使它們更聰明和能幹。
從 0.9 版本開始,TensorFlow 支援了多平臺,並且進入高速發展時期,開始不斷趕超並拉開與其他深度學習框架的距離。雖只是源起,卻鋒芒畢露,初現王霸之氣。
2 中原逐鹿·盛極
時間到了,2017年1月初,谷歌公佈了 TensorFlow 1.0.0-alpha ,即 TensorFlow 1.0 的第一個“草稿”版本。2017年2月,TensorFlow在釋出了1.0.0版本,也標誌著穩定版的誕生。
與已有版本相比,全新的 TensorFlow 1.0 主要有以下改進:
- 更快:TensorFlow 1.0超乎想象地快!TensorFlow 1.0 為未來更多的效能改進打下了基礎,而tensorflow.org 現在可提供模型優化的提示和技巧,以達到最高速度。
- 更靈活:TensorFlow 1.0 為 TensorFlow 引進了帶有 tf.layers,tf.metrics 和 tf.losses 模組的高級別應用程式介面。TensorFlow 團隊引進能夠與 Keras完全相容的新 tf.keras 模組。
- 隨時就緒:TensorFlow 1.0 可確保 Python 應用程式介面的穩定性Python能夠在不打破現有程式碼的情況下,更容易地獲取新功能。
1.0 版本不僅為 TensorFlow 機器學習函式庫帶來多重升級,而且為 Python 和 Java 使用者使用TensorFlow 做開發降低了難度。另外,新版本的修補也得到了改善。更有意思的是,由於對TensorFlow 計算做優化的新編譯器,在智慧手機上執行基於 TensorFlow 的機器學習 APP 將成為可能。Tensorflow它已成為 GitHub 最受歡迎的開源專案。
下圖是KDnuggets網站對2018年的機器學習框架的使用做的一個調查統計,可以看出當時TensorFlow已經遙遙領先於其他競爭(Keras 是一個上層封裝,底層呼叫的還是 TensorFlow),奠定了其深度學習霸主的地位。
中國有句古話:盛極必衰,否極泰來,這句話對於Google的 TensorFlow 也同樣適用。1.x 版本在高速發展過程中,也為自己後來發展築起一道山,TensorFlow也產生了很多被人詬病的地方,比如API的穩定性、效率和基於靜態計算圖的程式設計上的複雜性等。同時,堅持靜態圖模式也培養起來了足以撼動 TensorFlow 霸主地位的框架(上述圖中默默無聞的第三名,後來強勢崛起的PyTorch)。
1.x 版本後期,TensorFlow發展由於自身原因(1. 為自己後來發展築起一道山 2.堅持靜態圖模式)遭遇到瓶頸。PyTorch以動態圖開發模式,統一化的模組命名方式,更加人性化的程式設計的方式(Pythonic),強勢出道。這些優勢無一不擊中 TensorFlow 的痛點,不斷追趕、威脅TensorFlow霸主地位。
下圖通過搜尋全世界對機器學習和人工智慧類別的興趣(Google Interest),採用過去六個月的平均興趣分數,並將其與前六個月的平均興趣分數進行了比較。可以看出,TensorFlow 的平均興趣分數處於下降狀態,PyTorch卻呈上升趨勢。
下面谷歌的圖表顯示了過去一年的搜尋興趣。TensorFlow為藍色,Keras為黃色,PyTorch為紅色,fastai為綠色。可以看出TensorFlow總體呈現下降趨勢,而PyTorch卻呈現持續增長姿態,不斷縮小與TensorFlow的距離。
按這樣的趨勢,PyTorch在使用者搜尋興趣方面追趕上TensorFlow指日可待了,TensorFlow遭遇到出生以來最大的挑戰(其實TensorFlow也就才三歲多)。TensorFlow會如何應對這個挑戰呢?是按部就班,在1.x版本上進行小修小補,得過且過(這個詞用得有些過了,之所以會用是剛好寫到這裡的時候聽到這首歌,同時這個詞語與表達筆者對上述方法的不苟同);還是推倒重來,重新設計新版TensorFlow,涅槃重生。這個選擇會關乎到以後TensorFlow數年的發展和與PyTorch競爭的成敗。筆者相信,Google 並不會做選擇,小孩才會做選擇,大人全都要。以谷歌的巨大體量,在內部執行兩個方案,最後看市場反饋推出最合適的。Google是大公司,以穩為主的策略還是很容易讓人理解的。
3 王者歸來·槃涅
我們都知道Google推出了後者方案,選擇涅槃重生,重塑自身。那麼全新的TensorFlow 2.0 究竟新在哪裡呢?TensorFlow官網給出了答覆:
- Keras與TensorFlow緊密整合,預設eager execution,執行Pythonic函式。官方表示,對開發者來說,TensorFlow 2.0用起來跟Python差不多;對於研究者來說,新框架也在低階API方面進行了重點投入。
- 為了在各種平臺上執行,SavedModel檔案格式進行了標準化。
- 針對高效能訓練場景,可以使用Distribution Strategy API進行分佈訓練,且只需進行少量程式碼修改就能獲得出色的效能。支援Keras Model.fit、自定義訓練迴圈、多GPU等等。
- TensorFlow 2.0提高了在GPU上的效能表現。以ResNet-50和BERT為例,只需要幾行程式碼,混合精度使用Volta和Turing GPU,訓練表現最高可以提升3倍。
- 新增TensorFlow Datasets,為包含大量資料型別的大型資料集提供了標準介面。
- 雖然保留了傳統的基於Session的程式設計模型,但官方現在建議使用eager execution進行常規的Python開發。tf.function裝飾器可以把程式碼轉換成可以遠端執行、序列化、效能優化的圖。在Autograph的幫助下,能把常規的Python控制流直接轉成TensorFlow控制流。
- 官方提供了TensorFlow 1.x升級2.0的遷移指南,TF2.0還有一個自動轉換的指令碼。
- TensorFlow 2.0提供了易用的API,能夠靈活快速的實現新想法。模型的訓練和serving也已經無縫整合在基礎架構中。
- 更多關於TensorFlow 2.0的資訊,可以訪問官網:https://www.tensorflow.org/
幾乎每一條都直擊TensorFlow1.x使用者的痛點,廣大使用TensorFlow1.x轉到PyTorch的使用者表示TensorFlow 2.0 真香,紛紛倒戈。
Google深度學習科學家以及Keras的作者表示,TensorFlow 2.0 是一個新時代的機器學習平臺,這將改變了一切。
深度學習研究和教育者、fast.ai創始人Jeremy Howard也稱讚 2.0 版本的釋出是”令人興奮的一步,與TensorFlow一代相比是一個巨大的飛躍“。
目前GitHub上排名第一的NLP機器學習課程practicalAI的作者以及蘋果公司AI研究員Goku Mohandas在推特上說,他們正在從PyTorch轉向TensorFlow 2.0。
此後,PyTorch在與TensorFlow的爭霸中將再難有勝算,TensorFlow 1.x 版本的失誤給了PyTorch趕超的機會,PyTorch已盡力追趕了,但是還是沒有實現趕超。Now,TensorFlow 2.0 已經補全缺點,同時具備比PyTorch更加完備的多平臺支援、更成熟的部署方式與數量巨大的使用者基數。如果PyTorch早出生一年,或者TensorFlow 2.0 晚釋出一年,PyTorch還是有機會的,但是沒有如果,Google依舊是最強大科技公司之一,很難反覆給對手機會趕超。TensorFlow再次呈現對於其他框架壓倒式優勢,實現王者歸來。
4 終章
TensorFlow從最開始 0.1 版本誕生時受到廣泛關注,到 1.0 版本的全面爆發,再到今年 2.0 版本正式釋出,它已趨於完美。TensorFlow的成長依託於Google的強大研發與號召力,但TensorFlow的成功更歸功於設計的完備性、審時度勢和適時革新。
經歷四年時光,TensorFlow的發展與成功離不開先天的優秀天賦(Google Brain),更有賴於後天的努力拼搏(適時革新)。有天分又有努力,TensorFlow的成功理所應當。
附
想要體驗正式版本TensorFlow 2.0 可以訪問=>『TensorFlow2.0正式版教程』極簡安裝TF2.0正式版(CPU&GPU)教程:https://xiaosongshine.blog.csdn.net/article/details/101844926
喜歡我的文章歡迎訪問
小宋是呢 CSDN=> https://xiaosongshine.blog.csdn.net/
小宋是呢 知乎=> https://www.zhihu.com/people/xiaosongshine/activi