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