人到中年,成功轉(zhuǎn)行機器學習工程師?國外小哥狂刷吳恩達LeCun,教你18個月轉(zhuǎn)行
轉(zhuǎn)行成為一名機器學習工程師,可行嗎?
國外一位成功轉(zhuǎn)行的Max Mynter告訴我們——完全可以!
收到了多條X私信后,他決定把自己的成功經(jīng)驗寫下來。
他強調(diào)說:我不是Karpathy,但我可以算一名扎實的中級機器學習工程師。
他是通過刻意的努力,才成為一名工程師的。而且,就是在最近,他剛剛從業(yè)余愛好者轉(zhuǎn)成了一名專業(yè)人士。
以前,Mynter從事的是社會學和物理學
因此,他寫下來這篇博文,希望為有類似愿望的人們提供可行的路線圖和資源,從而為職業(yè)生涯奠定基礎。
什么是機器學習工程師?
在開始,Mynter給我們提了一個問題:什么是機器學習工程師?
因為機器學習以及相關(guān)職位名稱及其混亂,Mynter特意和人合寫了一份34頁的白皮書。
在指南中,機器學習工程師指的是在組織中工作,并使用機器學習來解決業(yè)務案例的人,這就意味著創(chuàng)建、改進產(chǎn)品,或讓組織更高效地工作。
注意,機器學習研究人員與之不同。他們強調(diào)的是在科研中開發(fā)新穎的方法,但并不需要解決眼前的業(yè)務需求。
機器學習工程師的必備技能
機器學習工程是一個跨學科的職業(yè),我們需要掌握軟件工程、數(shù)據(jù)科學和數(shù)學等不同領(lǐng)域的技能,以及應用領(lǐng)域的一些知識。
軟件工程
當然,一個合格的機器學習工程師必須會寫代碼,但最重要的是,你需要是一位有能力的軟件工程師。原因如下——
首先,由于機器學習是在數(shù)據(jù)中發(fā)現(xiàn)模式,因此機器學習工程師必須能夠處理足夠數(shù)量的數(shù)據(jù)。通常這意味著數(shù)據(jù)量超出了手動處理的量。
其次,由于機器學習工程師的績效是通過業(yè)務反映的,因此這個崗位就需要能部署模型,并且將其集成到更大的產(chǎn)品環(huán)境中。
可以說,如果沒有為用戶提供任服務,那一個工程師的工作就是失敗的。
最后,如果了解計算機的內(nèi)部工作原理,以及構(gòu)建定制工具的能力,你的開發(fā)速度就會大大提高。
直覺和專業(yè)知識確實可以極大地幫助你設計模型,但在實驗過程中構(gòu)建機器學習模型,始終是必要的。
在這個過程中,機器學習工程師需要嘗試大量有根據(jù)的猜測,并且探究怎樣會讓效果更好。
這個過程迭代得越快,最終的輸出就越好。而軟件工程技能有助于更快地自動化和迭代,并且使得各個實驗更加高效。
作者還援引了OpenAI聯(lián)創(chuàng)Greg Brockman的觀點。
Brockman曾表示:學習機器學習其實比學習軟件快得多,優(yōu)秀的軟件工程師潛力巨大
可以說,機器學習最終是一門計算機科學的學科,而軟件工程,就是讓計算機科學成為有效應用的方式。
數(shù)據(jù)科學
由于ML是從數(shù)據(jù)中學習模式,因此ML工程師需要具備處理數(shù)據(jù)的能力。
他們需要能夠處理混亂的現(xiàn)實世界數(shù)據(jù)記錄,知道如何收集、理解這些數(shù)據(jù),還要能設計出有用的特征,并且解釋模型輸出的敏感性。
最棘手的錯誤并不是內(nèi)存不足,而是當訓練循環(huán)運行后,模型輸出了看似正確但其實是錯誤的結(jié)果時。
數(shù)據(jù)科學家一次又一次地嘗到慘痛的教訓:想要構(gòu)建一個優(yōu)秀的模型,最優(yōu)秀的方法就是花大量時間處理數(shù)據(jù)。
ML工程師還需要的一個技能就是做研究。
你需要識別與你手頭問題相關(guān)的論文,并且能夠復刻這些方法,應用到自己的領(lǐng)域。
數(shù)學與統(tǒng)計學
機器學習工程師需要掌握什么樣的數(shù)學技能?這個問題很難量化。
在大多數(shù)情況下,你在日常中不會明確地需要用到它們。
然而它總是隱性地被需要。
因為了解正確的數(shù)學知識,對于理解當前問題的數(shù)據(jù)、選擇合適的算法來說至關(guān)重要。
為此,機器學習工程師需要具備實數(shù)微積分、線性代數(shù)和概率論的基礎。這些是用于構(gòu)建和訓練許多機器學習模型的核心數(shù)學理論。
而在訓練LLM或處理大型數(shù)據(jù)集時,你會從數(shù)值方法和優(yōu)化理論的知識中受益。
最后,為了理解特定問題的數(shù)據(jù),你還需要掌握統(tǒng)計知識。
應用領(lǐng)域
雖然ML更像是一個通用工具箱,但ML工程師卻可以從特定領(lǐng)域知識中受益匪淺。
一方面,它們會幫你更了解你的用例、用戶和可用數(shù)據(jù)。
另一方面,他們發(fā)展了處理特定類型數(shù)據(jù)和合適模型的專業(yè)知識。
例如,用于文本的語言模型、用于視覺的CNN或用于時間序列的RNN。
成為機器學習工程師,有哪些途徑
通常,進入機器學習工程有兩種途徑——
- 數(shù)據(jù)科學路線。首先,你需要精通數(shù)學和數(shù)據(jù)工作,開始使用機器學習,然后學習必要的軟件工程技能。
- 軟件工程路線。當你成為一名有能力的軟件工程師,可以在職業(yè)生涯的某個時候轉(zhuǎn)向?qū)W習數(shù)學、數(shù)據(jù)和機器學習技能。
在作者看來,對于自學者來說,2是更好的路線。
這是因為,即使擁有基本的數(shù)據(jù)和機器學習技能,你對公司也是有用的。
許多業(yè)務問題相對簡單,只要部署簡單模型,就已經(jīng)可以產(chǎn)生價值,而困在Jupyter筆記本中的出色模型,只是一個玩具而已(盡管非常有趣)。
當然,這并不意味著你可以放棄數(shù)學了——永遠不要保平庸!
如果你碰巧在大學攻讀定量學位,那在默認情況下,你上的課會或多或少遵循路線1。
在這種情況下,請在上學期間或?qū)W期結(jié)束后,花一些時間來學習軟件工程知識。
學習計算機科學并專門研究機器學習,同時進行大量實習,以學習行業(yè)級的協(xié)作開發(fā),這兩條路可以同時進行。
對于路線1,這可能是最佳選擇。
實用資源
以下是一系列幫助你進入ML工程的結(jié)構(gòu)化課程。
它們更多是為你提供相關(guān)技能的建議,而不是明確的課程。
你可以隨時進行切換,使用你更喜歡的資源,或者通過直接做項目來掌握所需技能。
你肯定最清楚如何最有效地學習。涵蓋本路線圖的內(nèi)容,比如何涵蓋它更重要。
學習編碼
上述兩條路線的基礎,都是學習編程,使用計算機。
由于Python的機器學習和數(shù)據(jù)科學生態(tài)系統(tǒng)最為強大,且擁有最多的可用資源,因此是一個安全的選擇。
哈佛的CS50課程,涵蓋了Python的基礎知識,對編程和軟件工程做了精彩的介紹。
如果想更深入了解一下,可以去看赫爾辛基大學的《編程基礎》。對于已經(jīng)學過CS50的人,可以瀏覽一下前幾章。
雖然你并不需要了解Python的內(nèi)部工作原理,就可以將其用于數(shù)據(jù)科學和機器學習,但這些東西在以后會非常有用。
請將《Dead Simple Python》之類的書放在床頭柜上,并時不時地閱讀一章。
學習淺層機器學習
學會了編碼,你就可以開始學習機器學習了。
你應該從淺層的學習算法開始。它們比神經(jīng)網(wǎng)絡更直觀,你可以藉此培養(yǎng)處理數(shù)據(jù)的技能,無需增加復雜性。
吳恩達的《機器學習專業(yè)化》是一個很好的資源,它一直是許多人進入AI的門戶。
學習深度學習
了解了ML的基礎知識后,接下來你就可以轉(zhuǎn)向深度學習、當前的行業(yè)標準和強大的工具箱。
如果你喜歡吳恩達的教學風格,就可以繼續(xù)學習深度學習專業(yè)課程。
如果你喜歡更具大學風格的課程,我推薦Yann LeCun在紐約大學的深度學習講座。
如果你需要更實用的方法,fast.ai和隨附的《程序員實用深度學習》一書可以幫你。
這些資源還涵蓋了一些必要的數(shù)學知識。如果你發(fā)現(xiàn)自己的知識缺乏,deeplearning.ai有深度學習數(shù)學課程。
這本書讓我受益匪淺。它的章節(jié)和實際示例既可以用作教學,也可以作為參考。
建立領(lǐng)域?qū)I(yè)知識
一旦掌握了深度學習的基礎,就該選擇一個領(lǐng)域進行深入研究了。
如果你還不確定選擇哪個領(lǐng)域,Huggingface上就有大量課程。
這些課程本身當然不夠,但它們是很好的入門讀物,可以為您提供研究出論文的基礎、背景和詞匯,并為你可以構(gòu)建的項目提出想法。
如果想要開始做項目呢?
軟件、編碼、機器學習——對于所有這些項目,一些理論知識都是必要的,但工程其實是一種實踐,你可以通過實踐來學習。
如果你已經(jīng)完成了課程練習,構(gòu)建了一些項目,就可以做一些更具野心的事情。
通過建立作品集,你可以更自由地探索自己的興趣,由新手升級為專家。
一般來說,擁有一個或幾個令人印象深刻、架構(gòu)良好、值得花費一個月時間的創(chuàng)新性項目,比擁有許多基本項目要更好。
而且,它會讓你學到更多。
想要申請成功,讓這些項目變得切實可行就變得非常重要。
你可能需要寫一篇博客或推文,來介紹自己的學習成果。
但你能做的最令人印象深刻的事,就是構(gòu)建一個前端,以便其他人可以嘗試。
學習軟件工程
Fullstackopen課程是Web開發(fā)和分布式系統(tǒng)的很好的切入點。
它不涉及機器學習,但涵蓋了許多工具和實踐,它們對于機器學習工程師來說非常有價值,例如構(gòu)建分布式系統(tǒng)、數(shù)據(jù)庫和容器化。
通過這些知識,你就可以部署模型,為用戶提供界面。
本課程使用的是JavaScript,因為它是網(wǎng)絡語言。
雖然這一開始可能令人畏懼,但竟然你已經(jīng)走了這么長一段路,此時硬著頭皮給自己的工具包添加另一種語言,也是值得的。
學習MLOps
還有特定于ML的軟件工程和開發(fā)實踐 (MLOps)。
要了解如何在整個生命周期中管理和設計ML產(chǎn)品,fullstackdeeplearning 是一個很好的資源,可以讓你了解一個大概。
選擇讓你的ML工程師生活更輕松的實踐,應用到你的項目中,這些努力都是值得的。
結(jié)束語
作者表示,如果你遵循本指南,一定可以成為入門級ML工程職位有競爭力的候選人。
因為你既掌握了必要的理論知識,做過的項目也使你成為了幾個重點領(lǐng)域的專家。
然而,要成功找到工作,擁有技能只是做到了一半。
你還需要與人交流,展示你的技能。
你可以通過選擇實習獲得良好的推薦,或者留下來,另外還可以試著獲得投資。
FreeCodeCamp的創(chuàng)始人Quincy Larson,就寫了一本很棒的書,關(guān)于他成為軟件工程師的旅程。
盡管他的目標角色略有不同,但這些經(jīng)歷會非常適合你前半段的旅程。
FreeCodeCamp播客上有這本書前100集的有聲讀物,比如在Spotify上。
需要注意的是:路線圖看起來很簡單,但實踐起來并不容易。
學習機器學習和軟件工程很困難,但這不是巫術(shù)。
其他人在你之前就已經(jīng)做到了,如果你下決心,就可以做到(這里有另一篇文章,指導你如何有效地學習困難的東西)。
為了給您一個粗略的了解,這是我預計需要多長時間,具體取決于您的起點。
從零開始學習
如果您全職致力于此路線圖,預計需要大約18月的時間,從0開始學習所有內(nèi)容。
如果你可以上大學,這是最簡單的途徑。大學可以為你提供所需的社區(qū)、指導、課程、實習資源。
如果你想從不相干的行業(yè)轉(zhuǎn)行,請一定要利用起之前的經(jīng)驗。即使想要離開,你的專業(yè)知識也會讓你與眾不同。
作為開發(fā)轉(zhuǎn)行
如果你已經(jīng)是一名開發(fā)人員,你將很快變得有價值。
下班后,你可以花大約六個月的時間,學習淺層和深層的機器學習,以及你缺乏的數(shù)學知識。
你此前的軟件工程經(jīng)驗非常有價值,會受到雇主的高度重視。
甚至你會更加幸運,不需要做出任何犧牲。
一旦轉(zhuǎn)行成功,你就可以在工作中學習,并獲得報酬。
作為數(shù)據(jù)科學家進入機器學習領(lǐng)域
如果你是一名數(shù)據(jù)科學家,你大概率遲早會因為缺乏軟件工程能力,而觸到職業(yè)天花板。
作者直言:自己就是如此。
對于數(shù)據(jù)科學領(lǐng)域的從業(yè)者來說,轉(zhuǎn)向機器學習或多或少是一種自然的職業(yè)發(fā)展軌道。
如果投入額外的時間來學習,就可以加速你的職業(yè)生涯。
你可以在當前的工作資源中尋找ML項目,花幾個月時間來完成它們,然后構(gòu)建一個組合,來讓自己轉(zhuǎn)型。
概括
總的來說,你需要做到以下這些事——
- 學習計算機科學基礎知識以及編程,通過CS50課程和專用Python資源
- 學習經(jīng)典(淺層)的機器學習,為數(shù)據(jù)工作奠定基礎,培養(yǎng)直覺
2.1) 建立微積分、線性代數(shù)和概率論的數(shù)學基礎(數(shù)值和優(yōu)化會更加分)
- 按照特定課程學習深度學習,例如Yann LeCun的NYU講座、fast.ai或deeplearning.ai的深度學習專業(yè)課程
- 從fullstackdeeplearning中學習MLOps
4.1) 如果有必要,可以通過fullstackopen來學習軟件工程,比如學習Web開發(fā)以及分布式系統(tǒng)、DevOps和關(guān)系數(shù)據(jù)庫的基礎知識
- 尋找您想要從事的領(lǐng)域,通過建立你的作品集來發(fā)展專業(yè)知識。你可以從Hugginface課程中找到一個起點,跟隨你感興趣的兔子洞,通過論文實現(xiàn)構(gòu)建一些有趣的項目。
做完這些,你就可以去投簡歷了。
祝你好運!