首先這個問題問的很廣。做機器學習方向很多,有些公司更偏重於數據挖掘,而有些更傾向於深度學習。同理,相對應的崗位有些偏重理論也有些偏重實踐。這些因素疊加造成了機器學習相關的崗位分佈廣,如數據分析師,算法工程師,機器學習科學家等,很難一概而論

大概從實習生的時候就開始跟著老闆招聘面試機器學習方向的候選人,到現在前前後後大概也參與了20 個左右機器學習求職者的技術面試。其中有在讀的研究生(實習生崗位),也有已經工作了多年或者學術背景深厚的名校博士(相對高級的“科學家”崗位)。

不談具體崗位的前提下,我想回答以下幾個問題: 1.為什麼要避免學科性的偏見2. 如何測試面試者的知識廣度3. 怎樣測試面試者的知識深度4. 為何需要確認基本的編程和數據分析能力5. 怎麼提高機器學習面試成功率

1. 避免學科間的偏見與歧視

機器學習作為一個交叉廣度大,各學科融合深的學科,各種背景的面試者都有。我建議一定不要預設立場,無論是數學、統計、物理、計算機,或是其他學科的面試者都有獨特的知識儲備。比如機器學習其實和統計學習有很大部分是重疊的,甚至和優化(如運籌學)、數學(線代等)也有很多相關的地方。而不同領域的人對於同一件事情的描述可能是相似但不相同的,甚至連叫法都不同。舉個簡單的例子,統計學將變量叫做predictors而機器學習傾向於將其叫做feature(特徵)。我聽說過很多面試官就因為對方不能完全的使用他能聽懂的術語就拒掉了候選人,我覺得這個是愚蠢的

以我們團隊為例,我的老闆是統計學博士和教授(偏計量),而我是純粹的計算機科學出身。他喜歡用R 來建模而我只擅長Python 和C++。但正是這種差異性讓我們可以更好的合作,他在無監督學習中很喜歡用各種密度分析(density estimation)或者對分佈直接進行擬合,而我可以給他介紹很多機器學習方向比較流行的算法,比如Isolation Forests。同理,Python 和R 都有各自擅長的領域,比如Python 做時序分析的難度就遠遠大於R,因為R 有非常成熟的package。

因此,我們不要因為領域不同,叫法不同,編程語言不同,或者模型的解釋思路不同就輕易的否定一個面試者。長此以往,我們的思路會越來越窄,而一定程度的包容能拓展思路。

2. 通過廣度測試劃定面試者的知識面

機器學習的項目一般都牽扯數據處理,建模,評估,可視化,和部署上線等一系列流程我們希望面試者對於每個步驟都有最基本的了解因為其範圍很廣,我們希望首先在短時間內了解一個面試者的知識範圍。有很多基本但經典的問題可以用於了解面試者的素質,給出一些例子:

  • 數據處理:如何處理缺失數據(missing value)? 各種處理方法有什麼利弊?
  • 數據處理:如何將描述變量(categorical variables)轉為連續變量(continuous variables)?
    • 如何處理有序變量?
    • 如何處理無序變量?
  • 數據處理:如何進行選擇特徵選擇?如何進行數據壓縮?
    • 特徵選擇:包裹式,過濾式,嵌入式
    • 數據壓縮:主成分分析,自編碼等
  • 模型解釋: 試解釋什麼是欠擬合與過擬合?如何應對這兩種情況?
  • 模型解釋: 什麼是偏差與方差分解(Bias Variance Decomposition)?與欠擬合和過擬合有什麼聯繫?
  • 評估模型一般有什麼手段?
    • 分類模型評估方法?
    • 回歸問題評估方法?
    • 數據不均衡的評估方法?
  • 深度學習是否比其他學習模型都好?為什麼?

以如何處理缺失數據為例,可能的回答有:1. 分析缺失比例決定是否移除2. 用均值,眾數,回歸代替3. 用0 代替等。比如深度學習是否比別的模型好,我們就期待面試者能說“分情況討論”,若是能提到“沒有免費的午餐定理”更是加分。在這個階段,我們不會深入追問,僅想對面試人的知識範圍有一個了解。

