機器學習高手成長指南,附攻略與路線圖
作者 | Max Mynter
編譯 | 王啟隆
最近,有幾位朋友通過 Twitter 私信向我諮詢如何成為機器學習工程師。雖然我不是 Andrej Karpathy 那樣的頂級專家,但作為一名穩紮穩打的中級機器學習工程師,我有一些經驗可以分享。我是通過有計劃的努力才達到現在的水平,而且我從業餘愛好者轉變為專業人士的過程就發生在不久前。
如果你也想走這條路,我希望能為你提供一個切實可行的路線圖和實用的資源,幫助你轉型或為你的職業生涯打下基礎。希望我的建議能給你一些啟發。
在盲目遵循任何路線圖之前,我們先來回答一個問題:什麼是機器學習工程師?
機器學習及其相關領域的職位名稱一直存在混淆。在本指南中,我們將機器學習工程師定義為:在組織中工作並運用機器學習解決商業問題的專業人士。他們的工作目標是創建或改進產品,或者提高組織的運營效率。這與機器學習研究員有所不同,後者主要致力於開發新的方法論,進行科學研究,而不直接解決即時的業務需求。
儘管這兩個角色有很大的重疊,但由於我是以機器學習工程師的身份工作,所以我在這裏主要討論的是這個角色。

機器學習工程師的必備技能
機器學習工程是一個跨學科的職業,你需要掌握不同領域的技能。主要包括軟件工程、數據科學和數學,以及一些特定應用領域的知識。
軟件工程
機器學習工程師不僅要會「編程」,還必須是優秀的軟件工程師,原因主要有以下幾點:
-
首先,機器學習的核心是從數據中發現模式,這就要求機器學習工程師能夠處理大量數據,通常遠超過人工處理能力的範圍。
-
其次,機器學習工程師的工作成效是通過業務影響來衡量的。因此,他們需要具備部署模型並將其整合到產品整體框架中的能力。如果無法為用戶提供實際可用的服務,那就意味著工作失敗。
-
最後,深入理解計算機的工作原理和構建定製工具的能力可以大大提高開發效率。在設計模型時,直覺和領域知識確實能夠提供很大幫助,但機器學習模型的構建過程本質上是一個反復試驗的過程。機器學習工程師需要嘗試多種基於經驗的猜測,並探索哪種方法效果最好。這個過程越快,迭代速度越高,最終的成果就會越好。紮實的軟件工程技能有助於實現自動化,加快迭代速度,並使每次實驗更加高效和有效。
順便說一下,不僅僅是我在強調這一點。讓我們來聽聽更有資歷的專家怎麼說,比如 OpenAI 的首席技術官 Greg Brockman:
除了少數例外,人工智能領域最具影響力的人往往是那些既精通軟件又精通機器學習的專家。雖然大多數人可能認為相反,但通常學習機器學習比學習軟件工程要快得多。因此,優秀的軟件工程師在人工智能領域往往擁有巨大的發展潛力。
— Greg Brockman (@gdb)
2023 年 8 月 19 日
歸根結底,機器學習是計算機科學的一個分支,而軟件工程則是將計算機科學理論轉化為有效應用的關鍵途徑。
數據科學
機器學習的核心是從數據中發現模式,因此機器學習工程師必須精通數據處理。他們需要具備處理現實世界中複雜混亂數據的能力,掌握數據收集和理解的方法,能夠提取有用的特徵,並準確解讀模型輸出的合理性。
在實際工作中,最棘手的問題往往不是那些明顯的技術錯誤(如內存溢出),而是那些隱蔽的邏輯錯誤。例如,模型訓練順利完成,輸出結果看似正確,但實際上卻在某些關鍵但不易察覺的方面出現了偏差。經驗豐富的數據科學家都深知,要構建優秀的模型,最有效的方法就是深入鑽研數據本身。
此外,機器學習工程師還需要具備紮實的研究能力。他們要能夠快速找到與當前問題相關的學術文獻,並有能力複現這些研究成果,將其應用到自己的領域中。
數學與統計學
衡量機器學習工程師所需的數學技能水平並不容易。雖然在日常工作中,他們可能不會頻繁地直接應用複雜的數學知識,但紮實的數學基礎對於理解數據特性和算法原理至關重要。因此,數學能力實際上是機器學習工程師的必備技能。
那麼,具體需要哪些數學知識呢?通常來說,機器學習工程師需要掌握實數微積分、線性代數和概率論的基礎知識。這些知識有助於他們理解優化算法的原理、實現方法以及模型輸出的含義。在處理大規模模型或海量數據集時,數值方法和優化理論的知識也會派上用場。此外,統計學知識對於深入理解數據特性也是不可或缺的。
應用領域
儘管機器學習可以被視為一個通用的工具箱,但機器學習工程師如果能夠深入瞭解特定的應用領域,往往會取得更好的效果。這包括兩個方面:首先,他們需要充分瞭解項目的具體用途、目標用戶群體以及可用的數據資源。其次,他們還需要在處理特定類型的數據和選擇適當的模型方面積累專業知識。
例如,在處理文本數據時,他們可能會專注於語言模型(Language Models);在處理圖像數據時,卷積神經網絡(CNN, Convolutional Neural Networks)可能是首選;而在分析時間序列數據時,循環神經網絡(RNN, Recurrent Neural Networks)則可能更為適用。不同的數據類型和應用場景往往需要不同的專業知識和技術方法。

