Categories
程式開發

建立高效機器學習團隊的4個步驟


在過去的幾年裡,機器學習有了巨大的發展。作為一門學科,機器學習還不成熟,機器學習團隊的管理技藝就更不成熟了。當今,許多機器學習管理人員都是被迫進入管理崗位的,要么是出於需要,要么是因為他們是最好的個人貢獻者,而許多人純粹是因為其學術背景。在一些公司,工程師或產品負責人沒有任何真正的機器學習經驗,就承擔起了構建新的機器學習功能的任務。

本文最初發佈於JAMES LE博客,經原作者授權由InfoQ中文站翻譯並分享。

在過去的幾年裡,機器學習有了巨大的發展。作為一門學科,機器學習還不成熟,機器學習團隊的管理技藝就更不成熟了。當今,許多機器學習管理人員都是被迫進入管理崗位的,要么是出於需要,要么是因為他們是最好的個人貢獻者,而許多人純粹是因為其學術背景。在一些公司,工程師或產品負責人沒有任何真正的機器學習經驗,就承擔起了構建新的機器學習功能的任務。

管理任何技術團隊都不容易:

  • 你必須招聘優秀的人才。

  • 你需要管理和培養牠們。

  • 你需要管理團隊的輸出,並確保你們目標一致。

  • 你會希望做好長期的技術選擇並管理技術債務。

  • 你還必須設法實現來自領導層的期望。

管理機器學習團隊更難:

  • 機器學習人才既昂貴又稀缺。

  • 機器學習團隊有各種各樣的角色。

  • 機器學習項目的時間表不明確,不確定性高。

  • 機器學習也是“技術債務的高息信用卡”。

  • 領導通常不理解機器學習。

我最近參加了UC Berkeley的全棧深度學習訓練營,這是一門非常棒的課程,教授全棧生產級深度學習。其中,Josh Tobin的講座提供了關於機器學習團隊的最佳實踐。本文內容節選自Josh的講座。如果你是一名管理人員,本文將為你提供一些關於如何考慮建立和管理機器學習團隊的見解,如果你是一名求職者,本文也可能幫助你在機器學習領域找到一份工作。

1 – 定義角色

讓我們看看最常見的機器學習角色以及這些角色需要的技能:

  1. 機器學習產品經理與機器學習團隊、其他業務職能部門以及最終用戶一起工作。此人負責設計文檔,創建線框圖,制定計劃,確定機器學習項目的優先級並執行。

  2. DevOps工程師負責部署和監控生產系統。此人負責運行著機器學習產品的基礎設施。

  3. 數據工程師負責構建數據管道、從數據存儲中聚合和收集數據、監控數據行為……此人使用Hadoop、Kafka和Airflow等分佈式系統。

  4. 機器學習工程師負責訓練和部署預測模型。此人使用TensorFlow和Docker等工具來處理生產中運行在真實數據上的預測系統。

  5. 機器學習研究人員負責訓練預測模型,但通常是前瞻性的或非生產關鍵的模型。此人使用TensorFlow/PyTorch/Jupiter構建模型,生成試驗報告。

  6. 數據科學家實際上是一個概括性術語,用於描述上述所有角色。在一些組織中,這個角色實際上需要通過分析回答業務問題。

image

那麼這些角色需要什麼技能呢?上圖是一個很好的說明,橫軸是機器學習的專業知識水平,而氣泡的大小是溝通和技術寫作的水平(越大越好)。

  1. 機器學習DevOps主要是一個軟件工程角色,它通常來自一個標準的軟件工程管道。

  2. 數據工程師屬於與機器學習團隊積極合作的軟件工程團隊。

  3. 機器學習工程師需要機器學習和軟件工程技能的結合,這很少見。這個人要么是一個自學成才的工程師,要么是一個在研究生畢業後從事傳統軟件工程師工作的科學/工程博士。

  4. 機器學習研究人員是一個機器學習專家,通常擁有計算機科學或統計學碩士或博士學位,或者完成了一個工業獎學金項目。

  5. 機器學習產品經理就像傳統的產品經理一樣,對機器學習的開發過程和思維方式有著深刻的了解。

  6. 數據科學家的角色要有從本科生到博士生的廣泛背景。

