翻譯|行業資訊|編輯:龔雪|2023-09-01 11:18:49.800|閱讀 96 次
概述:本文將探索在機器學習中使用Go所面臨的的挑戰,以及為什么Go可以在機器學領域立足。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Go 是一種開源編程語言,最初由 Google 設計,用于優化系統級服務的構建和使用、在大型代碼庫上輕松工作,以及利用多核聯網機器。 Go 于 2009 年推出,作為一種靜態類型和編譯型編程語言,深受 C 語言的影響,注重簡單性、安全性和并發性。
Go 最主要用于創建大規模應用程序,例如 Docker 和 Kubernetes。 此外由于低延遲、高效的跨平臺性能和易擴縮性,Go 被 Netflix、PayPal 和 Uber 等公司廣泛使用。 不過盡管 Go 有很多優點,但它在機器學習 (ML) 中并不常用。
本文將探索在 ML 中積極使用 Go 所要面對的挑戰,以及 Go 可以在 ML 領域立足的途徑。
PS:GoLand 使 Go 代碼的閱讀、編寫和更改變得非常容易。即時錯誤檢測和修復建議,通過一步撤消快速安全重構,智能代碼完成,死代碼檢測和文檔提示幫助所有 Go 開發人員,從新手到經驗豐富的專業人士,創建快速、高效、和可靠的代碼。
Go 是一種強大高效的編程語言,速度快、性能高,能夠滿足 AI 解決方案的 CPU 密集型、高計算量計算需求。 它比 Python 更快,并具有易用、高效和并發等諸多優勢,在某些情況下優于 ML 中使用的其他語言。
Go 有潛力創建穩健且可擴縮的 ML 應用,甚至性能也比某些競品更為優越,但它在 ML 中仍然是一個被忽視的選擇。 Go 在 ML 中的低采用率主要歸因于它面臨的一些重大挑戰,而 ML 領域的舊編程語言已經解決了這些挑戰。 Go 面臨的挑戰包括缺少高級庫、沒有 CUDA 的原生綁定,以及統計和呈現功能不夠完善。
作為一門相對較新的語言,相較于已經存在了數十年且擁有完善 ML 生態系統和庫的其他語言,Go 的工具和庫要少得多。 因此,Go 可用于 ML 任務的高質量庫和工具更少。
這意味著,想為 ML 使用 Go 的開發者必須花費更多時間構建自定義解決方案,或者與并非專為 Go 設計的現有庫和框架集成。
多年來,Go 庫已經獲得多項顯著改進:GoLearn 提供了 scikit-learn 樣式的擬合與預測功能,以及測試拆分和交叉驗證效用函數,GoMind 提供了神經網絡功能,類似于 TensorFlow 的計算圖計算 ML 學習庫 Gorgonia 提供了縮放功能。
但總體而言,這些庫的深度仍遜于以 Python 為中心并且經過了數十年發展的庫。并且在某些功能上,Go 也會體現出顯著差距,例如自然語言處理 (NLP) 任務,特別是與 spaCy 和 NLTK 相比。
統一計算設備架構 (CUDA) 是 NVIDIA 為圖形處理單元 (GPU) 編程開發的并行計算平臺和編程模型,它讓開發者可以利用 NVIDIA GPU 的高性能計算能力加快各種應用,例如,ML、科學計算、圖像和視頻處理等。
以 GPU 的大規模并行性加快可并行化的計算是 CUDA 的主要優點,然而Go 不像 Python 那樣具有與 CUDA 的原生綁定。
要在 Go 代碼中使用 CUDA,首先需要導入并利用 C 函數來創建 CUDA 綁定。 公平地說,C 代碼通過 cgo 命令嵌入 Go,從而可以創建調用 C 代碼的 Go 軟件包。 但是只有熟練掌握 C 語言才能依賴 C 代碼和 cgo 進行高效的編碼和調試,這會產生巨大的開銷,同時也會產生特定于 C 語言的問題,例如內存安全情況和安全漏洞。
也有第三方代碼軟件包帶有用于 CUDA 的 Go 綁定的效用函數,例如 。
從本質上講,Go 并不特別適合實驗。 Go 代碼是一種編譯型語言,會轉化為可由 CPU 直接執行的機器碼,替代在運行時由運行時環境解釋。這項特性有助于提高 Go 的速度和效率,但是如果不先編譯,就無法編寫和執行 Go 代碼。 因此相對于 Python 和 R 等解釋型語言,在 Go 中相對難以嘗試不同的想法和測試不同的問題解決辦法。
Go 不像其他語言那樣抽象自底層硬件,這對于需要低級優化或嚴格控制硬件資源的任務來說可能是一個優勢,但也可能使 Go 代碼更加冗長,需要更多的前期設置和配置,而 Python 在某些情況下相對而言更靈活、更易用。考慮到 scikit-learn 和 TensorFlow 等庫和框架的深度,以及在一個軟件包中為特征提取、聚類和降維等任務提供更簡單解決方案的可用性,Go 并不是 ML 實驗的最理想選擇。
Go這樣的編譯型語言通常是高性能任務的更優選,例如服務器端編程和實時應用程序優化。
如前所述,Go 缺乏 Python 等業界重量級選手的深度,它只有少量專注于統計、微積分和矩陣操作的專屬庫和軟件包,不足以滿足 ML 和人工智能開發的需求。
這不一定對所有人來說都是劣勢,有些開發者樂于為 ML 算法或數學邏輯主動編寫代碼。 不過這也表示 Go 在相同數據操作、分析和預測算法上的易用性仍要低于 Python。
總體而言,Python、R 和 Julia 推出最早,在 ML 社區中地位穩固。 Go 要想成為可行的替代方案,還有很長一段路要走,特別是這些現有編程語言也在持續發展,使其 ML 和 AI 功能更優秀、更簡單、更有效。
Go 中的 、 和 等高級庫為構建和訓練神經網絡、執行數值計算和其他 ML 任務提供了工具。
然而它們的功能并不如 Python 庫選項中的功能豐富,TensorFlow、scikit-learn 和 spaCy 等 Python 庫和框架是為滿足 ML 開發者的需求而創建和迭代開發,在 ML 行業中很受歡迎,它們提供了適合自然語言處理、圖像嵌入向量、神經網絡和其他 ML 要素需要的功能。
相同的功能在 Go 中也可以實現,并且得益于 Go 相比其他編程語言的優勢(例如聯網、并發和數據處理),它們可能會更強大、更高效。
不過,創建這些功能目前只能在 Go 社區中產生用處,因為 Go 在 ML 社區中并不像 Python 或 R 等語言那樣流行。與更早的對應功能相比,其貢獻者數量也存在巨大差距,導致庫和工具的生態系統相對較小,使得尋找某些問題的既有解決方案更加困難。
Go 的人氣越來越高,社區也在不斷發展。 目前據 統計,已有 2,751 家公司使用 Go,其中包括 Uber、Twitch、Shopify 和 Slack。 此外,根據 ,大約 9.55% 的開發者使用 Go,是第 14 位最流行的編程語言。
雖然這對 Go 社區來說是個好消息,但它并沒有真正轉化到 ML 領域。 Go 最出名的能力在于創建可擴縮服務器和大型軟件系統、編寫并發程序以及啟動快速輕量級微服務,就連 Go 官方網站也沒有將 ML 列為其典型用例。
這表明 Go 目前正在遠離 ML 領域,也在 ML 社區中缺乏立足點。
Go 在 ML 方面還沒有值得注意的亮點,不過考慮到語言的優勢,與其將 Go 視為開發 ML 模型的語言,不如將其看作為 ML 模型服務的語言。
Go 可用于構建 ML 模型服務器,允許模型被其他應用程序或系統訪問和使用。 這對于在生產中部署 ML 模型或構建可供其他開發者或用戶訪問的 ML API 非常有用。 它可用于構建 ML 應用,例如由 ML 驅動的推薦引擎或自然語言處理工具。 它還可用于為這些類型的應用構建后端基礎架構或面向用戶的界面。
對于 Go 社區來說,創建更多工具包和框架來實現更快、更高效的服務器端 ML,可能會在 ML 領域為更多實驗有效開放代碼庫。
Jetbrains技術交流群(QQ):786598704 歡迎一起進群討論
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網