成為機器學習工程師的兩大路徑
通常來說,成為機器學習工程師有兩條主要路徑:
1. 數據科學路徑:首先掌握數學和數據處理技能,然後開始應用機器學習,最後學習必要的軟件工程技能。
2. 軟件工程路徑:先成為一名優秀的軟件工程師,然後逐步學習數學、數據處理和機器學習技能。
對於自學者而言,我更推薦第二條路徑。原因在於,即使你的數據處理和機器學習技能還處於初級階段,你也能為公司創造價值。很多商業問題其實並不複雜,一個簡單但已經部署的模型就能產生實際效益。相比之下,一個非常出色但僅存在於 Jupyter notebook 中的模型,充其量只是一個有趣的玩具。當然,這並不意味著你可以無限期地推遲學習數學。要記住,不斷提升自己才能避免停滯不前。
如果你正在大學攻讀定量相關專業(如數學、統計學等),你可能會自然而然地走第一條路徑。在這種情況下,建議你在學習期間或畢業後專門花些時間學習軟件工程方面的知識。
理想情況下,如果條件允許,最佳選擇是同時兼顧這兩條路徑:主修計算機科學,專攻機器學習,同時通過大量實習來學習業界水平的協作開發技能。這種方法能讓你全面發展,為未來的職業生涯打下堅實基礎。