2 – 建立團隊

關於建立機器學習團隊的正確方法,目前還沒有共識,但是有一些根據不同的組織原型及其機器學習成熟度級別而確定的最佳實踐。首先,讓我們看看這些不同的機器學習組織原型是什麼。

原型1 – 初級的、臨時的ML

  • 這些組織中沒有人從事機器學習,或者機器學習是在需要時才做。顯然,公司內部幾乎沒有機器學習的專業人才。

  • 這些企業要么是中小型企業,要么是教育或物流等行業中技術含量較低的大公司。

  • 經常有唾手可得的機器學習成果。

  • 但對機器學習項目的支持很少,很難聘用和留住優秀人才。

原型2 – 研發ML

  • 這些組織的機器學習工作集中在組織的研發部門。他們經常僱傭機器學習研究人員和有論文發表經驗的博士生。

  • 這些公司都是石油天然氣、製造業或電信等行業的大公司。

  • 他們可以聘請經驗豐富的研究人員,長期從事重點的業務工作,以獲得重大的勝利。

  • 然而,獲得高質量的數據非常困難。通常情況下,這類研究工作很少轉化為實際的業務價值,因此投資金額通常很小。

原型3 – 產品嵌入式ML

  • 在這些組織中,某些產品團隊或業務單位除了擁有軟件或分析人才外,還擁有機器學習專業知識。這些機器學習人員向團隊的工程/技術主管匯報。

  • 它們要么是軟件公司,要么是金融服務公司。

  • 機器學習的改進可能會帶來業務價值。此外,在創意迭代和產品改進之間存在一個緊密的反饋週期。

  • 不幸的是,招聘和培養頂尖人才仍然非常困難,獲取數據和計算資源可能會滯後。機器學習項目週期和工程管理之間也存在潛在的衝突,因此,長期的機器學習項目可能很難證明其正確性。

原型4 – 獨立的ML部門

  • 這些機器學習部門是直接向高層領導匯報的組織。機器學習產品經理與研究人員和工程師合作,將機器學習構建成面向客戶的產品。他們有時可以公佈長期研究。

  • 這些公司通常是大型金融服務公司。

  • 人才密度允許他們僱傭和培訓頂級從業者。高層領導可以調度數據和計算資源。這使得組織可以在機器學習開發的工具、實踐和文化方面進行投資。

  • 缺點是,模型移交給不同的業務線可能具有挑戰性,因為用戶需要接受機器學習的好處,並學習模型的用法。此外,反饋週期可能很慢。

原型5 – ML優先

  • 在這些組織中,首席執行官投資於機器學習,而整個行業中也有專注於快速成功的專家。機器學習部門從事具有挑戰性和長期性的項目。

  • 這個群體包括大型科技公司和以機器學習為重點的初創公司。

  • 他們有最好的數據訪問(數據思維滲透到整個組織),最有吸引力的招聘渠道(具有挑戰性的機器學習問題往往會吸引頂級人才),以及最簡單的部署流程(產品團隊對機器學習有足夠的了解)。

  • 這種類型的組織原型很難在實踐中實現,因為在文化上很難在所有地方都嵌入機器學習思想。

根據你的組織和上面的哪個原型類似,你可以做出適當的設計選擇,大致可分為以下三類:

  • 軟件工程 vs 研究:機器學習團隊在多大程度上負責構建或集成軟件?軟件工程技能在團隊中有多重要?

  • 數據所有權:機器學習團隊對數據收集、存儲、標識和傳輸有多少控制?

  • 模型所有權:機器學習團隊是否負責將模型部署到生產環境?誰維護已部署的模型?

以下是設計建議……

如果你的組織專注於機器學習研發:

  • 研究絕對要優先於軟件工程技能。因此,這兩個組之間可能缺乏協作。

  • 機器學習團隊對數據沒有控制權,通常也沒有數據工程師來支持他們。

  • 機器學習模型很少部署到生產中。

如果你的組織已經將機器學習嵌入到產品中:

  • 軟件工程技能將優先於研究技能。通常情況下,研究人員需要很強的工程技能,因為每個人都需要生產他/她的模型。

  • 機器學習團隊一般不負責數據生產和數據管理。他們需要與數據工程師一起建立數據管道。

  • 機器學習工程師完全擁有他們部署到生產中的模型。

