人到中年,成功轉行機器學習工程師?國外小哥狂刷吳恩達LeCun,教你18個月轉行

新智元報導  

編輯:Aeneas

【新智元導讀】人到中年,想半路出家轉行成機器學習工程師,可行嗎?最近,這位成功轉行的國外小哥用一篇乾貨滿滿的硬核博客告訴我們:完全可以!

轉行成為一名機器學習工程師,可行嗎?

國外一位成功轉行的Max Mynter告訴我們——完全可以!

收到了多條X私信後,他決定把自己的成功經驗寫下來。

他強調說:我不是Karpathy,但我可以算一名紮實的中級機器學習工程師。

他是通過刻意的努力,才成為一名工程師的。而且,就是在最近,他剛剛從業餘愛好者轉成了一名專業人士。

以前,Mynter從事的是社會學和物理學以前,Mynter從事的是社會學和物理學

因此,他寫下來這篇博文,希望為有類似願望的人們提供可行的路線圖和資源,從而為職業生涯奠定基礎。

什麼是機器學習工程師?

在開始,Mynter給我們提了一個問題:什麼是機器學習工程師?

因為機器學習以及相關職位名稱及其混亂,Mynter特意和人合寫了一份34頁的白皮書。

在指南中,機器學習工程師指的是在組織中工作,並使用機器學習來解決業務案例的人,這就意味著創建、改進產品,或讓組織更高效地工作。

注意,機器學習研究人員與之不同。他們強調的是在科研中開發新穎的方法,但並不需要解決眼前的業務需求。

機器學習工程師的必備技能

機器學習工程是一個跨學科的職業,我們需要掌握軟件工程、數據科學和數學等不同領域的技能,以及應用領域的一些知識。

軟件工程

當然,一個合格的機器學習工程師必須會寫代碼,但最重要的是,你需要是一位有能力的軟件工程師。原因如下——

首先,由於機器學習是在數據中發現模式,因此機器學習工程師必須能夠處理足夠數量的數據。通常這意味著數據量超出了手動處理的量。

其次,由於機器學習工程師的績效是通過業務反映的,因此這個崗位就需要能部署模型,並且將其集成到更大的產品環境中。

可以說,如果沒有為用戶提供任服務,那一個工程師的工作就是失敗的。

最後,如果瞭解計算機的內部工作原理,以及構建定製工具的能力,你的開發速度就會大大提高。

直覺和專業知識確實可以極大地幫助你設計模型,但在實驗過程中構建機器學習模型,始終是必要的。

在這個過程中,機器學習工程師需要嘗試大量有根據的猜測,並且探究怎樣會讓效果更好。

這個過程迭代得越快,最終的輸出就越好。而軟件工程技能有助於更快地自動化和迭代,並且使得各個實驗更加高效。

作者還援引了OpenAI聯創Greg Brockman的觀點。

Brockman曾表示:學習機器學習其實比學習軟件快得多,優秀的軟件工程師潛力巨大

可以說,機器學習最終是一門計算機科學的學科,而軟件工程,就是讓計算機科學成為有效應用的方式。

數據科學

由於ML是從數據中學習模式,因此ML工程師需要具備處理數據的能力。

他們需要能夠處理混亂的現實世界數據記錄,知道如何收集、理解這些數據,還要能設計出有用的特徵,並且解釋模型輸出的敏感性。

最棘手的錯誤並不是內存不足,而是當訓練循環運行後,模型輸出了看似正確但其實是錯誤的結果時。

數據科學家一次又一次地嚐到慘痛的教訓:想要構建一個優秀的模型,最優秀的方法就是花大量時間處理數據。

ML工程師還需要的一個技能就是做研究。

你需要識別與你手頭問題相關的論文,並且能夠複刻這些方法,應用到自己的領域。

數學與統計學

機器學習工程師需要掌握什麼樣的數學技能?這個問題很難量化。

在大多數情況下,你在日常中不會明確地需要用到它們。

然而它總是隱性地被需要。

因為瞭解正確的數學知識,對於理解當前問題的數據、選擇合適的算法來說至關重要。

為此,機器學習工程師需要具備實數微積分、線性代數和概率論的基礎。這些是用於構建和訓練許多機器學習模型的核心數學理論。

而在訓練LLM或處理大型數據集時,你會從數值方法和優化理論的知識中受益。

最後,為了理解特定問題的數據,你還需要掌握統計知識。

應用領域

