演算法工程師必須要知道的面試技能雷達圖

AI科技大本營發表於2019-01-23

640?wx_fmt=jpeg


本文作者王喆,矽谷高階機器學習工程師。

轉載自知乎專欄:

https://zhuanlan.zhihu.com/p/52169807


這裡是 王喆的機器學習筆記 的第五篇文章,今天我們不聊paper,換一個輕鬆一點的話題,聊一聊如何準備演算法工程師的面試。

今年是我作為演算法工程師工作的第七個年頭,期間拿到過hulu,阿里巴巴,騰訊,美團以及一些startup的演算法工程師offer,也作為面試官面試過清北、海外、北郵以及一些二本學校等不同背景的百餘位candidates,作為面試者和麵試官的經驗還比較豐富。所以希望自己的經驗能對你有所幫助,也非常歡迎其他面試官能夠多留言探討自己的面試經驗。

那我們直入主題,到底什麼技能才是一名合格的演算法工程師應該具備的技能呢面試官又會如何驗證你的這些技能呢

雖然每個一個崗位都有JD,但拋開具體的崗位要求,從稍高的角度角度看待這個問題,一名演算法工程師的技術素質基本可以拆解成下面四個方面:知識、工具、邏輯、業務。當然廣義來講,這四項素質也適用於所有IT工程師。

我非常喜歡用雷達圖來表示一個人的能力範圍,可能小時候看聖鬥士看多了,當時研究官方出的黃金聖鬥士能力雷達圖研究了半天,現在也沒好到哪去,只不過變成了喜歡研究候選人的能力雷達圖了。下面畫出了大資料行業幾個相關職位的能力雷達圖,大家可以初步體會一下。

640?wx_fmt=jpeg

不同崗位的技能雷達圖

簡單來說,任何工程師都應該滿足四項技能的最小要求,比如我曾經面試過一位計算廣告演算法工程師candidate,這位同學發過一些計算廣告相關的paper和專利,從research的角度是不錯的人選,但當我想稍微驗證一下他coding的能力時,他明確告訴我說他不願意寫程式碼。這就是不滿足“工具”這項技能的最小要求,自然是不能通過面試的。

在最小要求的基礎上,演算法工程師的能力要求是相對全面的。其實所謂演算法工程師,就是因為你不僅應該是一位合格的“工程師”,還應該再次基礎上有演算法的改進和實現的能力。除此之外,大資料工程師更注重大資料工具和平臺的改進,研究員則在知識和邏輯層面相對突出。有些臨時抱佛腳的同學喜歡惡補知識,不注重理解業務和模型本身的內在邏輯,是我經常見到的面試“悲劇”情況。

當然,只用四個詞描述四個方面的能力還是過於形而上了,這裡我們用一些具體的內容來描述一下演算法工程師的四個技能點:

  • 知識:主要是指你對machine learning相關知識和理論的儲備

  • 工具:將你的machine learning知識應用於實際業務的工具

  • 邏輯:你的舉一反三的能力,你解決問題的條理性,你發散思維的能力,你的聰明程度

  • 業務:深入理解所在行業的商業模式,從業務中發現motivation並進而改進模型演算法的能力

也許還不夠具體,那我們再從一個實際例子中體會一下,比如我去面試“計算廣告演算法工程師”的職位,上面四項對應著哪些具體的能力呢?

  • 知識:主流CTR模型以及預算控制,流量預估,bidding策略等模型演算法的原理和技術細節

  • 工具:coding能力,spark、flink、tensorflow、ps-lite等模型訓練、serving相關工具

  • 邏輯:演算法題,模型之間的演化關係

  • 業務:展示廣告和搜尋廣告在構建模型時的區別聯絡,如何根據公司的business model制定模型的objective

當然,上面只是讓大家體會一下什麼是這四項素質,真實的計算廣告演算法工程師面試中,你不一定要都掌握,也不一定侷限於這些內容。如果你遇到一位資深的面試官,他不會預設一個框架往面試者身上套,而會從面試者簡歷出發檢驗面試者能不能達到這四項素質的標準。

那麼問題又來了,面試官會如何在"限定的時間內"檢驗你這四項素質能不能達到"技術合格"的標準呢

既然是限定的時間,面試官就不可能拿出一本西瓜書,從頭問到尾,也不可能拿出一本葫蘆書,從100道面試題中抽出50道給你來個馬拉松問答。面試官要做的是在1個小時的時間內確認你能力的"深度"和"廣度"。 所以在這裡面試官就像一個取樣演算法,要從你腦子裡採幾個點,把你的能力雷達圖描繪出來。

重點再重複一邊,面試官會從“深度”和“廣度”兩個維度構建你的能力雷達圖

對於"深度"方面,有經驗的面試官會從你已經做過的專案中挑出你最擅長的部分做層次式的遞進。比如我在之前的回答(如何準備機器學習工程師的面試 ?)中舉過的例子,