這類問題的共性就是無論你是在校學生還是資深科學家都應該有一個基本的水准在,不過沒有必要百分之百的回答正確,因為本身很多答案都沒有標準答案。大部分時候,這個環節我們對於是否錄用這個人就已經有了答案。如果面試者答錯或者不知道其中百分之八十的概念,錄取的概率就很低了。

3. 根據崗位和求職者背景進行深入挖掘

在經過上一階段以後,我們已經對求職者的素養有了大概的判斷,下一步就需要進行深入了解,一般根據兩點進行追問:

  • 面試者的背景 :如果有與崗位特別相關的工作經歷,會深入詢問。如果有高引用了的文章,也會讓他講一下他的研究。
  • 所面試的崗位 :如果沒有與崗位特別相關的經歷,會根據崗位需求進行詢問。

進入這個環節其實就已經沒有模板了。假設我們現在要為保險公司招聘一個機器學習工程師來自動化”騙保檢測”,我們的求職者是一位計算機系剛畢業的碩士生。那我們可能深入詢問的話題包括:

  • 在只有少量的有標籤數據的情況下,如何構建一個反保險欺詐系統?
  • 如果面試者回答先用監督學習來做,那麼我們可能問:
    • 這種情況下數據是不均衡的,你是採用過採樣還是欠採樣?如何調整代價函數和閾值?
    • 有些人可能會提到使用One-class SVM?那麼我們可能會追問一下SVM 相關的問題,比如什麼是最大間隔分類器啊什麼是Kernel,如何選擇Kernel 等。
  • 如果面試者回答用無監督學習,那我們可能會問:
    • 為什麼K-Means 不適合異常值檢測?K-Means 和GMM 是什麼關係?是否可以用FMM 來直接擬合異常值。
    • 如何可以得到無監督學習中的分類規則?

這一類問題的特點是隨機應變,一般都是在一個方向上深入。比如其他答案提到的L1和L2正則化,我們可能希望面試者在白板上畫圖介紹為什麼L1可以得到稀疏解,以及和嵌入式特徵選擇有什麼聯繫。這一類問題我們不期待求職者完全答對或者講得清楚無誤,我們同時也想觀察其在壓力和追問下的心理素質因為整個過程中肯定會有一些知識盲點,我們會盡量避免尷尬的氣氛,所以作為求職者不必過分緊張。同時,通過和麵試者一起了解他/她曾做過的項目,可以看出其對於這個專業的興趣—興趣是很難演出來的。

在這個環節,如果一個面試者可以有能力進入深入交談,甚至提到一些我們從來沒想過的思路,都是加分的表現。

4. 基本的編程能力和數據挖掘能力

機器學習崗位,不管你是統計出身還是計算機出身,都避不開建模的過程,因此基本的編程能力是必須的。一般對於數學或者統計學出身的面試者,我們會額外給出一個簡單的小程序測試。這種小程序可能簡單如將讀取數據後並保存為矩陣。這倒不是因為我們喜歡沒事找事,而是因為機器學習太容易成為紙上談兵,而從業者缺乏最基本的編程能力。

相似的,我們也希望面試者談談從模型中可以得到什麼結論。我們曾把Kaggle 上泰坦尼克的那個數據集處理過以後,讓面試者談談倖存率到底和什麼有關,如何分析。同樣的,我們不追求完美答案,只是希望看到求職者可以解釋一些簡單的模型結果,從中攫取商業價值。

5. 讓面試者有所收穫& 如何準備機器學習面試

面試不該是一場單純的考試,在參加面試的過程中,也是一個學習過程。拋磚引玉,對於機器學習的崗位面試我有幾點小建議:

5.1.根據崗位,準備一份項目策劃書

這個乍聽下來有點虛,但我曾無數次使用這個小技巧得到良好的面試反饋和機會。假設你今天面試的崗位是我提到的保險公司的反詐騙組,那麼如果你可以寫一個如何使用機器學習進行反詐騙的項目策劃書。這個過程對於面試者也是一個練習: a. 閱讀論文和新聞收集材料的能力b. 總結分析的能力c. 總結的能力。

