面試官如何判斷面試者的機器學習水平?
或者,你遇到過的水平最高的機器學習面試是什麼?
不邀自來:)
首先這個問題問的很廣。做機器學習方向很多,有些公司更偏重於數據挖掘,而有些更傾向於深度學習。同理,相對應的崗位有些偏重理論也有些偏重實踐。這些因素疊加造成了機器學習相關的崗位分布廣,如數據分析師,演算法工程師,機器學習科學家等,很難一概而論。
大概從實習生的時候就開始根著老闆招聘面試機器學習方向的候選人,到現在前前後後大概也參與了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. 享受面試
請不要把技術面試當做一場噩夢,或是一個難關。作為一個冉冉升起的新領域,我們大家都是這麼一路摸爬滾打過來的,至少我自己是很理解這一路的不容易。
因為機器學習領域的人才稀缺,一般而言你的面試官的時間都是很寶貴的,即使你最終沒有通過面試,請抓住機會從他們身上有所學習的機會。從我的角度來看,你不僅可以藉此發現自己知識點上的缺失,也可以聽到在特定領域的流行的演算法和模型,這些都是從書上很難學到的。如果你為了準備面試還閱讀了相關領域的論文和總結,那我想來面試這件事已經遠遠超過了你是否被錄取的意義。
路漫漫其修遠兮,吾將上下而求索。與君共勉:)
-------------------------------------------------------------------------------------
安利一下最近的回答和文章:
1. 阿薩姆:數據科學家 (Data Scientist) 的日常工作內容包括什麼?
2. 阿薩姆:如何有效處理特徵範圍差異大且類型不一的數據?
3. 阿薩姆:反欺詐(Fraud Detection)中所用到的機器學習模型有哪些?
5. 阿薩姆:機器學習中如何做單元測試(Unit Test)來檢測模型穩定性?
談談最近校招面試的感受(作為某廠面試官),最近一周多面了20多個(視頻加現場)。
我們這個團隊以AI應用為主,又是新項目,所以校招的目標不是ML Scientist,是需要有工程實踐能力,能夠在具體相關業務中應用機器學習演算法,並能跟進較新科研成果,和專職的ML Scientist對接的類似RSDE(研發工程師,Research Software Development Engineer)這樣的角色,實際點來說就是:
- 能動手寫代碼(首先是個工程師,再者來說以現在DNN越來越複雜的情況,代碼能力不過關,很難想像具有潛力去修改優化調整這麼複雜的網路結構)
- 真的理解機器學習原理,不是在背書;
- 能跟進較新科研成果的表現就是最好在相關領域發過paper,不要求頂級會議或journal,發過就行,起碼證明你是經過這麼個流程,總結過某種想法的;
能達到這些標準的話就不錯了,然後一般分四步這麼考察:
- 背景了解
先講講最近項目,別瞎吹畫餅,就說說上一周你都每天在幹嘛。這樣一般就把很多人簡歷上牛逼哄哄的做了什麼國家部門的大數據挖掘項目啊,對啥演算法做了什麼什麼巨大的優化啊,或者做了什麼公司的某fancy project之類的簡化到可能就是手工給數據分類,或者比較不同模型(別人給的)的performance,或者好一點把CNN相關的某個現有開源代碼實現去掉某個層或者改了幾個參數在嘗試(當然不是說就不好,其實也可以),或者做A/B測試看效果。當然其實都行,不是說做哪個就比哪個差了,但是馬上就會有這人到底做了些啥的具體形象。
這一步對碩士生很管用,對phd不能這麼搞。個人對phd首先會看看他的paper,大部分時候對國內phd會發現大部分paper都是把一個東西翻來覆去到處發灌水,這沒啥,理解,主要是搞清楚他讀博期間主要在研究啥,然後會看一下summary,具體有個了解。比較有意思的是很多phd的簡歷上沒寫幾篇paper,不知道是覺得工業界求職不需要呢還是咋回事,沒寫paper的話我覺得你這phd白讀了啊。。。如果看到做的paper有意思,面試開始時個人主要去了解下對方對做應用開發為主的工作怎麼看,如果不感興趣就算了----一般來說,女生都會強調想做research,男的好一些。不過有幾次遇到一些壓根沒發什麼paper的phd學生說他們想做學術研究,尼瑪,老子當時就想你這paper比老子還少,做個毛的research啊。。。
2. 基本原理
經過上面第一步,差不多確認了兩個人可以有在一起的意願,然後就對方提到的近期工作內容中具體的一些細節讓他講一下。機器學習覆蓋面太廣,和具體業務結合也比較緊,所以盡量往自己知道的地方去靠攏。比如對方如果說主要做的是數據前期準備,就問問數據哪來的,怎麼處理的,遇到什麼問題,要不要做normalization啥的具體怎麼做的;遇到說做優化的,就問問在優化什麼東西,比如遇到過一個說在對比不同梯度下降演算法並進行優化,就叫他講講對比了哪些梯度下降演算法,然後在裡面挑一兩個讓他解釋原理,最好能畫出來推導過程。反正就是一邊聽對方講做的項目,一邊看有啥可以深挖的(自己能判斷正誤的)
遇到那種講說在優化(調參)CNN相關網路結構的比較麻煩,因為沒有對方的實際數據,並不能確定他說得對不對,他說他去掉YOLO啥的某個層就怎麼怎麼了也不好判斷,只有大概問問dropout啊maxout啊這些用沒用或者改沒改,結果如何是什麼原因,這種我個人只是用來判斷他的表達和邏輯能力。
3. Show me the code
畢竟是RSDE面試,不是Research Scientist,所以對Scientist一般會有前沿技術或者更深入的理論討論,再說也有專門做某個具體方向的同事在其他面試環節里去針對性了解。在我這裡,前面花個15-20分鐘口頭交流下理論就可以了,後面重頭戲是動手coding.
首先,既然到了這一步,說明對方是聲稱對神經網路和機器學習有實際經驗和細節理解的,那就來動手實現個基本的神經網路吧。我會給一組訓練數據,讓對方不用什麼tf/caffe/pytorch框架,就用基本的python+numpy寫一個基本的,可運行的網路實現出來。這一步足可以刷掉目前約2/3的面試人員,其中碩士生大多寫不出來,phd倒沒啥問題,但是存在實現速度的差異,有幾個雖然寫出來了,但是面試時間也到了。
我覺得比較有趣的是很多面試者聲稱熟悉各種activation function並能合理選用,口頭解釋的時候倒背如流,到了具體實現的時候大多會卡住,說不記得sigmoid的導數結果或者relu或者什麼的,不知道如果不用現成框架的話怎麼去實現導數。反覆給他們說這沒關係,重點是先搞個可以跑的網路,activation後面我們再來討論, 這幫子人就卡住了,不知道該怎麼進行-----暈,不是自稱能靈活選用么,選一個你知道怎麼求導並實現的啊。
其他問題包括壓根不知道怎麼開頭啊,有明顯眼光在看書抄(大部分是視頻面試共享桌面)寫出來的根本不是我給的數據啊,或者寫出來的思路正確但是是pseudo code啊(這種其實還可以忍受),各種問題吧。
當然好的也有,印象比較深的是一個phd寫完後直接跑我給的數據(其實是我亂寫的一堆數據,裡面有些問題),發現gradient始終為0,現場debug分析並發現問題後,自己做了一些對數據的處理通過,我覺得還是蠻不錯的,這麼短時間內相當於把特徵工程和網路實現及測試整個流程演示了一遍;另外一個acm亞洲獎牌得主10分鐘實現並搞定,這尼瑪讓老子啞口無言,搞得只好直接進入常規刷題演算法環節。
實現NN網路這步完成後看情況,有些直接實現SGD/mini batch的,就直接走後面環節了;不然的話會叫他改成mini batch形式;
4. 常規演算法
這步沒啥好說,最開始有耐心的時候,如果上面的簡單網路沒有實現,還會耐心地讓對方做個lc easy難度的題目,後來也不客氣了,上面做不出來就謝謝對方然後bye bye。如果做出來了,時間還有,會給一個lc medium難度的看看。
不要覺得lc medium簡單,現場面試沒有跑了代碼再改的機會,從實現速度到代碼清晰程度都能看出問題,不管是acm獎牌得主還是noip選手,目前還沒看到bug free寫出來的。
基本上是這麼個流程,當然不是這麼死板,裡面會根據對方的回答和代碼實現過程引很多問題出來,這個就不能一概而論了。
另外這個流程可能適合團隊人手不足沒有足夠面試人員,或者像對於校招這種面試環節不夠難以全面深入考察的情況,所以在一次面試中覆蓋內容較廣,找到對方比較適合的方向,然後根據結果讓具體負責該方向的同事再深入考察,這樣基本在兩輪之後可以有一個比較清晰的判斷。
************************************************
btw,我們也社招,歡迎有三年以上實際項目的ml專家作為lead加入,私信聯繫。
作為一名新晉菜鳥面試官,最近替部門面了3、40個人(大多來自國內top5學校,包括校招社招),小小總結下我的相人之術,希望能幫上大家
/* 先插個話,本題的答主中,有我非常膜拜的真大神,也有掉書袋的教條主義者,對後者,我有一言相勸
面試官的水平(而非面試者)決定了面試的上限,所以當面試者水平超過你時,承認被碾壓、虛心接受就好,並適時向對方學習,而不是拿那些條條框框的應試題來噁心人
*/
----------------------
面試別人時,我主要遵循『兩原則』和『三方面』
『兩原則』指:
- 絕不網上現搜應試題(一不尊重面試者,二這種題大多考察不了真水平),確保所問問題是自己認真思考過的
- 在自己能力範圍內,不停追問面試者所做的項目、所掌握的理論細節,看他掌握到什麼程度,評判他簡歷內容的真實性
『三方面』包括:
- 理論功底
- 代碼能力
- 項目能力
----------------------
把三方面展開:
- 【理論功底】主要考察對機器學習模型的理解,選擇性提問(如果遇到面試者的研究方向自己不了解但感興趣,會很欣喜,可以趁機學習一個哈哈)這塊兒的問題會比較細碎,都是我自己深入思考過的(背書是沒用的,這裡任何一個點我都可以給你展開問下去),在此全部手敲
- 過擬合欠擬合(舉幾個例子讓判斷下,順便問問交叉驗證的目的、超參數搜索方法、EarlyStopping)、L1正則和L2正則的做法、正則化背後的思想(順便問問BatchNorm、Covariance Shift)、L1正則產生稀疏解原理、邏輯回歸為何線性模型(順便問問LR如何解決低維不可分、從圖模型角度看LR和樸素貝葉斯和無監督)、幾種參數估計方法MLE/MAP/貝葉斯的聯繫和區別、簡單說下SVM的支持向量(順便問問KKT條件、為何對偶、核的通俗理解)、 GBDT隨機森林能否並行(順便問問bagging boosting)、 生成模型判別模型舉個例子、聚類方法的掌握(順便問問Kmeans的EM推導思路、譜聚類和Graph-cut的理解)、梯度下降類方法和牛頓類方法的區別(順便問問Adam、L-BFGS的思路)、半監督的思想(順便問問一些特定半監督演算法是如何利用無標籤數據的、從MAP角度看半監督)、常見的分類模型的評價指標(順便問問交叉熵、ROC如何繪製、AUC的物理含義、類別不均衡樣本)
- CNN中卷積操作和卷積核作用、maxpooling作用、卷積層與全連接層的聯繫、梯度爆炸和消失的概念(順便問問神經網路權值初始化的方法、為何能減緩梯度爆炸消失、CNN中有哪些解決辦法、LSTM如何解決的、如何梯度裁剪、dropout如何用在RNN系列網路中、dropout防止過擬合)、為何卷積可以用在圖像/語音/語句上(順便問問channel在不同類型數據源中的含義)
- 如果面試者跟我一樣做NLP、推薦系統,我會繼續追問 CRF跟邏輯回歸 最大熵模型的關係、CRF的優化方法、CRF和MRF的聯繫、HMM和CRF的關係(順便問問 樸素貝葉斯和HMM的聯繫、LSTM+CRF 用於序列標註的原理、CRF的點函數和邊函數、CRF的經驗分布)、WordEmbedding的幾種常用方法和原理(順便問問language model、perplexity評價指標、word2vec跟Glove的異同)、topic model說一說、為何CNN能用在文本分類、syntactic和semantic問題舉例、常見Sentence embedding方法、注意力機制(順便問問注意力機制的幾種不同情形、為何引入、seq2seq原理)、序列標註的評價指標、語義消歧的做法、常見的跟word有關的特徵、factorization machine、常見矩陣分解模型、如何把分類模型用於商品推薦(包括數據集劃分、模型驗證等)、序列學習、widedeep model(順便問問為何wide和deep)
- 【代碼能力】主要考察實現演算法和優化代碼的能力,我一般會先看面試者的github repo(如果簡歷給出來),看其代碼風格、架構能力(遇到大神會認真學習一個哈哈),如果沒有github,我會避免問典型的應試題,而是問一些 我本人從實際問題中抽象出的小演算法題,比如:
- 給出節點的矩陣和邊的矩陣,求路徑和最大的路徑(來源於 Viterbi 演算法,本質就是個動態規劃),至少給個思路和偽代碼(順便聊聊前向傳播和反向傳播)
- 給出一數組,數組元素是pair對兒,表示一個有向無環圖的&<父親節點, 孩子節點&>,用最優的方法,將其變成一個新的有序數組,數組元素是該有向無環圖所有節點,數組的有序性體現在:父親節點在孩子節點前面(來源於 貝葉斯網路實現時的小trick)
- 【項目能力】主要考察解決實際問題的思路、填坑能力,這部分最考驗面試官功底,要能從面試者浮誇的描述中尋找有意義的點,並一步步深挖。另外很多dirty work(數據預處理、文本清洗、調參經驗、演算法複雜度優化、Bad case分析、修改損失函數等)也是在這步深挖
最後,我會問面試者:『有沒有我剛沒問到、但你特別想分享的項目經歷』。此問題是給面試者一個展現自我的機會,同時也是挖掘出之前遺漏的問題。
以上問題能答完美的,請私信我~
我向你學習 哈哈
------------補充---------------
- 實際會根據面試者學歷、研究方向而有側重地提問,對校招生的項目考察酌情少一些
- 這些問題我雖然深入思考過,但答案未必完美,而且這些題絕不是拿來push面試者製造權威的。真正的面試官應該保持open而謙遜的姿態,樂於從面試者那裡學習新知識,互相切磋。 我個人認為,一場只有面試官輸出觀點的面試,對面試官本人來說,是 no value 的
- 歡迎就其中任何一個問題,在評論區交流~ 作為一名菜鳥面試官,我會push自己努力提高姿勢水平
保研面試(不是求職)的英語測試部分
一個小時的時間,給一篇10頁左右的會議論文
一支筆一張紙,可以做筆記,可以查字典
一個小時之後,把論文描述的模型用中文完整講出來
然後老師會問很多細節的問題,比如某個正則化項為什麼能起作用,這篇文章用的negative sampling和skip gram模型用的negative sampling有什麼區別,recurrent connection在模型中是怎麼提現出來的,解釋loss函數為什麼長這個模樣
感覺比常規面試都難…
幾個必問的問題,
1問一些面試官和面試者都熟悉的問題,把握一下面試者的深度
2問一些面試官熟悉,而面試者不熟悉的問題,考察一下應變和理解力
3 問一個面試官不熟悉,而面試者熟悉的問題,考查一下表達
4 問個過往項目,有什麼地方可以優化。考查一下迭代意識
5 給一個公司現有項目問題,看看解決實際問題能力
機器學習技術日新月異,面試者的技能儲備和公司需要嚴絲合縫的匹配,其實很難。核心能力不錯的話,其實已經可以了!也看要做什麼吧,如果是工程的就問問工程經驗,各種程序跑沒跑過,經驗如何。如果是學術就問問理論之類的,能不能理清楚邏輯。
灣區某司員工,我們組在招 ML Engineer/Data Scientist,所以近幾周面了不少人,有電面有onsite,講一下個人經驗。
首先我很佩服高票回答能在面試中問那麼細的,就我的經驗而言,電面或onsite一場無非一個小時左右,對於單個面試官來說,能對面試者機器學習方面的基礎知識和數理、編程基礎有些了解就很不錯了。由於面試流程所限,在我司根本不可能有讓人花大半個小時悶頭實現個神經網路。
因為我們組偏重應用,做機器學習的目的都是為了解決實際問題,所以招人時對機器學習知識和工程能力都有要求。基本上每個人都要有能力做到:建模、跑實驗、作分析、清理大量數據(TB級以上)、實現並部署模型到生產環境。所以我下面描述的面試內容並不僅限於機器學習。
一般來說面試流程是這樣的:
基本有兩類面試情形:
情形A: 偏重機器學習基礎、數理知識,及利用機器學習解決問題的能力
單場面試:
- 問一下做過的項目,挑一個最有意思的詳細問
- 問一道涉及機器學習簡單數學推導的題,一般是概率或者優化之類,然後要求寫代碼實現
- 給一個實際的應用場景,要求面試者設計基於機器學習解決方案:從用什麼模型,用什麼特徵到怎麼部署到生產環境,什麼都可以問。一般題目都是簡化自我們工作中實際遇到過的問題。
情形B: 偏重演算法數據結構、大數據處理、機器學習系統實現等
單場面試:
- 問一道一般的演算法題,不至於太難,一般用來測試面試者對常用的數據結構是否熟悉,工程能力是否紮實,寫代碼時思維溝通是否清晰,還有代碼風格之類
- 問一道涉及MapReduce的題,當然不會是最簡單的那種word count,一般也是需要一定思考的。
- 問一些關於機器學習系統的題,比如分散式演算法,比如在線學習的系統如何設計等等。
2017.10.9跟新
從DeepLearning Weekly中發現了Data Science Central這個非常棒的網址。
在搜索欄里搜索:interview questions
隨便點開哪個都可以作為在準備面試的過程中的自測題~
對於我這樣的小白,這些問題夠我喝一壺了....
面試官如何判斷.....
這還得看是哪裡的面試官....
記得前不久對面實驗室一位師兄去阿里面試,直接先讓他推導BP演算法公式,除此之外貌似還有其他幾個演算法的公式....所以這段時間可以發現對面實驗室怎麼多了一個埋頭苦讀奮筆疾書的人,猛地一看,原來捧著西瓜書在推導公式呢
跑題回答一下自己開始學習的過程,由於導師年齡偏大基本已經不接項目,所以本人從研一開始就搜羅了大量PACKT、O『Reilly和Springer出版社出版的關於機器/深度學習的原版書(好幾本是17年新出的)並挑選著閱讀。相比國內的教材,國外的教材風趣,生動,仔細,逼格高(和國內那種東拼西湊的三腳貓功夫教材相比)....說不定看著看著六級就過了....
看了下上面幾位答主提到的面試問題,基本上書本作者也都會提到。
截個圖:
關於機器學習的國外教材:
關於深度學習的國外教材:
上面的教材除了個別之外基本上都有源代碼可以下載~如果要資源可以私,看完也可以一起交流閱讀心得~(除了上面貼出來的應用性教材之外還包括了其他理論性的。不過我只下載了部分電子書的源代碼,我自己是看幾本下幾本,但是基本上每本書的開頭幾頁作者一般都會給出類似於下面截圖示例代碼的github鏈接的,如果沒耐心的話可以直接搜索關鍵字搜~)
關於深度學習的教材,上述兩個出版社裡,還有幾本18年才出,流口水坐等,特別是醫學圖像處理方向的!(不過後來仔細一看貌似是本論文集....)
評論里有知友提到那本DL花書。我其實看了一半多一點,後來就放棄了...因為實在有點枯燥...不過如果想要紮實的理論基礎,最好是好好讀一遍(不過說實話我自己只看一遍的書,過幾個月再拿起來看又像看新書一樣了_(|3」∠)_所以書讀百遍其義自見不是沒有道理的)
另外推薦一個外文教材下載網站(幾乎包括了CS所有領域,並且幾乎每天更新,各種語言的程序員必備~):
finelybook
打好基礎(原理公式,代碼)才是硬道理吧。
面試好像捕魚,趁著還沒出海先好好織一張密密的、結實的漁網,因為不知道到時候哪個網眼會懟到魚~
謝邀。相信很多人在機器學習崗位或演算法崗位面試中遇到的最多的面試問題就是SVM和邏輯回歸。作為機器學習中比較基本的演算法,面試官可以從面試者對這兩種演算法的掌握情況來判斷基本功,比如SVM的核心思想,邏輯回歸的推導,邏輯回歸和線性回歸的本質區別(阿里校招曾被問過),至少你的回答要沾邊,最好的回答就是回歸本質,而不是談封裝以外的內容。
至於深度學習,我覺得可以從以下幾個方面來考察:1、讓對方介紹自己最擅長的演算法,看看了解程度,核心思想是基本,另外實現過的演算法如果連一些細節都模稜兩可的話那就說不過去了。2、問問最近幾個月在看相關的演算法或了解國際上相關領域的進展情況,當然最好面試官在這方面也比較熟悉,否則容易被忽悠。作為演算法人才,一定是不斷學習的,而且各領域的演算法迭代速度非常快,如果你還停留在一年或兩年前的知識,那就要反思下了。3、問一些本源的東西,以CNN舉例,說說卷積層,池化層,全連接層,損失層具體公式,作用,以及為什麼可以有這樣的作用,聊聊梯度怎麼計算的,怎麼傳遞的,梯度消失或者爆炸時候要怎麼解決等等。因為現在深度學習框架很多,跑個模型或者demo非常簡單,看個論文讀懂核心思想也不算太難,但是如果能對深度學習本源的知識了解清楚,對於今後改進演算法是很有幫助的。4、工程實現能力。github的資源非常豐富,很多論文的作者都會開放自己的代碼,如果你連人家開源的代碼都跑不起來就說不過去了,其次是你能在這基礎上做修改,用到你的項目中,提升效益。
總之,機器學習入門很簡單,但是深入還是需要時間,因此面試官在面試中可以通過問面試者一些深入的、核心的、本源的問題,就能知道面試者的水平了。
當時被面機器學習內容的時候,基本是被不停追問為什麼。。。舉個例子,問L1範數的含義,然後問為什麼L1可以防止過擬合,然後答了模型複雜度低,然後問為什麼模型複雜度可以防止過擬合,答了奧卡姆剃刀原理,然後又問了L1為什麼就可以使模型複雜度低,然後答了這其實是一個特徵選擇,用了更少特徵。。。不過貌似面試官對於這個不是特別滿意,然後類似的還問了卷及神經網原理什麼的。。。反正就是一直問為什麼,一直問到不知道為什麼為止。。。好在最後還是過了。。。我經歷的一次面試就是這樣的。。。一點經驗分享下吧
面過五六次、面試官最喜歡的就是SVM....
總結經驗:如果面試官讓你拿一個機器學習演算法講講,除非你SVM上上下下都了解透了,千萬不要說SVM據師兄師姐的面試經驗
面試:推導演算法(最經典常用的演算法,也會是你簡歷裡面寫的你掌握的演算法,所以如果不是太熟不要隨便給自己立flag),然後問你一些比較常見問題的解決辦法(需要儘可能多的提出解決辦法);還有場景模擬,就是給你提出一個接近現實的問題,問你如何解決,比如如何判斷信用卡盜刷。
筆試:筆試大多是讓你寫一些數據結構的東西,寫個排序什麼的,不是寫出來就可以,還要考慮複雜度。可能是面試的公司不是太頂尖,很少遇到讓你直接寫機器學習演算法的。
筆試還有其他的,比如最基本的數學。
面試一大通,到了後來只用上了顏色checksum?還是不要枚舉太多了呵呵,。
編程水平直接考刷題就好了。機器學習水平問open question即可,問不出來的都是面試官水平不行
我把題目看成了用機器學習考察面試者能力。
?(〃』ω』〃)?
作為一隻常常和機器學習演算法工程師一起次飯飯的產品狗
飯友1:XX大數據比賽複賽第一啦
飯友2:自稱research 歧視碼農 名校研究生 paper發的多…(模型不收斂會內心波動)
飯友3:大三去桔廠實習演算法工程師…因為gap一年最後和我一年畢業啦
……
所以比賽經歷和工程實踐經驗可以體現這個人的機器學習水平
有時候吃飯也能體現吧 (純屬胡鬧…求輕拍)
推薦閱讀:
※貝葉斯學派與頻率學派有何不同?
※強大數定律和弱大數定律的本質區別?
※導演風格是什麼?一個導演的風格是如何形成的?
※點估計、區間估計、中心極限定理之間的聯繫?
※HMM 實際應用過程中,如何確定隱含狀態數量?