雖然ML更像是一個通用工具箱,但ML工程師卻可以從特定領域知識中受益匪淺。

一方面,它們會幫你更瞭解你的用例、用戶和可用數據。

另一方面,他們發展了處理特定類型數據和合適模型的專業知識。

例如,用於文本的語言模型、用於視覺的CNN或用於時間序列的RNN。

成為機器學習工程師,有哪些途徑

通常,進入機器學習工程有兩種途徑——

數據科學路線。首先,你需要精通數學和數據工作,開始使用機器學習,然後學習必要的軟件工程技能。

軟件工程路線。當你成為一名有能力的軟件工程師,可以在職業生涯的某個時候轉向學習數學、數據和機器學習技能。

在作者看來,對於自學者來說,2是更好的路線。

這是因為,即使擁有基本的數據和機器學習技能,你對公司也是有用的。

許多業務問題相對簡單,只要部署簡單模型,就已經可以產生價值,而困在Jupyter筆記本中的出色模型,只是一個玩具而已(儘管非常有趣)。

當然,這並不意味著你可以放棄數學了——永遠不要保平庸!

如果你碰巧在大學攻讀定量學位,那在預設情況下,你上的課會或多或少遵循路線1。

在這種情況下,請在上學期間或學期結束後,花一些時間來學習軟件工程知識。

學習計算機科學並專門研究機器學習,同時進行大量實習,以學習行業級的協作開發,這兩條路可以同時進行。

對於路線1,這可能是最佳選擇。

實用資源

以下是一系列幫助你進入ML工程的結構化課程。

它們更多是為你提供相關技能的建議,而不是明確的課程。

你可以隨時進行切換,使用你更喜歡的資源,或者通過直接做項目來掌握所需技能。

你肯定最清楚如何最有效地學習。涵蓋本路線圖的內容,比如何涵蓋它更重要。

學習編碼

上述兩條路線的基礎,都是學習編程,使用計算機。

由於Python的機器學習和數據科學生態系統最為強大,且擁有最多的可用資源,因此是一個安全的選擇。

哈佛的CS50課程,涵蓋了Python的基礎知識,對編程和軟件工程做了精彩的介紹。

如果想更深入瞭解一下,可以去看赫爾辛基大學的《編程基礎》。對於已經學過CS50的人,可以瀏覽一下前幾章。

雖然你並不需要瞭解Python的內部工作原理,就可以將其用於數據科學和機器學習,但這些東西在以後會非常有用。

請將《Dead Simple Python》之類的書放在床頭櫃上,並時不時地閱讀一章。

學習淺層機器學習

學會了編碼,你就可以開始學習機器學習了。

你應該從淺層的學習算法開始。它們比神經網絡更直觀,你可以藉此培養處理數據的技能,無需增加複雜性。

吳恩達的《機器學習專業化》是一個很好的資源,它一直是許多人進入AI的門戶。

學習深度學習

瞭解了ML的基礎知識後,接下來你就可以轉向深度學習、當前的行業標準和強大的工具箱。

如果你喜歡吳恩達的教學風格,就可以繼續學習深度學習專業課程。

如果你喜歡更具大學風格的課程,我推薦Yann LeCun在紐約大學的深度學習講座。

如果你需要更實用的方法,fast.ai和隨附的《程序員實用深度學習》一書可以幫你。

這些資源還涵蓋了一些必要的數學知識。如果你發現自己的知識缺乏,deeplearning.ai有深度學習數學課程。

這本書讓我受益匪淺。它的章節和實際示例既可以用作教學,也可以作為參考。

建立領域專業知識

一旦掌握了深度學習的基礎,就該選擇一個領域進行深入研究了。

如果你還不確定選擇哪個領域,Huggingface上就有大量課程。

這些課程本身當然不夠,但它們是很好的入門讀物,可以為您提供研究出論文的基礎、背景和詞彙,並為你可以構建的項目提出想法。

如果想要開始做項目呢?

軟件、編碼、機器學習——對於所有這些項目,一些理論知識都是必要的,但工程其實是一種實踐,你可以通過實踐來學習。

如果你已經完成了課程練習,構建了一些項目,就可以做一些更具野心的事情。

通過建立作品集,你可以更自由地探索自己的興趣,由新手升級為專家。

一般來說,擁有一個或幾個令人印象深刻、架構良好、值得花費一個月時間的創新性項目,比擁有許多基本項目要更好。

而且,它會讓你學到更多。

想要申請成功,讓這些項目變得切實可行就變得非常重要。

