我從 200 個機器學習工具中都學習到了什麼?

英文:What I learned from looking at 200 machine learning tools
作者:Chip Huyen,計算機科學家,現就職於硅谷的一家人工智能初創公司,專注於機器學習生產流程。
譯者:羅昭成
本文已獲作者翻譯授權。

爲了更好的理解現在的機器學習、人工智能的工具,更好的預測他們的前景。我收集了所有我能收集到的,有關人工智能與機器學習的資料。這些資源來源以下幾個方面:

我從中過濾掉使用機器學習做產品的公司(如,使用機器學習提供數據分析的公司)、不常用的工具或沒有人使用的工具。還有 202 個機器學習的工具。這裏有完整的列表。如果有你覺得應該包含但我沒有列出來的工具,請你告訴我。

免責申明

  1. 這個列表是我在 2019 年的時候整理的,在過去的 6 個月,市場中可能會有一些變化。
  2. 有一些科技公司有大量的工具,我並不能一一列舉。如 Amazon Web Services 提供了超過 165 種完整的服務。
  3. 有許多不知名或者已經不存在的公司並沒有在此分析的數據之中。

本文包含以下 6 部分內容

  1. 概述
  2. 機器學習的發展歷史
  3. 機器學習前途未卜
  4. 機器學習運維面臨的問題
  5. 開源與開放核心
  6. 總結

1. 概述

創建一個機器學習的產品,包含以下四個步驟:

  1. 項目立項
  2. 數據處理
  3. 建模與訓練
  4. 提供產品服務

我將我統計出來的機器學習工具,根據這些工具對上面步驟的支持情況,對所有機器學習工具進行分類。當然,這裏面不包含項目立項相關的內容,它需要的是項目管理工具,而不是機器學習工具。分類這件事情並沒有看起來的那麼簡單,很多工具都可以幫助你完成多個事情。並且它們模棱兩可的解釋,也並不能讓我們很好理解它的作用,像下面的這些描述:“我們突破了數據科學的極限”,“我們將 AI 項目轉變成商業成果”,“像呼吸一樣,隨意使用你的數據”,還有我最喜歡的一句: “我們馳騁在數據科學中。”

每個工具都有它最擅長的部分,我將包含多種能力的工具分類到它最擅長的那一類中。如果它擅長所有部分,我就將他們放在N 合一這個類別中。當然,分類中還包含基礎設施提供商,他們提供訓練與存儲的基礎設施,並且大部分都是雲服務提供商。

2. 機器學習的發展歷史

首先,我將這些工具發佈的時間進行了整理。如果這個工具是一個開源項目,我從該項目的第一次提交開始,查找項目公開的時間;如果是一家公司,我使用它在 Crunchbase 上註冊的時間作爲工具的發佈時間。基於這些數據,我繪製了各類工具每年發佈的數量圖。

工具數量圖

不出所料,數據中可以看到,隨着深度學習的發展,在 2012 年開始迎來爆發式的增長。

前卷積神經網絡時代(2012 年之前)

直到 2011 年,機器學習主要工作都是在建模和訓練模型上,那時的一些框架,到現在還很流行(如:Scikit learn),當然還有一些框架爲現在的發展留下了深遠的影響。很多機器學習工具開始於 2012 年前,一直持續優化迭代到今天,直到它們 IPO(Cloudera、Datadog、Alteryx)或者被收購,或者成爲社區流行的開源項目(Spark、Flink、Kafka)。

高速發展階段 (2012 - 2015 年)

當機器學習的社區採用“數據驅動”的方法時,機器學習的發展就變成了數據處理的發展。每年在每個類別中工具的發佈數量,也清晰的展現出了這一點。在 2015 年,有 57% 數據處理工具。

工具數量增長曲線

生產階段 (2016 年至今)

純粹的技術研究對機器學習領域來說非常重要,但是大多數公司並沒有足夠的研究經費支持技術研究,除非對應的技術研究能在短期內應用在真實的商業場景中。隨着機器學習的研究與發展,海量的數據與處理模型的增長,使得機器學習越來越觸手可得。越來越多的人爲他們的應用找到使用機器學習的場景,這也近一步增加了我們對機器學習工具的需求。

在 2016 年,Google 宣佈使用神經網絡來提高 Google 翻譯的準確度,這也是深度學習應用在真實商業場景中的先例之一。從那時起,有很多的機器學習工具被開發出來,幫助我們更好的做人工智能的產品。

3. 機器學習前途未卜

