『王霸之路』從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/activities

posted @ 2019-10-03 21:16 小宋是呢 閱讀(...) 評論(...) 編輯 收藏
乐就娱乐