如果你的組織有一個獨立的機器學習部門:

  • 每個團隊都有很強的工程和研究技能;因此他們在團隊中緊密合作。

  • 機器學習團隊在數據治理討論中有發言權,並且具有強大的數據工程職能。

  • 機器學習團隊不干涉用戶的模型,但仍然負責維護它們。

如果你的組織是機器學習優先的:

  • 不同的團隊或多或少都是以研究為導向的;但一般來說,研究團隊與工程團隊緊密合作。

  • 機器學習團隊通常擁有全公司範圍的數據基礎設施。

  • 機器學習團隊放手讓用戶操作和維護模型。

下面的圖片很好地總結了這些建議:

image

3 – 管理項目

管理機器學習項目非常具有挑戰性:

  • Lukas Biewald認為,很難事先分辨出什麼困難什麼簡單。即使在一個域中,性能也可能有很大差異。

  • 機器學習的過程是非線性的。項目停滯數週或更長的時間很常見。在早期階段,很難計劃一個項目,因為不清楚什麼會起作用。因此,估計機器學習項目的時間表非常困難。

  • 由於不同的價值觀、背景、目標和規範,研究和工程之間存在文化差異。在有毒的文化中,雙方往往不重視對方。

  • 通常情況下,領導層並不了解項目。

那麼,如何更好地管理機器學習團隊呢?秘密武器是從概率上規劃機器學習項目!

本質上講,從這下面這幅圖開始:

image

得出下面這幅圖:

image

下面是其他一些好的實踐:

  • 你應該嘗試一個方法組合。

  • 你應該根據輸入來衡量進展,而不是結果。

  • 你應該讓研究人員和工程師一起工作。

  • 你應該快速地將端到端管道連接在一起,以展示快速的成果。

  • 你應該在機器學習時間表的不確定性方面培養領導力。

4 – 招聘人才

根據Element AI發布的2019年全球人工智能人才報告,有強有力的證據表明,頂級人工智能人才的供應無法滿足需求。在人工智能研究前沿領域,大約有2.2萬人在積極地發表論文,並在學術會議上發言。只有大約4000人參與了對整個領域產生重大影響的研究。總共有36500人自稱是人工智能專家。相比之下,軟件開發者的數量在美國是420萬,在世界上是2640萬。

1 – 如何尋找機器學習人才?

下面是招聘機器學習工程師的一些策略:

  • 因為他們的軟件工程技能、對機器學習的濃厚興趣和學習的渴望而僱傭他們。然後你可以訓練他們進行機器學習。

  • 考慮到現在大多數計算機科學本科畢業生都有機器學習的經驗,你可以選擇初級職位。

  • 明確你需要什麼。例如,並不是每個機器學習工程師都需要做DevOps。

以下是招聘機器學習研究人員的策略:

  • 關注其出版物的質量,而不是數量(例如,創意、執行質量)。

  • 尋找在重要問題上有遠見的研究人員。許多研究人員關注流行問題,卻沒有考慮它們的重要性。

  • 尋找有學術以外經驗的研究人員。

  • 考慮從鄰近領域(如數學、物理和統計)招聘人才。

  • 考慮僱傭沒有博士學位的人。例如,有才華的本科生和碩士生,工業獎學金項目(谷歌、Facebook、OpenAI)畢業生,甚至是專注的自學者。

如何找到這些候選人的呢?

  • 有一些標準的信息來源,比如LinkedIn,通過招聘中介,參加大學的招聘會。

  • 你應該參加面向機器學習研究人員的知名機器學習研究會議(NeurIPS、ICLR、ICML)和麵向機器學習工程師的知名應用機器學習會議(O ‘Reilly、ReWork、TensorFlow World)。

  • 你可以通過監控ArXiv獲取令人印象深刻的研究論文,並聯繫第一作者。

image