現在有很多人工只能相關的初創公司,它們中大多數都是將機器學習用於它們的產品(如提供業務分析或客戶支持等產品),而不是做機器學習工具的初創公司(創建工具來幫助其他人實現產品)。用投資人的話來說,他們大多數都是在人工智能的垂直領域。在 2019 年福布斯排行榜中,50 家人工智能公司,其中只有 7 家是做機器學習工具的公司。

當你去一家公司,告訴他們,使用你的產品可以減少一半客戶支持的投入,因此應用類的產品能夠更好的售賣、商業化。但是機器學習相關的工具卻很難賣出去,但是這些工具對人工智能的影響非常大,因爲他們的目標不是做某一個單一的應用程序,而是在做一個生態。許多公司可以提供相似的人工智能產品,但是在創建機器學習產品的流程中,通常很少有工具能夠共存。

經過我廣泛的搜索調查,我卻只能找到大約 200 多個人工智能的工具,與傳統軟件相比,這點工具是非常微不足道的。如果你想找一個傳統 Python 應用程序的測試工具,花兩分鐘時間,你在 Google 上至少能找到 20 個。但是如果你想找一個測試機器模型的工具,你就很難能夠找到了。

4. 機器學習運維面臨的問題

很多傳統軟件開發的工具也可以用於人工智能產品的開發中,但是,人工智能產品中有很多獨有的挑戰,它們需要特有的工具去處理。

對於傳統的軟件工程師來說,寫代碼是最難的一部分。但對於機器學習來說,寫代碼只是挑戰中很小的一部分。開發一個可以在商業中使用的模型非常困難,並且成本很高。大多數公司並不會將重點放在模型的開發上,而是使用現有的模型。

對於機器學習來說,使用更多、更好的數據,能夠實現更好效果的應用程序。大多數的公司都將重點放在數據優化上,而不是機器學習算法的優化上。由於數據的快速變化,我們的機器學習應用程序也需要快速的進行發佈。在很多機器學習應用的場景中,你需要每天都進行模型更新。

機器學習算法的大小也是一個問題。一個大型的 BERT 模型有 340M 的參數,整個算法大小約爲 1.35GB。即使這個模型可以在你用戶的設備(如手機)上安裝,這個模型在新的樣本上進行推理所花費的時間也有可能使得應用程序毫無用處。舉個例子:在使用輸入法的時候,算出建議字符花費的時間比你手動輸入的時間還長,那自動完成的模型就一點用都沒有。

Git 使用了一行一行的比較形式,比較兩個文本文件的差異,因此他對傳統軟件程序開發非常友好。然而它並不適用數據集以及模型之間的差異比對。又如 Pandas 能夠很好的進行數據處理,但是它不支持在 GPU 上運行。

CVS 等基於行的數據格式,非常適合在數據量小應用程序中使用。但如果你的應用程序有許多功能,並且這些功能只需要使用數據中的一個子集,這種情況下,使用基於行格式的方式仍需要加載所有的數據。PARQUET 和 OCR 等列格式的工具,針對上述的場景進行了相應的優化。

機器學習產品在發佈上也面臨着很多問題:

  • 監控: 如何知道你的數據分佈發生了變化,你需要重新訓練模型?例如:Dessa,Alex Krizhevsky 基於 AlexNet 開發的,在 2020 年被 Square 收購
  • 數據標籤:如何快速的給新的數據打標,或將已經存在的數據進行重新打標來支持新的模型訓練?例如:Snorkel
  • 持續集成、持續交付: 如何保證你的模型在每一次修改後都能夠按照預期的進行工作,你不可能花費好幾天的時間去等待訓練收斂的結果?例如:Argo
  • 交付: 如何打包併發布你的新模型?例如:OctoML
  • 模型壓縮:如何將你的機器學習模型進行壓縮,讓他能夠在客戶的設備上運行? 例如:Xnor.ai 這家公司,由艾倫研究所拆分出來,專注模型壓縮的初創企業,在 2018 年 5 月,估值 6200 萬美元,獲得 1460 萬美元的融資。在 2020 年 1 月, 蘋果以 2 億美元收購了它,並關閉了它的網站。
  • 推理優化: 如何提高你的模型推理速度?多步融合?低精度?減小模型可以使推理速度變得更快。例如:TensorRT
  • 邊緣設備: 硬件涉及讓機器學習算法能夠更快速的運行在更廉價的設備上。例如:Coral SOM
  • 隱私:如何使用用戶的數據進行訓練並且保證用戶的隱私?如何讓你的應用程序滿足 GDPR ? 例如:PySyft

我根據這些機器學習工具主要解決的問題繪製了下圖:

工具數量

這些工具很大一部分都聚焦在數據處理上:數據管理、標記、數據查詢、數據處理、數據生成等。這些數據處理工具旨在構建一個平臺,數據處理是項目中資源最密集的階段。如果有人在你的平臺上,給你提供數據,你就能很容易爲他們提供預先構建的訓練模型。

