一、面試要注意什么問題??
找到一份理想的工作是大學畢業生們最大的心愿,而進入那些知名的大企業更是廣大畢業生的夢想。如何應付這些企業的面試成為了畢業生們最為關注的話題。
這些名企的面試往往有一定的程序,絕非草草而就。因此,一定要有所準備才能“百戰不殆”。而要在面試前得到有關信息,常常采用的有這樣幾個方法:1.充分利用人際關系,與近年進入該企業工作的師兄師姐溝通,以預測面試題目的方向;2.查詢該企業的資料,深入了解該企業的企業文化特點,聯系當前情況,自己預測考題;3.利用網絡資源,登錄該企業網站,查詢相關信息及面試題目。從目前的情況來看,最普遍也最為有效的方式,仍然是向往屆畢業生咨詢相關信息。
面試題往往與各公司的企業文化和重點關注的東西有密切的關系,我們可以做出如下總結:
忠誠度:面臨跳槽,企業往往會看重應聘學生對忠誠度的看法。尤其是一些國有大型企業,更為重視員工的忠誠度。在近日康佳集團的招聘中,面試官就提出了“請分析職業技能和忠誠度哪個對企業更重要”的問題。
實踐能力:在注重學生學習成績的同時,相當多的企業非常重視應聘者的實踐經歷。例如通用電氣(中國)有限公司(GE)就表示他們要招聘的絕不是簡單的“學習機器”,在校期間實習、兼職、家教的經驗都是積累社會經驗的好機會,這都應該受到企業的重視。
團隊協作精神:經營規模宏大的名企往往非常重視員工的團隊協作精神。例如聯想集團人力資源部的有關負責人就表示,該公司尤其歡迎具有團隊協作精神的應聘者。
二、從小白到機器學習算法工程師,我做了哪些準備
機器學習方面的面試主要分成三個部分: 1. 算法和理論基礎 2. 工程實現能力與編碼水平 3. 業務理解和思考深度 1. 理論方面,我推薦最經典的一本書《統計學習方法》,這書可能不是最全的,但是講得最精髓,薄薄一本,適合面試前突擊準備。 我認為一些要點是: 統計學習的核心步驟:模型、策略、算法,你應當對logistic、SVM、決策樹、KNN及各種聚類方法有深刻的理解。能夠隨手寫出這些算法的核心遞歸步的偽代碼以及他們優化的函數表達式和對偶問題形式。 非統計學習我不太懂,做過復雜網絡,但是這個比較深,面試可能很難考到。 數學知識方面,你應當深刻理解矩陣的各種變換,尤其是特征值相關的知識。 算法方面:你應當深刻理解常用的優化方法:梯度下降、牛頓法、各種隨機搜索算法(基因、蟻群等等),深刻理解的意思是你要知道梯度下降是用平面來逼近局部,牛頓法是用曲面逼近局部等等。 2. 工程實現能力與編碼水平 機器學習從工程實現一般來講都是某種數據結構上的搜索問題。 你應當深刻理解在1中列出的各種算法對應應該采用的數據結構和對應的搜索方法。比如KNN對應的KD樹、如何給圖結構設計數據結構?如何將算法map-red化等等。 一般來說要么你會寫C,而且會用MPI,要么你懂Hadoop,工程上基本都是在這兩個平臺實現。實在不濟你也學個python吧。 3. 非常令人失望地告訴你盡管機器學習主要會考察1和2 但是實際工作中,算法的先進性對真正業務結果的影響,大概不到30%。當然算法必須要足夠快,離線算法最好能在4小時內完成,實時算法我沒搞過,要求大概更高。 機器學習大多數場景是搜索、廣告、垃圾過濾、安全、推薦系統等等。對業務有深刻的理解對你做出來的系統的結果影響超過70%。這里你沒做過實際的項目,是完全不可能有任何體會的,我做過一個推薦系統,沒有什么算法上的高大上的改進,主要是業務邏輯的創新,直接就提高了很明顯的一個CTR(具體數目不太方便透露,總之很明顯就是了)。如果你做過實際的項目,一定要主動說出來,主動讓面試官知道,這才是最大最大的加分項目。 最后舉個例子,阿里內部機器學習挑戰賽,無數碾壓答主10000倍的大神參賽。最后冠軍沒有用任何高大上的算法而是基于對數據和業務的深刻理解和極其細致的特征調優利用非常基本的一個算法奪冠。所以啥都不如真正的實操擼幾個生產項目啊。
三、如果你是面試官,你怎么去判斷一個面試者的深度學習水
作為面試官判斷一個面試者的深度學習水平的方法:
1. 在使用一種方法(無論是深度學習或是“傳統”方法)的時候,面試者對它的優點和局限性是否都有所認識。在面對不同的問題的時候,我們希望面試者可以通過獨立思考做出一個informed choice,而不是因為“上周看了一篇paper是這樣做的”或者“BAT/FLAG就是這樣做的”。
2. 面試者是否有完整的機器學習項目經驗。這意味著從理解需求開始,到收集數據、分析數據,確定學習目標,選擇算法、實現、測試并且改進的完整流程。因為我們希望面試者對于機器學習在實際業務中所帶來的影響有正確的判斷能力。當然,如果是可以通過python/或是結合Java/Scala來完成所有這些事情就更好啦。
3. 面試者是否具備基本的概率/統計/線性代數的知識——數學期望,CLT,Markov Chain,normal/student’s t distribution(只是一些例子),或是PCA/SVD這些很基礎的東西。另外(最理想的),希望面試者對于高維空間的一些特性有直覺上的認識。這部分并不是強行要求背公式,只要有理解就可以。畢竟這不是在面試數學系的教職——我們只是希望面試者可以較好地理解論文中的算法,并且正確地實現,最好可以做出改進;另外,在深度學習的調參過程中,比較好的數學sense會有助于理解不同的超參數對于結果的影響。
4. 面試者是否有比較好的編程能力,代碼習慣和對計算效率的分析能力。
5. 面試者在機器學習方面,對基本的概念是否有所了解(譬如說,線性回歸對于數據的假設是怎樣的),以及對于常見的問題有一定的診斷能力(如果訓練集的正確率一直上不去,可能會出現哪些問題——在這里,我們希望面試者能夠就實際情況,做一些合理的假設,然后將主要的思考邏輯描述清楚)。我們會根據面試者所掌握的方法再比較深入地問一些問題,而且我們希望面試者不僅僅是背了一些公式或算法,或是在博客或知乎上看到了一些名詞(比如VC維度,KKT條件,KL divergence),實際上卻不理解背后的理論基礎(有時候這些問題確實很難,但“知道自己不知道”和“不知道自己不知道”是差別很大的)。打個比方,如果面試者提到核技巧,那么給到一個實際的線性不可分的數據(譬如XOR,或者Swiss Roll),面試者能清楚地設計,并通過實際計算證明某個kernel可以將此數據轉化到一個高維并線性可分的空間嗎?
6. 在深度學習方面,我們希望面試者具備神經網絡的基礎知識(BP),以及常見的目標函數,激活函數和優化算法。在此基礎上,對于常見的CNN/RNN網絡,我們當然希望面試者能夠理解它們各自的參數代表什么,比較好的初始參數,BP的計算,以及常見超參數的調整策略——這些相信Ian Goodfellow的Deep Learning一書都有非常好的介紹——我們也希望面試者能夠在具體領域有利用流行框架(可能是tensorflow——但是這并不是必須的)搭建實際應用的經驗。當然,我們希望面試者讀過本領域的paper,并且手動驗證過他們的想法,并且可以對他們方法的優缺點進行分析。當然,如果面試者有更多興趣,我們可以探討更深入的一些問題,比如如何避免陷入鞍點,比如通過引入隨機噪音來避免過擬合,比如CNN的參數壓縮,比如RNN對于動力系統的建模,比如基于信息理論的模型解釋,等等等等,在這些方面,我們是抱著與面試者互相切磋的心態的。
7. 通常上面我們說的都是監督學習,往往結果是回歸或分類。當然,也許面試者還精通RL/transfer learning/unsupervised learning這些內容,那么我們可以逐一討論。
此外,如果面試者應聘的是某一個特定領域的職位,那么當然地,我們會希望他同時具備很強的領域知識,這里就不展開說明了。
在很短的時間內想要全面地了解一個人確實非常困難。調查顯示,往往面試官自以為很準的“感覺”,其實是一個糟糕的performance predictor。我希望可以結合相對客觀的基礎問題,以及面試者自身的特長,來對面試者的理論和實戰能力做一個判斷。基礎扎實,有實戰經驗并且有一技之長的面試者通常會是非常理想的候選人。