至於長期策略,你需要考慮如何吸引這些候選人,讓你的組織脫穎而出:

  • 由於機器學習實踐者希望使用最先進的工具和技術,你的公司應該致力於研究型項目,在博客中公佈它們,並為你的機器學習團隊投資工具和基礎設施。

  • 由於機器學習實踐者希望在一個令人興奮的領域構建技能和知識,你的公司應該圍繞學習建立團隊文化(即閱讀小組、學習日、職業發展預算、會議預算)。

  • 既然機器學習實踐者想要與優秀的人一起工作,那麼你的公司應該僱傭知名度高的人,或者通過發表博客和論文來幫助公司最優秀的人建立他們的檔案。

  • 因為機器學習的實踐者想要處理有趣的數據集,你的公司應該在招聘材料中推銷你的數據集的獨特性。

  • 既然機器學習的實踐者想要做重要的工作,你的公司應該推銷你公司的使命以及機器學習對這個使命的潛在影響。更重要的是,你應該致力於那些對今天有實際影響的項目。

2 – 如何面試機器學習候選人員?

那麼,在機器學習面試中,你應該測試什麼呢?

  • 首先要確認你認為候選人具備的優點。對於機器學習的研究人員來說,要確保他們能夠創造性地思考新的機器學習問題,並探究他們對之前項目的思考程度。對於機器學習工程師,確保他們是具有紮實工程技能的多面手。

  • 第二件事是確保候選人在弱項上達到最低標準。對於機器學習研究人員,測試他們的工程知識和編寫良好代碼的能力。對於機器學習工程師,測試他們簡單的機器學習知識。

與傳統的軟件工程面試相比,機器學習面試的定義要模糊得多,但以下是常見的評估類型:

  • 背景和文化契合度

  • 白板編程

  • 結對編碼/調試(通常是特定於機器學習的代碼)

  • 數學謎題

  • 外帶項目

  • 應用機器學習(例如,解釋如何用機器學習解決問題)

  • 以前的項目(方法、試驗和錯誤、結果)

  • 機器學習理論(如偏差-方差權衡、過擬合和欠擬合、特定算法……)

3 – 如何找到一份機器學習從業者的工作?

假設你是一名機器學習職位候選人,正在閱讀本文。你可能會問:“我在哪裡可以找到一份機器學習的工作?”

  • 同樣,有標準的資源,如LinkedIn、招聘企業和校園招聘。

  • 你可以參加機器學習研究會議,與那裡的人交流。

  • 你也可以直接在公司的門戶網站申請(記住這個行業有人才缺口!)

找工作當然不容易,但有幾個方法可以讓你脫穎而出:

  • 建立通用的軟件工程技能(通過CS課程和/或工作經驗)。

  • 對機器學習表現出興趣(通過參加會議和/或參加慕課)。

  • 表明你有廣泛的機器學習知識(例如,寫博客文章綜合一個研究領域)。

  • 演示完成機器學習項目的能力(例如,創建副項目和/或重新實現論文)。

  • 證明你可以創造性地思考機器學習(例如,贏得Kaggle競賽和/或發表論文)。

為了準備面試,你應該:

  • 使用類似破解編碼面試這樣的資源進行一般軟件工程面試的練習。

  • 準備詳細談談你過去的項目,包括你所做的權衡和決定。

  • 複習機器學習理論和基本的機器學習算法。

  • 創造性地思考如何使用機器學習來解決你面試的公司可能面臨的問題。

我還推薦大家看看Chip Huyen在訓練營發布的這份幻燈片 ,其中包括了機器學習面試過程中雙方的一些重要經驗。

小 結

對於大多數傳統組織來說,機器學習是一門新興的、不斷發展的學科,建立機器學習團隊充滿了已知和未知的挑戰。以下是最後的幾個要點:

  • 機器學習涉及許多不同的技能,因此有許多人都有做貢獻的機會。

  • 機器學習團隊變得更加獨立,更加跨學科。

  • 管理機器學習團隊很困難。沒有什麼靈丹妙藥,但轉向概率規劃可能會有所幫助。

  • 機器學習人才稀缺。作為一名管理人員,在機器學習的職位描述中,要明確哪些技能是必須具備的。作為一名求職者,以一個局外人的身份進入這個領域可能會面臨殘酷的挑戰,所以要藉助項目建立知名度。

希望這篇文章為你建立高效的機器學習團隊提供了有用的信息。在接下來的博文中,我將分享更多我在全棧深度學習訓練營中學到的東西,敬請期待!