本文約3500字,建議閱讀12分鐘。
工欲善其事,必先利其器。本文的介紹機器學習中9種必須掌握的工具。
學術界儘管在推動技術進步方面發揮了巨大作用,但往往對工業成就一無所知。在我博士畢業時,我意識到有無數偉大的輔助工具,在學術界被忽視,而在工業界卻被廣泛採用。
以我的個人經驗看,學習和引入新工具可能會很枯燥,讓人沮喪並失去動力,尤其是當你對當前的設置非常熟悉且有效時。
要改變既有的習慣可能很困難。我不敢保重新學習新工具這種做事方式一定最優的。然而,在這一過程中,短期內看不到的結果可能會在稍後階段產生百倍的回報。
下面,我將介紹機器學習的一些工具。無論是您是一名學者還是一名人工智慧工程師,這些工具都會對您研究和構建機器學習應用程式非常有幫助。根據工具的用途,我將它們分為四類:環境隔離、實驗跟蹤、協作和可視化。
機器學習是一個發展極為迅速的領域,因此常用的軟體包經常更新。儘管開發人員做出了努力,但較新的版本通常與以前的版本不兼容。這確實會造成很多麻煩!幸運的是,有工具可以解決這個問題!
NVIDIA驅動程序是否給您惹過N次麻煩?在我讀博士期間,有一臺學校管理的機器,在沒有任何通知前,一夜之間定期更新。想像一下,當更新後的第二天早上,我發現我的大部分工作現在與最新的驅動程序不兼容時,我會有多麼驚訝。但如果你有Docker,就不會產生緊張不安的情緒了。
Docker允許將軟體包裝在某種容器中。容器一個獨立單元,它具有自己的軟體、庫和配置文件。在簡化視圖中看,容器是一個獨立的虛擬作業系統,它有與外部世界通信的方法。
Docker有大量現成的容器供您使用。因此,您無需掌握如何關於容器配置的所有知識,只需學習一些簡單的基礎知識即可。
如果想快速入門,請查看教程:
https://docs.docker.com/get-started/
此外,對於為什麼以及如何使用Docker進行機器學習,亞馬遜AWS進行了詳細的解釋。
https://aws.amazon.com/blogs/opensource/why-use-docker-containers-for-machine-learning-development/
https://docs.conda.io/en/latest/開源使得重用別人的代碼成為一種新的規範。有人在GitHub上創建了一個有用的存儲庫,您可以克隆代碼,安裝並獲取解決方案,無需自己編寫任何代碼。
不過有一點不便。當多個項目一起使用時,您會遇到宏包管理問題,不同的項目需要不同版本的宏包。
我很高興我在博士期間沒那麼晚就發現了Conda。它是一個宏包和環境管理系統。它允許創建多個環境並快速安裝、運行和更新宏包及其相關內容。您可以在隔離環境之間快速切換,並始終確保您的項目僅與您期望的宏包交互。
Conda主頁提供了如何創建第一個環境的教程:
https://conda.io/projects/conda/en/latest/user-guide/getting-started.html#starting-conda
嚴格性和一致性是取得應用領域博士學位不可或缺的兩大基本支柱。如果你曾經嘗試過使用機器學習模型,你可能知道對測試參數的跟蹤是多麼容易。這在以前,參數跟蹤是在實驗室筆記本上完成的,我相信這些在其他領域仍然非常有用。但在計算機科學中,我們現在有了比這更強大的工具。一組簡單指標的wandb面板截圖:訓練損失、學習率和平均驗證損失。請注意,您還可以跟蹤系統參數!experiment_res_1.csv這些名稱看起來是否熟悉?如果是這樣,那麼您的模型跟蹤技能應該得到提高。記得在我博士的第一年,我用一個電子表格記錄每個實驗的細節和所有相關的文件。然而,它仍然非常複雜,參數記錄的每一次更改都不可避免地會影響後處理腳本。
Weights and biases(W&B/wandb)是我發現得很晚的一個工具,但現在在每個項目中都使用。它讓您只需幾行代碼就可以跟蹤、比較、可視化和優化機器學習實驗。它還允許您跟蹤數據集。儘管有很多選擇,我發現W&B易於設置和使用,具有非常友好的web界面。
如果您對此感興趣,請查看它的快速設置教程:
https://docs.wandb.ai/quickstarthttps://mlflow.org/
與W&B類似,MLflow提供了記錄代碼、模型和數據集的功能。儘管我使用它只是為了記錄數據、模型和代碼,但它提供的功能遠遠不止這些。它允許管理整機器學習的整個生命周期,包括實驗、重現和部署。
如果要快速掌握MLflow,請查看教程:
https://www.mlflow.org/docs/latest/tutorials-and-examples/tutorial.html
此外,Databricks也分享了關於MLflow的一個說明。
https://databricks.com/blog/2018/06/05/introducing-mlflow-an-open-source-machine-learning-platform.html
Screenhttps://linuxize.com/post/how-to-use-linux-screen/
讓實驗在一夜之間運行,並希望你的機器不會進入睡眠狀態,這是我在上半年攻讀博士學位時的選擇。當工作轉移到遠程時,我曾經擔心ssh會話會中斷,畢竟代碼運行了幾個小時,幾乎聚合在一起。
我很晚才知道Screen的功能,所以我無法避免第二天早上實驗結果半途而廢。但在這種情況下,學習使用Screen,遲做總比不做好。
Screen允許您從單個ssh會話啟動和使用多個shell會話。從Screen開始的進程可以從會話中分離,然後在以後重新連接。因此,您的實驗可以在後臺運行,而無需擔心會話關閉或終端崩潰。
這裡總結了Screen的功能:
https://www.geeksforgeeks.org/screen-command-in-linux-with-examples/
協作
學術界因沒有有效的團隊管理機制而效率不高。在某種程度上,對個人捐款的嚴格要求證明了這一點。然而,機器學習的發展速度促使我們需要共同協作。下面是兩個非常基本的工具,可以方便地進行有效的溝通,特別是在遠程工作的新領域。
GitHub
https://github.com/
是不是很基本?看到學術界的人們在跟蹤代碼時有多麼恐怖時,我不得不強調精通版本控制有多麼重要。不再需要名為code_v1、code_v2的文件夾。
GitHub為代碼跟蹤、合併和審查提供了一個非常有用的框架。每當團隊構建深層圖像質量的度量時,每個成員都可以有自己的代碼分支,並行工作。然後可以將解決方案的不同部分合併在一起。每當有人引入bug時,很容易恢復到工作版本。總的來說,我將GitHub列為我在本文中提到的所有工具中最重要的工具。
要開始上手GitHub,查看手把手教程:
https://guides.github.com/activities/hello-world/
Lucidchart
https://www.lucidchart.com/
在了解Lucidchart之前,我曾使用draw.io(https://app.diagrams.net/),它具有一個創建圖表的非常簡單的界面。Lucidchart的功能比它強大上千倍,功能也更加多樣化。它的主要優勢在於共享協作空間和在圖表旁邊做筆記的能力。想像一下,一個巨大的在線白板上排列著一系列模框。
要快速入門,請查看Lucidchart的教程:
https://www.lucidchart.com/pages/tour
可視化
大量的論文提交,尤其是不成功的論文,讓我認識到陳述往往和結果一樣重要。如果審稿人因沒有太多時間而不理解論文,該論文將立即被拒絕。粗製濫造的圖像會給人很差的印象。有人曾經告訴我:「如果你不能製作圖表,我怎麼能相信你的結果?」。我不同意這種說法,但是,我確實同意可視化的重要性。
Inkscapehttps://inkscape.org/
一張圖片勝過千言萬語(事實上,應該是84.1個字:https://www.cl.cam.ac.uk/~afb21/publications/Student-ESP.html)。
Inkscape是矢量圖形的免費軟體。事實上,在我的大學本科網絡開發課程中,學到了如何使用它。然而,只有在我攻讀博士學位期間,我才學會了如何充分享受它——為論文創作那些美麗的圖片。
Inkscape提供的所有功能中最有價值的是TexText擴展(https://inkscape.org/~jcwinkler/%E2%98%85textext)。使用此軟體包,您可以無縫地將LaTeX(https://www.latex-project.org/)集成到圖像中。
這裡有很多教程,但是對於基本功能,我推薦Inkscape團隊提供的教程:
https://inkscape.org/learn/tutorials/
Streamlithttps://streamlit.io/
您是否曾經需要創建一個簡單的網站來展示您的結果,或者創建一個簡單的機器學習應用程式?只需幾行python代碼,就可以使用Streamlit。
我發現它對於紙質補充材料很有用,而對於易於部署和向客戶展示項目演示,它甚至更有用。
要快速上手,請查看教程:
https://builtin.com/machine-learning/streamlit-tutorial
總結與展望
在攻讀博士學位的同時找到自己在行業中的定位並非易事。但在此過程中,我收穫了一些重要經驗。當然,我還希望我能早日獲得博士學位。
這些經驗中,最重要的一條是要保持好奇心,學習動力和改變習慣會極大地影響你的工作質量。
附本文提到的教程網址:
Docker
https://aws.amazon.com/blogs/opensource/why-use-docker-containers-for-machine-learning-development/
Conda
https://conda.io/projects/conda/en/latest/user-guide/getting-started.html
Weights and biases
https://docs.wandb.ai/quickstart
MLflow:
https://www.mlflow.org/docs/latest/tutorials-and-examples/tutorial.html
GitHub
https://guides.github.com/activities/hello-world/
Screen
https://www.geeksforgeeks.org/screen-command-in-linux-with-examples/
Inkscape
https://inkscape.org/learn/tutorials/
Streamlit
https://builtin.com/machine-learning/streamlit-tutorial
Lucidchart
https://www.lucidchart.com/pages/tour
https://towardsdatascience.com/nine-tools-i-wish-i-mastered-before-my-phd-in-machine-learning-708c6dcb2fb0如需轉載,請在開篇顯著位置註明作者和出處(轉自:i數學i打卡ID:i-Math-i-Match),並在文章結尾放置i數學i打卡醒目二維碼。有原創標識文章,請發送【文章名稱-待授權公眾號名稱及ID】至聯繫郵箱,申請白名單授權並按要求編輯。
發布後請將連結反饋至聯繫郵箱(見下方)。未經許可的轉載以及改編者,我們將依法追究其法律責任。