一位面試同學介紹自己實習時候用過XGBoost預測股票漲跌,那面試官可能會由淺入深依次考察下列問題:

  • GBDT的原理(知識

  • 決策樹節點分裂時是如何選擇特徵的?(知識

  • 寫出Gini Index和Information Gain的公式並舉例說明(知識

  • 分類樹和迴歸樹的區別是什麼?(知識

  • 與Random Forest作比較,並以此介紹什麼是模型的Bias和Variance(知識

  • XGBoost的引數調優有哪些經驗(工具

  • XGBoost的正則化是如何實現的(工具

  • XGBoost的並行化部分是如何實現的(工具

  • 為什麼預測股票漲跌一般都會出現嚴重的過擬合現象(業務

  • 如果選用一種其他的模型替代XGBoost或者改進XGBoost你會怎麼做,為什麼?(業務+邏輯+知識

這是一條由簡歷出發,由“知識”為切入點,不僅考察了“知識”的深度,而且還考察了“工具”、“業務”、“邏輯”深度的面試路徑。

當然,如果你介紹的專案是實現了一種類似阿里DIN的CTR預估模型。那麼問題路徑可能是這樣的:

  • softmax函式的定義是什麼?(知識

  • 神經網路為什麼會產生梯度消失現象?(知識

  • 常見的啟用函式有哪些?都有什麼特點?(知識

  • 挑一種啟用函式推導梯度下降的過程。(知識+邏輯

  • Attention機制什麼?(知識

  • 阿里是如何將attention機制引入推薦模型的?(知識+業務

  • DIN是基於什麼業務邏輯引入attention機制的?(業務

  • DIN中將使用者和商品進行了embedding,請講清楚兩項你知道的embedding方法。(知識

  • 你如何serving類似DIN這樣的深度學習模型(工具+業務)

這條路徑側重於考查“知識”深度的路徑。為了彌補其他方向考察的不足,面試官肯定還會問一個從工具或者業務出發的問題來確定你其他方面的深度。

因為面試官選擇的是你最熟悉的領域深入下去,我們可以假設,如果一位面試者在最擅長的專案中都答不上一些細節性的問題,那幾乎可以肯定你在任何其他領域的鑽研都不夠深入,你的技能雷達圖的面積肯定是一個很小的面積。也有像我之前所提到的一些臨時抱佛腳的面試者,也許知識方面達到了要求,但經不起面試官對“工具”和“邏輯”的考察,這也毫無疑問會“悲劇”。

如果面試者的能力深度達到了最低的要求,下一步面試官會確定你能力的廣度,對於任何演算法工程師,我都會隨機check以下幾個知識點:

  • NN,RNN,個別聚類演算法,模型評估等知識的理解程度

  • spark的調優經驗,model serving的主要方法,parameter server的原理

  • GAN,LSTM,online learning的基本理解

  • embedding方法,attention機制,multi task,reinforcement learning,online learning的基本理解

對於廣度的檢查是比較隨意的,個別答不上來無傷大雅,但如果超過一半以上的知識點都miss了,可能有點說不過去。因為我要知道你是一個關注前沿,喜歡學習的人,試想除了你自己做過的專案,其他知識了了,那我可以肯定你不是一個對技術有熱情的人。很多面試官很看重“熱情”這個屬性,因為正是對技術的熱情支撐你今後的學習,有些問題你可能不知道,你也要儘量用自己的理解去推導,去討論。

好了,關於演算法工程師面試中的能力雷達圖講完了,如果你嫌我太囉嗦,沒關係,甩給你一張思維框圖,你發給任何沒看過這篇文章的人,也都會對我說的內容一目瞭然。

640?wx_fmt=jpeg

俗話說,面試是一門玄學,這句話有沒有道理?面試到底“玄”在哪裡?為什麼“強”如作者(臉皮太厚了。。)參加了10餘場大中小公司面試,也有兩場沒拿到offer,原因是什麼,是因為玄學嗎?

北京的這個冬天有點“冷”,在文章結束之前給身在寒冬的同學幾點建議:

  1. 寒冬就應該廣積糧,緩稱王,猛攻自己的技能弱點,讓自己更有實力迎接春天;

  2. 中高階職位永遠不缺,真正合格的演算法工程師永遠是稀有物種,努力做金字塔中上部的那塊磚;

  3. 好的offer永遠是為平時注重積累的人準備的,突擊準備也許會增加你的知識廣度,但增加各方面技能的深度需要你無時無刻的積累和鑽研,遇到問題多問為什麼,多注重問題的細節。

好了,這裡是王喆的機器學習筆記的第五篇文章,水平有限,特別是關於面試的內容仁者見仁,歡迎有建議的同學批評、吐槽、指正,也歡迎覺得內容有幫助的同學點贊鼓勵。

(本文為 AI科技大本營轉載文章,轉載請微信聯絡原作者。)

徵稿

640?wx_fmt=png

推薦閱讀


640?wx_fmt=png

相關文章