實用的學習方法
下面我將為你推薦一系列結構化的課程,幫助你踏上機器學習工程師的職業道路。這些推薦主要是為了讓你瞭解相關技能,而不是一個嚴格的課程表。你可以隨時根據自己的興趣和需求調整學習計劃,使用你更喜歡的資源,或者直接通過實際項目來學習技能。畢竟,你最瞭解自己的學習方式。重要的是掌握路線圖中的核心內容,而不是死板地遵循特定的學習方法。
既然我承諾給你一個可行的路線圖和具體的資源,那就讓我們開始吧!
學習編程基礎
無論你選擇哪條路徑,成為機器學習工程師的第一步都是學習編程和計算機基礎知識。考慮到機器學習和數據科學生態系統在 Python 中最為成熟,且有大量學習資源,選擇 Python 作為入門語言是個不錯的選擇。
以下是一些推薦的學習資源:
1. 哈佛大學的 CS50 課程:這是一個優秀的編程和軟件工程入門課程,涵蓋了 Python 的基礎知識。
2. 赫爾辛基大學的《編程基礎》課程:如果你想更深入地學習 Python,這個課程是個不錯的選擇。如果你已經學過 CS50,可以跳過前幾章。
3. 《Dead Simple Python》:雖然你不需要深入瞭解 Python 的內部工作原理就能將其用於數據科學和機器學習,但這些知識在未來會非常有幫助。建議你把這本書放在床頭,每天睡前讀一章。
記住,編程技能是你未來職業發展的基石,花時間打好基礎是非常值得的。
學習基礎機器學習
現在你已經掌握了編程基礎,是時候開始學習機器學習了。建議你從基礎機器學習(shallow ML)算法開始。這些算法比神經網絡更直觀,可以幫助你在不涉及過多複雜性的情況下培養數據處理技能。
推薦資源:Andrew Ng 的機器學習專業課程。這個課程一直是許多人進入人工智能領域的重要入口,內容全面且易於理解。
深度學習
掌握了機器學習的基礎知識後,再進一步學習深度學習(deep learning)。深度學習是當前業界的主流技術,也是一個非常強大的工具箱。以下是一些推薦的學習資源:
1. 如果你喜歡 Andrew Ng 的教學風格,可以繼續學習他的深度學習專業課程。
2. 對於偏好大學風格的課程,推薦 Yann LeCun 在紐約大學的深度學習講座。
3. 如果你更喜歡實用性強的方法,可以嘗試 fast.ai 的課程和配套書籍《Practical Deep Learning for Coders》。
這些資源也涵蓋了一些必要的數學知識。如果你發現自己的數學基礎還不夠紮實,可以考慮學習 deeplearning.ai 提供的深度學習數學課程。
建立專業領域知識
掌握了深度學習的基礎後,下一步是選擇一個特定領域深入研究。如果你還不確定自己的興趣方向,可以嘗試 Huggingface 提供的一系列課程。這些課程雖然不夠全面,但可以為你提供基礎知識、背景信息和專業詞彙,幫助你閱讀相關研究論文並激發項目創意。
記住,無論是軟件開發、編程還是機器學習,理論知識固然重要,但工程實踐更為關鍵。你需要通過實際動手來學習和提高。相信你在學習過程中已經完成了不少課程練習和小項目,現在是時候挑戰更有難度的項目了。開始自由探索你的興趣領域,通過建立個人作品集,從新手逐步成長為專家。
正如 Andrej Karpathy 所說:
如何成為某個領域的專家:
1. 循序漸進地承擔具體項目並深入完成它們,採用”按需學習”的方式(即不要自下而上地廣泛學習)
2. 用自己的話教授或總結你學到的一切
3. 只與過去的自己比較,不要與他人比較
— Andrej Karpathy (@karpathy)
2020 年 11 月 7 日
通常來說,一兩個令人印象深刻、架構良好且富有創新性的大項目,比許多基礎項目更有價值。這不僅能讓你學到更多,還能讓你的簡曆更加出眾。要成為一個優秀的求職者,重要的是要讓這些項目變得具體和可見。你可以通過寫博客或發推文來分享你的學習心得。但最能展示你實力的方式,是為你的項目構建一個前端界面,讓其他人可以親自體驗你的作品。
學習軟件工程
接下來我們來說說軟件工程。Fullstackopen 課程是學習 Web 開發和分佈式系統的一個很好的起點。雖然它不涉及機器學習,但涵蓋了許多對機器學習工程師非常有價值的工具和實踐,例如分佈式系統的架構設計、數據庫管理和容器化。這些知識對於部署你的模型並為用戶提供界面非常寶貴。該課程使用 JavaScript,因為這是 Web 開發的主要語言。雖然乍一看可能會覺得很難,但你已經走了很長的路,現在值得咬緊牙關,將另一種語言添加到你的工具包中。
學習 MLOps
此外,還有一些專門針對機器學習的軟件工程和開發實踐(MLOps)。要學習如何在整個生命週期內管理和設計機器學習產品,fullstackdeeplearning 是一個很好的資源,可以幫助你全面瞭解這些實踐。選擇那些能讓你的機器學習工程師生活更輕鬆的實踐,並將它們應用到你的項目中。這樣的努力是非常值得的。