你可能需要寫一篇博客或推文,來介紹自己的學習成果。

但你能做的最令人印象深刻的事,就是構建一個前端,以便其他人可以嘗試。

學習軟件工程

Fullstackopen課程是Web開發和分佈式系統的很好的切入點。

它不涉及機器學習,但涵蓋了許多工具和實踐,它們對於機器學習工程師來說非常有價值,例如構建分佈式系統、數據庫和容器化。

通過這些知識,你就可以部署模型,為用戶提供界面。

本課程使用的是JavaScript,因為它是網絡語言。

雖然這一開始可能令人畏懼,但竟然你已經走了這麼長一段路,此時硬著頭皮給自己的工具包添加另一種語言,也是值得的。

學習MLOps

還有特定於ML的軟件工程和開發實踐 (MLOps)。

要瞭解如何在整個生命週期中管理和設計ML產品,fullstackdeeplearning 是一個很好的資源,可以讓你瞭解一個大概。

選擇讓你的ML工程師生活更輕鬆的實踐,應用到你的項目中,這些努力都是值得的。

結束語

作者表示,如果你遵循本指南,一定可以成為入門級ML工程職位有競爭力的候選人。

因為你既掌握了必要的理論知識,做過的項目也使你成為了幾個重點領域的專家。

然而,要成功找到工作,擁有技能只是做到了一半。

你還需要與人交流,展示你的技能。

你可以通過選擇實習獲得良好的推薦,或者留下來,另外還可以試著獲得投資。

FreeCodeCamp的創始人Quincy Larson,就寫了一本很棒的書,關於他成為軟件工程師的旅程。

儘管他的目標角色略有不同,但這些經歷會非常適合你前半段的旅程。

FreeCodeCamp播客上有這本書前100集的有聲讀物,比如在Spotify上。

需要注意的是:路線圖看起來很簡單,但實踐起來並不容易。

學習機器學習和軟件工程很睏難,但這不是巫術。

其他人在你之前就已經做到了,如果你下決心,就可以做到(這裏有另一篇文章,指導你如何有效地學習困難的東西)。

為了給您一個粗略的瞭解,這是我預計需要多長時間,具體取決於您的起點。

從零開始學習

如果您全職致力於此路線圖,預計需要大約18月的時間,從0開始學習所有內容。

如果你可以上大學,這是最簡單的途徑。大學可以為你提供所需的社區、指導、課程、實習資源。

如果你想從不相幹的行業轉行,請一定要利用起之前的經驗。即使想要離開,你的專業知識也會讓你與眾不同。

作為開發轉行

如果你已經是一名開發人員,你將很快變得有價值。

下班後,你可以花大約六個月的時間,學習淺層和深層的機器學習,以及你缺乏的數學知識。

你此前的軟件工程經驗非常有價值,會受到僱主的高度重視。

甚至你會更加幸運,不需要做出任何犧牲。

一旦轉行成功,你就可以在工作中學習,並獲得報酬。

作為數據科學家進入機器學習領域

如果你是一名數據科學家,你大概率遲早會因為缺乏軟件工程能力,而觸到職業天花板。

作者直言:自己就是如此。

對於數據科學領域的從業者來說,轉向機器學習或多或少是一種自然的職業發展軌道。

如果投入額外的時間來學習,就可以加速你的職業生涯。

你可以在當前的工作資源中尋找ML項目,花幾個月時間來完成它們,然後構建一個組合,來讓自己轉型。

概括

總的來說,你需要做到以下這些事——

學習計算機科學基礎知識以及編程,通過CS50課程和專用Python資源

學習經典(淺層)的機器學習,為數據工作奠定基礎,培養直覺

2.1) 建立微積分、線性代數和概率論的數學基礎(數值和優化會更加分)

按照特定課程學習深度學習,例如Yann LeCun的NYU講座、fast.ai或deeplearning.ai的深度學習專業課程

從fullstackdeeplearning中學習MLOps

4.1) 如果有必要,可以通過fullstackopen來學習軟件工程,比如學習Web開發以及分佈式系統、DevOps和關係數據庫的基礎知識

尋找您想要從事的領域,通過建立你的作品集來發展專業知識。你可以從Hugginface課程中找到一個起點,跟隨你感興趣的兔子洞,通過論文實現構建一些有趣的項目。

做完這些,你就可以去投簡曆了。

祝你好運!

參考資料:

https://www.maxmynter.com/pages/blog/become-mle