以我曾經面試過的一個人力資源相關的崗位為例,我準備了一份如何用機器學習來進行員工離職預測的策劃書(中間省略掉了幾頁並馬賽克處理了敏感的地方):

大數據

在策劃書中,你可以分析項目需求,提出相關解法,並建議後續計劃和列出相關文獻。這樣的行為不僅可以讓雇主看到你的誠意,並看到你的的領域知識和獨立分析問題能力

在適當的時機(比如開始面試的時候或者談到崗位職責的時候),你拿出準備好的策劃書,開始談你的思路。這種做法我曾做過幾次,效果都很驚艷,因為反被動為主動,從被考察變成了講解你所了解的知識作為一個面試官,如果被面試者能做到這個程度,我會在內心對錄取他比較有信心。

5.2. 真誠並且實事求是

大家都是理工科出身,行家一出手便知有沒有。在這種技術性比較強的學科,完全沒有必要假裝自己了解一個知識點。同理心告訴我們,大部分人都有知識盲區,我們不期待完美的回答。當你真的不知道一個問題的答案時候,真誠的希望對方能講得更明白或者承認自己不太了解。

如果你假裝自己很了解一個不明白的領域,我們一般會問的更深入。你成功的引起了我的注意,那個時候就真的收不了場了。相似的,簡歷上請真的不要誇大其詞的描述自己的經歷。我見過很多人只用過Naive Bayes就在簡歷上號稱自己是機器學習專家,我現在還記得他們被面試到面紅耳赤的樣子。在這個浮躁的年代,對於高薪的機器學習崗位,希望大家都能守住最起碼的誠信底線

5.3. 確保自己對基本的概念有所了解

再一次,保證對基本知識的了解(有基本的廣度)是對面試者自己和麵試官的尊重。什麼程度就算基本了解呢?我的感受是:

  • 對基本的數據處理方法有所了解
  • 對基本的分類器模型有所了解並有所使用(調包),大概知道什麼情況使用什麼算法較好
  • 對基本的評估方法有所掌握,知道常見評估方法的優劣勢
  • 有基本的編程能力,能夠獨立的完成簡單的數據分析項目
  • 有基本的數據挖掘能力,可以對模型進行調參並歸納發現

其中每一條都說來簡單,但都是血與淚的過程,請勿操之過急。如何就能保證自己有了足夠的基礎知識呢?我覺得能基本看懂周志華老師《機器學習》的前十章,並相對熟練的使用Sklearn中基礎的API進行建模就可以了。也請勿矯枉過正,如果你面試的崗位不是理論性科學家崗位,不要和數學推導死磕。這也是為什麼我說寫一個項目策劃書很有幫助,在查閱文獻和總結的過程中,你對想要面試的領域有了更加深刻的了解,有助於提高信心和知識。

5.4. 享受面試

請不要把技術面試當做一場噩夢,或是一個難關作為一個冉冉升起的新領域,我們大家都是這麼一路摸爬滾打過來的,至少我自己是很理解這一路的不容易。

因為機器學習領域的人才稀缺,一般而言你的面試官的時間都是很寶貴的,即使你最終沒有通過面試,請抓住機會從他們身上有所學習的機會。從我的角度來看,你不僅可以藉此發現自己知識點上的缺失,也可以聽到在特定領域的流行的算法和模型,這些都是從書上很難學到的。如果你為了準備面試還閱讀了相關領域的論文和總結,那我想來面試這件事已經遠遠超過了你是否被錄取的意義。

End.

轉貼自: 36大數據


留下你的回應

以訪客張貼回應

0

在此對話中的人們

Popular Tags

Nice! thank you so much! Thank you for sharing. Your blog posts are more interesting and informative...
Love the website with such great information.
free likes
auto liker
nice thanks. y8
情緒指標介紹 在 Joomla 文章
訪客 - Mark
This type of videos gives me a lot of information as I am looking forward to it that you give me. Th...
訪客 - Sophie Miller
Je vous remercie de l'information! Je cherchais et ne pouvait pas trouver. Vous me aidé!
moneypak c...