結束語
到這裏就結束了。如果你按照這份指南進行學習,我相信你可以成為一個有競爭力的入門級機器學習工程師。通過學習上述材料,你將具備必要的理論知識,而你的項目經驗會讓你在一些重點領域成為專家。
然而,找工作僅僅有技能是不夠的。你還需要展示和表達你的技能。你可以通過參加實習、獲得好的推薦信(或留任邀請)以及展示你的作品集來實現這一點。FreeCodeCamp 的創始人 Quincy Larson 曾寫過一本關於他成為軟件工程師歷程的好書。儘管他的目標職位與機器學習工程師稍有不同,但其中的經歷對你未來的道路非常有借鑒意義。
需要注意的是:儘管這個路線圖看起來很簡單,但實現起來並不容易。學習機器學習和軟件工程確實不容易,但也不是不可能。別人已經做到了,如果你下定決心,你也可以做到。
根據你的起點,學習所需時間大致如下:
從零開始學習
如果你全職投入這份路線圖,我估計大約需要 18 個月的時間從頭開始學習。
如果你處在人生階段,可以上大學並且能夠負擔得起,我認為這是最簡單的途徑。大學會為你提供一個社區、指導、課程、實習支持,並緩解父母或其他關心你的人對你未來發展的擔憂。
如果你正在從一個不相關的行業轉行,請確保利用你之前的經驗。即使你想離開當前的行業,你的領域知識也是你的優勢。一旦你獲得了相關職位,你可以在工作中學習,並且跳槽會容易得多。
開發人員的職業轉換
如果你已經是一個開發人員,你會很快變得有價值。在下班後花大約六個月的時間學習淺層和深層的機器學習以及你所缺乏的數學知識。你之前的軟件工程經驗非常寶貴,會受到僱主的高度重視。甚至可能不需要犧牲任何資歷。一旦你轉換角色,你就可以在工作中學習。
數據科學家的機器學習入門
如果你是一個數據科學家,你可能會因為缺乏軟件工程能力而感到職業發展的天花板。至少我是這樣。對於那些在數據科學領域的人來說,轉向機器學習更多是一個自然的職業進展。如果你花額外的時間學習,可以加速你的職業發展。在你當前的角色中尋找機器學習項目或從上述資源中精選內容,花幾個月時間學習,然後建立一個作品集以申請新的職位。
總結
通過遵循這份路線圖,你可以成為一個有競爭力的入門級候選人:
1. 通過 CS50 和一個專門的 Python 資源學習計算機科學基礎和 Python 編程
2. 學習經典(淺層)機器學習來建立基礎並培養數據工作的直覺。
-
構建微積分、線性代數和概率論的數學基礎(可選:數值分析和優化)
3. 通過特定課程學習深度學習,如 Yann LeCun 的 NYU 講座、fast.ai 或 deeplearning.ai 的深度學習專項課程
4. 從 fullstackdeeplearning 學習 MLOps
-
如果有必要,可以通過 fullstackopen 學習軟件工程,包括 Web 開發、分佈式系統、DevOps 和關係數據庫的基礎知識
5. 尋找你想工作的細分領域,並通過建立作品集發展專業知識。你可以從 Hugginface 課程找到起點,沿著你感興趣的路徑,構建一些有趣的項目和論文實現。
祝你好運!
原文:https://www.maxmynter.com/pages/blog/become-mle
本文為 CSDN 翻譯。

大模型刷新一切,讓我們有著諸多的迷茫,AI 這股熱潮究竟會推著我們走向何方?面對時不時一夜變天,焦慮感油然而生,開發者怎麼能夠更快、更系統地擁抱大模型?《新程序員 007》以「大模型時代,開發者的成長指南」為核心,希望撥開層層迷霧,讓開發者定下心地看到及擁抱未來。
讀過本書的開發者這樣感慨道:「讓我驚喜的是,中國還有這種高質量、貼近開發者的雜誌,我感到非常激動。最吸引我的是裡面有很多人對 AI 的看法和經驗和一些採訪的內容,這些內容既真實又有價值。」