Keras,亡於谷歌?

將 Keras 併入 TensorFlow,到底是不是一個正確的決定?

近日,Reddit 上出現了一個「悼念」Keras 的帖子,引發了不少人的圍觀。發帖者表示,谷歌已經慢慢地將 Keras 殺死了。

乍一看,這一觀點似乎有點聳人聽聞:Keras 活得好好的,怎麼能說已經被谷歌殺死了呢?而且前不久,這個神經網路庫剛剛過完 6 歲生日。MIT CSAIL 官方賬號還發推表示,Keras 目前已經成為全世界使用最多的十大軟體工具之一。

這一切還要從 Keras 和谷歌的恩怨說起

這一切還要從 Keras 和谷歌的恩怨說起。

Keras 與谷歌的 TensorFlow 有一段極其複雜的歷史,這個故事很長,有很多細節,有時甚至會有一些矛盾。

Keras 最初是由 Google AI 開發人員 / 研究人員 Francois Chollet 創建並開發的,作者於 2015 年 3 月 27 日將 Keras 的第一個版本 commit 並 release 到他的 GitHub 上。一開始,Francois 開發 Keras 是為了方便他自己的研究和實驗。但隨著深度學習的普及,許多開發人員、程式設計師和機器學習從業人員都因其易於使用的 API 而湧向 Keras。

為了訓練你自己的自定義神經網路,Keras 需要一個後端。後端是一個計算引擎——它可以構建網路的圖和拓撲結構,運行最佳化器,並執行具體的數字運算。你可以把後臺看作是你的資料庫,Keras 是你用來訪問資料庫的程式語言。

一開始,在 v1.1.0 之前,Keras 的默認後端都是 Theano。與此同時,Google 發佈了 TensorFlow,這是一個用於機器學習和神經網路訓練的符號數學庫。Keras 開始支持 TensorFlow 作為後端。漸漸地,TensorFlow 成為最受歡迎的後端,這也就使得 TensorFlow 從 Keras v1.1.0 發行版開始成為 Keras 的默認後端。

一般來說,一旦 TensorFlow 成為了 Keras 的默認後端,TensorFlow 和 Keras 的使用量會一起增長——沒有 TensorFlow 的情況下就無法使用 Keras,所以如果你在系統上安裝了 Keras,那麼你也得安裝 TensorFlow。

同樣的,TensorFlow 使用者也越來越被高級 Keras API 的簡單易用所吸引。tf.keras 是在 TensorFlow v1.10.0 中引入的,這是將 keras 直接集成到 TensorFlow 包中的第一步。

tf.keras 軟體包與你通過 pip 安裝的 keras 軟體包(即 pip install keras)是分開的。為了確保兼容性,原始的 keras 包沒有被包含在 tensorflow 中,因此它們的開發都很有序。

然而,這種情況後來發生了改變改變——當谷歌在 2019 年 6 月發佈 TensorFlow 2.0 時,他們宣佈 Keras 現在是 TensorFlow 的官方高級 API,用於快速簡單的模型設計和訓練。隨著 Keras 2.3.0 的發佈,Francois 在聲明中寫道:

這是 Keras 首個與 tf.keras 同步的版本,也是 Keras 支持多個後端(即 Theano,CNTK 等)的最終版本。最重要的是,所有深度學習從業人員都應將其程式碼轉換成 TensorFlow 2.0 和 tf.keras 軟體包。原始的 keras 軟體包仍會接收 bug 並修復,但請向前看,你應該開始使用 tf.keras 了。

對於 Keras 和 TensorFlow 來說,二者的合併似乎是一個雙贏的決定,但很多開發者不這麼認為。上述發帖者就是其中之一。

ta 認為,這一決定已經慢慢地將 Keras 殺死了。為了解釋這一觀點,ta 還給出了三個理由:

第一個理由是:在合併期間,Keras API 被有效地「凍結」了,這使得它在特性方面落後於其他競爭者;

第二個理由是:TF 2 發佈得太晚了。最重要的是,最初的幾個 2.x 版本漏洞百出,甚至現在也缺乏一些基本的特性;

第三個理由是:谷歌沒有在 TF 1 和 2 之間進行堅決的切割,而是將 TF 1 中的很多包和垃圾直接移植到 TF 2,使得框架非常臃腫。當某個地方出問題時,你會被滿屏冗長的神秘錯誤資訊和堆疊追蹤所淹沒。

基於這些體驗,發帖者認為,Keras 已經被谷歌殺死了。

除此之外,之前的一些開發者也指出了二者合併之後帶來的一些問題。比如 API 混亂。二者合併之後,tf.keras 中的高級 API 與 tf 中的底層 API 經常需要混用,這樣的整合會讓開發者不知所措。與此同時,API 的割裂也加大了開發者尋找教程的難度。比如在 TF 2.0 版本中,除了「TF2.0」 這個關鍵字,你還要弄清楚:這個文件是關於 TF2.0 本身的,還是關於 tf.keras 的。

悼念?我用著挺好的啊

雖然 Keras 併入 TensorFlow 造成了一些混亂,但有不少開發者認為,這一舉動並沒有毀掉 Keras,反而解決了很多實際問題。

一位使用者名為「acardosoj」的開發者認為,「Keras API 比以前更容易了。現在你有了更多的函數可以選擇,可以更加輕鬆地利用 TensorFlow 分散式訓練。你可以用幾行程式碼在數百個 GPU 上訓練一個巨大的模型。」這些在 2016 年都是不可能的。

使用者名為「carlthome」的開發者也認為,今天的 Keras 的確增加了很多功能,tf.data、tf.metrics 和 tf.distribute 也因為 tf.keras 的存在而變得更易用。因此他認為,儘管 TensorFlow 的生態系統還需要改善,我們也不應該忽視這些年取得的進步。

甚至有位 TF 的使用者表示,從 TF 轉向完全集成了 Keras API 的 TF 2 是一個最好的選擇。

雖然很多人表示,Keras 和 TF 的結合確實帶來了一些改進,但他們也承認,現在整個的 TensorFlow 以及它與 Keras 的合併都很混亂。既然如此,谷歌的團隊為什麼不多花點工夫梳理一下呢?有些開發者認為,這可能是因為,谷歌的很多人都去開發 Jax 了。

「Tensorflow 從一開始就是一團糟,它非常適合作為可微分程式設計的工具,但在設計上有一些問題影響了靈活性。PyTorch 的動態圖計算做的更好,TF2 想追趕但為時已晚。」

實際上,很多谷歌程式設計師可能都已經轉向 Jax 了。Jax 是谷歌開發的一個 Python 庫,用於機器學習和數學計算,具有正向和反向自動微分功能,非常擅長計算高階導數。程式設計師們還開發了像 Haiku 這樣的工具,使 Jax 可物件導向。

與其說 TensorFlow 殺死了 Keras,還不如說 TF2 殺死了 Tensorflow。當轉向 Jax 的人數越來越多,Keras 會隨之銷聲匿跡嗎?

參考連結:https://www.reddit.com/r/MachineLearning/comments/mhrpbm/d_keras_killed_by_google/

相關文章