建模和訓練模型主要是框架來實現的。而深度學習框架競爭已經逐漸趨於冷卻,現主要是 Pythorch 和 TenserFlow 之間的競爭。以及一些基於這兩個框架的更高層次的框架之間的競爭,它們圍繞這兩個框架來處理特定的任務: NLP 與 NLU 以及多模態問題。這些框架都是分佈式訓練框架。這還有一個新的框架 JAX,很多討厭 TenserFlow 的 Google 開發者都使用它。

現在有很多獨立的工具用於一些實驗跟蹤,並且流行的框架中都內置有他們自己的實驗跟蹤的功能。超參數是一個非常重要的功能,有些人注意到他們也不奇怪,但是他們似乎都沒有抓住重點,超參數的瓶頸並不是設置參數,而是高效的計算能力。

另一個沒有被解決的重要問題是在部署與服務上,在這一方面缺乏解決方案的原因在於研究人員與運維人員之間缺少溝通。在有能力從事人工智能研究的公司中(通常是大公司),研發團隊與運維團隊幾乎都是分開的,兩個團隊之前的合作只能通過(產品、項目)經理來實現。而在小公司中,員工能看到全局,但是他們會受到產品需求的限制。只有少數初創公司,這些公司聘請了有經驗的運維工程師和有經驗的研究人員一起協同辦公,成功的解決了這一問題。並且這些初創公司佔據了人工智能很大一部分市場。

5. 開源與開放核心

在 202 個工具中,其中有 109 個是開源軟件(OSS)。即使有些工具不是開源的,他們大多數也會附帶一些開源的工具。

這裏有幾個開源軟件的原因: 一是所有支持開放源代碼的人多年來一直都在說的原因,透明、協作、靈活,但這一個原因似乎只是一個道德上的約束。另一個是,客戶並不想在看不到源代碼的情況下使用新的工具,因爲在看不到源代碼的情況下,如果這個工具被關閉,他們將不得不重寫代碼,實現這個功能。

開源並不意味着不盈利,也不意味着免費。開放源代碼的維護很費時,並且成本也很高。據說, TenserFlow 團隊有接近 1000 人。公司不會在沒有商業目標的情況下提供開源軟件。如果有更多的人使用他們的開源工具,就會有更多的人瞭解他們,信任他們的技術,並且會購買他們的專有工具,並且也能讓更多的人希望加入他們公司。

Google 通過推廣 TenserFlow,希望能夠讓更多的人使用他們的雲服務。NVIDIA 維護 cuDF 庫也是希望有更多的人來買他們的 GPU。Databricks 免費提供 MLflow,但出售他們的數據分析平臺。Netflix 最近成立了專門的機器學習團隊,發佈他們自研的 Metaflow 框架,用以吸引人才。自然語言處理工具 SpaCy 是免費的,但是 Prodigy 卻是收費的。

開放源代碼已經變成了一種行業標準,創業公司很難從中找到一種可行的商業模式。任何一個剛起步的公司,都必須與現有的開源工具進行競爭。如果你也僅僅只開放核心,你需要仔細思考,哪些特性是要包含在開源軟件中,而哪些是要放在付費的版本中。既要讓用戶不覺得你貪婪,也要能夠讓免費用戶付費。

6. 總結

關於人工智能的泡沫是否會破滅,人們也是議論紛紛。現在,人工智能上很大一部分投資都在自動駕駛上,但是到現在仍然沒有一款完全自主駕駛的汽車出現。一些人認爲投資者將會對人工智能失去希望, Google 也凍結了在機器學習上的人員招聘, Uber 解僱了一半的人工智能研究團隊。有傳聞說,學習機器學習相關的人員遠多於機器學習相關的工作崗位。

現在是進入人工智能領域的好時機嗎?我相信,現在是有在炒作人工智能的概念,但在某一個時刻,會冷靜下來。有可能這個時間點已經發生了。我不相信機器學習會消失,有能力進行機器學習研究的公司會越來越少,但是絕不會缺乏將機器學習現有的工具引入產品的公司。

如果必須在人工智能專家和工程師之間做一個選擇,那麼請選擇工程師。對於工程師來說,學習人工智能相關知識會很容易,但是對於人工智能專家來說,成爲一個很好的工程師要困難得多。如果你是一個優秀的工程師,並且能夠爲構建人工智能工具而努力,我會由衷地感謝你。

致謝:感謝 Andrey Kurenkov 在我撰寫本文時所做出的指導。感謝 Luke Metz 的審校。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章