如果你是面試官,你怎麼去判斷一個面試者的深度學習水平?

本題已加入知乎圓桌 ?「機器學習 · 學以致用」,更多「機器學習」相關話題討論歡迎關注。

本人對深度學習也有過一定的積累,大部分主流的深度模型基本都能實現,然而依然感覺實際上應用起來困難重重,首先是硬體問題,比如cnn,如果層數比較多,數據量比較大,通常單機比較吃力,另外則是調參問題,是否有比較好的調參策略可供參考,還有就是深度學習似乎有很多小的trick,包括數據增強,初始權重的設置,優化方法的多樣性,dropout,drop-connect,batch-normalization等regularize的方法,以及transfer-learning這樣的避免從頭訓練而根據特定任務改變top-layer,然後做fine-tuning的方式,以及其他種種大牛們自己獨有的不傳之秘,雖然cnn有一定的理論基礎(信號濾波,神經科學),似乎讓人感覺這是一項具有高度試驗性的科學,所以評價一個人深度學習的水平,是否可以說在理論方面很難設定標準,而只能看其在實際應用上對於模型運用的效果或者運用模型解決實際問題的創造力?


看了那麼多回答,我自己都答不上來。但,那並不代表深度學習學的不深,只是深度學習也很大啊。 Deep Reinforcement Learning,Meta Learning, Imitation Learning, robot learning。估計這些現在沒幾個面試官懂吧。是不是應該讓你推一推A3C,DQN,DDPG,TRPO,PPO呢?或者直接問請說說AlphaGo的整個演算法實現??

大家往往覺得拷問某些基礎,細節可以反映深度學習的水平,但我覺得深度學習那麼大,方向那麼多,有些細節對你很重要,有些則不是。研究視覺的不見得要懂NLP是不是。懂一些當然好,但是沒有實踐其實也沒有用。

在我眼裡,判斷一個人深度學習水平最直接的體現就是看他做過的項目,寫過的代碼,看過的論文,發過的論文。

還有更重要的,快速學習能力。對一個全新的領域,可以快速in。所以只拷問知識層面顯然太low。


謝邀。

在回答之前,先簡單介紹一下,作為一個快速成長的AI初創企業,竹間智能已經擁有一百多位AI工程師與研發人員,深度學習工程師也是我們招聘的主要崗位之一。

為了回答這個問題,我們專門請教了竹間智能深度學習科學家趙寧遠,請他分享一下面試「深度學習工程師」時的標準與經驗,可能有主觀的地方,但都是乾貨,希望對想進入AI領域的朋友有所幫助。

(打個硬廣:文末有竹間智能正在招聘的一些崗位,有需求的朋友可以關注一下)

---------------------------------------------------正式回答分割線---------------------------------------------------------

深度學習雖然並不是新鮮事物,尤其近幾年發展迅速,但還遠稱不上是一個「成熟」領域。就算是「傳統」機器學習,其中所包含的思想和方法也千差萬別。因此,我們並不強求面試者必須要懂哪些tricks或者某類特定的方法。坦白說沒有面試官(在我們看來,就算是Hinton本人)能對機器學習/深度學習的每個領域了如指掌,所以我們會盡量避免用一些自己主觀的理解去考別人。

因此,我們的原則是希望面試者有比較好的機器學習基礎,比較優秀的編程能力,以及分析和解決實際問題的能力(或者說,critical thinking)。當然,對深度學習的理解和實際經驗會是一個加分項,但是crash course或者用於炫技的冷知識並不能取代紮實的基本功(比方說把Andrew Ng的機器學習課程吃透,將Deep Learning一本書學好)。

冒著聽起來過分自大的風險,我想分享一下我們關心的一些問題:

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。我希望可以結合相對客觀的基礎問題,以及面試者自身的特長,來對面試者的理論和實戰能力做一個判斷。基礎紮實,有實戰經驗並且有一技之長的面試者通常會是非常理想的候選人

最後的一點小tip,我真誠地希望面試者對問題有自己的思考和理解、有自己的體系,argument都是能夠自洽的。堅持自己的觀點並與面試官爭論,遠遠好過為了刷面試而去背誦所謂標準答案(或者來知乎上找面試tips)。

歡迎大家批評指正。

本回答來自竹間智能深度學習科學家 趙寧遠


------------------------------------------以下是竹間深度學習方向的【在招崗位】--------------------------------

1. 深度學習工程師

2. 高級演算法工程師

3. 自然語言處理工程師

4. 語音識別工程師

5. 機器學習工程師

6. Consulting Engineer

有意向的同學請私信哦~


有幾個問題時間原因還沒來的及展開回答,最近會補上。
完整版移步知乎專欄

以下問題來自@Naiyan Wang

  • CNN最成功的應用是在CV,那為什麼NLP和Speech的很多問題也可以用CNN解出來?為什麼AlphaGo里也用了CNN?這幾個不相關的問題的相似性在哪裡?CNN通過什麼手段抓住了這個共性?
    • Deep Learning -Yann LeCun, Yoshua Bengio Geoffrey Hinton
    • Learn TensorFlow and deep learning, without a Ph.D.
    • The Unreasonable Effectiveness of Deep Learning -LeCun 16 NIPS Keynote
    • 以上幾個不相關問題的相關性在於,都存在局部與整體的關係,由低層次的特徵經過組合,組成高層次的特徵,並且得到不同特徵之間的空間相關性。如下圖:低層次的直線/曲線等特徵,組合成為不同的形狀,最後得到汽車的表示。

    • CNN抓住此共性的手段主要有四個:局部連接/權值共享/池化操作/多層次結構。
    • 局部連接使網路可以提取數據的局部特徵;權值共享大大降低了網路的訓練難度,一個Filter只提取一個特徵,在整個圖片(或者語音/文本) 中進行卷積;池化操作與多層次結構一起,實現了數據的降維,將低層次的局部特徵組合成為較高層次的特徵,從而對整個圖片進行表示。如下圖:

    • 上圖中,如果每一個點的處理使用相同的Filter,則為全卷積,如果使用不同的Filter,則為Local-Conv。
  • 為什麼很多做人臉的Paper會最後加入一個Local Connected Conv?
    • DeepFace: Closing the Gap to Human-Level Performance in Face Verification
    • 以FaceBook DeepFace 為例:

    • DeepFace 先進行了兩次全卷積+一次池化,提取了低層次的邊緣/紋理等特徵。
    • 後接了3個Local-Conv層,這裡是用Local-Conv的原因是,人臉在不同的區域存在不同的特徵(眼睛/鼻子/嘴的分布位置相對固定),當不存在全局的局部特徵分布時,Local-Conv更適合特徵的提取。

以下問題來自@抽象猴

  • 什麽樣的資料集不適合用深度學習?
    • 數據集太小,數據樣本不足時,深度學習相對其它機器學習演算法,沒有明顯優勢。
    • 數據集沒有局部相關特性,目前深度學習表現比較好的領域主要是圖像/語音/自然語言處理等領域,這些領域的一個共性是局部相關性。圖像中像素組成物體,語音信號中音位組合成單詞,文本數據中單片語合成句子,這些特徵元素的組合一旦被打亂,表示的含義同時也被改變。對於沒有這樣的局部相關性的數據集,不適於使用深度學習演算法進行處理。舉個例子:預測一個人的健康狀況,相關的參數會有年齡、職業、收入、家庭狀況等各種元素,將這些元素打亂,並不會影響相關的結果。
  • 對所有優化問題來說, 有沒有可能找到比現在已知演算法更好的演算法?
    • 機器學習-周志華
    • 沒有免費的午餐定理:

    • 對於訓練樣本(黑點),不同的演算法A/B在不同的測試樣本(白點)中有不同的表現,這表示:對於一個學習演算法A,若它在某些問題上比學習演算法 B更好,則必然存在一些問題,在那裡B比A好。
    • 也就是說:對於所有問題,無論學習演算法A多聰明,學習演算法 B多笨拙,它們的期望性能相同。
    • 但是:沒有免費午餐定力假設所有問題出現幾率相同,實際應用中,不同的場景,會有不同的問題分布,所以,在優化演算法時,針對具體問題進行分析,是演算法優化的核心所在。

  • 用貝葉斯機率說明Dropout的原理
    • Dropout as a Bayesian Approximation: Insights and Applications

  • 何為共線性, 跟過擬合有啥關聯?
    • Multicollinearity-Wikipedia
    • 共線性:多變數線性回歸中,變數之間由於存在高度相關關係而使回歸估計不準確。
    • 共線性會造成冗餘,導致過擬合。
    • 解決方法:排除變數的相關性/加入權重正則。

  • 說明如何用支持向量機實現深度學習(列出相關數學公式)
    • 這個不太會,最近問一下老師。
  • 廣義線性模型是怎被應用在深度學習中?
    • A Statistical View of Deep Learning (I): Recursive GLMs
    • 深度學習從統計學角度,可以看做遞歸的廣義線性模型
    • 廣義線性模型相對於經典的線性模型(y=wx+b),核心在於引入了連接函數g(.),形式變為:y=g?1(wx+b)。
    • 深度學習時遞歸的廣義線性模型,神經元的激活函數,即為廣義線性模型的鏈接函數。邏輯回歸(廣義線性模型的一種)的Logistic函數即為神經元激活函數中的Sigmoid函數,很多類似的方法在統計學和神經網路中的名稱不一樣,容易引起初學者(這裡主要指我)的困惑。下圖是一個對照表:

  • 什麽造成梯度消失問題? 推導一下
    • Yes you should understand backdrop-Andrej Karpathy
    • How does the ReLu solve the vanishing gradient problem?
    • 神經網路的訓練中,通過改變神經元的權重,使網路的輸出值儘可能逼近標籤以降低誤差值,訓練普遍使用BP演算法,核心思想是,計算出輸出與標籤間的損失函數值,然後計算其相對於每個神經元的梯度,進行權值的迭代。
    • 梯度消失會造成權值更新緩慢,模型訓練難度增加。造成梯度消失的一個原因是,許多激活函數將輸出值擠壓在很小的區間內,在激活函數兩端較大範圍的定義域內梯度為0。造成學習停止

以下問題來自匿名用戶

  • Weights Initialization. 不同的方式,造成的後果。為什麼會造成這樣的結果。
    • 幾種主要的權值初始化方法: lecun_uniform / glorot_normal / he_normal / batch_normal
    • lecun_uniform:Efficient BackProp
    • glorot_normal:Understanding the difficulty of training deep feedforward neural networks
    • he_normal:Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
    • batch_normal:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

  • 為什麼網路夠深(Neurons 足夠多)的時候,總是可以避開較差Local Optima?
    • The Loss Surfaces of Multilayer Networks
  • Loss. 有哪些定義方式(基於什麼?), 有哪些優化方式,怎麼優化,各自的好處,以及解釋。
    • Cross-Entropy / MSE / K-L散度

  • Dropout。 怎麼做,有什麼用處,解釋。
    • How does the dropout method work in deep learning?
    • Improving neural networks by preventing co-adaptation of feature detectors
    • An empirical analysis of dropout in piecewise linear networks
  • Activation Function. 選用什麼,有什麼好處,為什麼會有這樣的好處。
    • 幾種主要的激活函數:Sigmond / ReLU /PReLU
    • Deep Sparse Rectifier Neural Networks
    • Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification

問TA做過得最得意的項目,在敘述過程中隨意問幾個細節問題,就很容易判斷出來了。


又到一年春招季,DL的需求越來越大,基本現在是個碩士以上學歷應聘演算法崗都會往簡歷上寫深度學習

談點實在的,以下都來自真實的一線公司問過的問題。。。

分為兩種面試官,第一種是廣撒網地問一些老生常談的DL中沒有標準答案的問題,比如過擬合怎麼辦?樣本偏斜怎麼辦?

第二種是就一個問題不斷地深挖,甚至能夠從具體實現一直挖到背後的哲學原理。

我個人覺得第二種是比較能看出受試者是否懂深度學習的,因為根本沒法準備。只能從你個人的長期積累來應對。


比如過擬合怎麼辦這個問題,第一種你回答了drop out,data augmentation , weight decay。面試官就覺得你還不錯了,但是第二種會接著這個問題,如果你講了weight decay,立馬問你常用的weight decay有哪些?怎麼處理weight decay的權重。

如果你講了L1,L2。讓你比較為什麼要兩種weight decay,區別在哪裡。比如如果你講L1零點不可導才用L2,那麼立馬問你SMOOTHL1。

如果你都說明白了,就問你為什麼weight decay能夠一定程度解決過擬合?如果你說到了L0和稀疏性。接著就來問你為什麼稀疏性有效?

最後很可能面試官會挖到,如無必要勿增實體的信念問題。但當然不能首先就講哲學層面,個人覺得工科生一定要由果推因。


同樣,讓你對比新舊方案,比如有大部分人覺得基本RNN就是沒有LSTM好,這麼直接的答肯定不對的。就比如首先問你覺得LSTM解決RNN的梯度消失問題了嗎?

這個回答要針對LSTM版本以及看面試官想聽哪種,籠統來說,如果你回答很大程度解決了,接著就問如何解決的。如果你回答CEC的vanilla版本的LSTM通過加法修正而不同於RNN連乘。那麼面試官追問遺忘門是不是連乘,是否帶來梯度消失?

如果面試官問到這一步,你肯定要修正答案了,現在回答應該是:帶遺忘門的LSTM沒有本質解決RNN的梯度消失,

這個時候你再對LSTM和RNN進行優劣分析就知道LSTM實際上不同於RNN,後者把信息分配與『過往』如何對當下造成影響都用一個W權重表示。而LSTM則通過遺忘門Wf專註把信息trap進來,仍通過另一個Wi去表示『過往』對當下造成的影響。

很顯然這裡RNN就少用了一部分權重來建模這個問題。如果要解決的問題中用LSTM解決,遺忘門訓練出來的理想狀態是失效(全部忘記)的話,那麼RNN方法肯定要優於LSTM的。

包括對比DL方法和傳統ML方法。一定要深諳兩種方法具體特點才能答出各自優劣,最終面試官很可能在考驗你有沒有『天下沒有免費的午餐』這種思想。


工程上問你如何初始化網路參數精確到代碼,原理上問你Xavier背後的道理(paper),哲學上問你為什麼覺得XXX方案的假設在非凸優化就能有一個好的初始值。


瀉藥
一個問題可以考察八成的功力:
CNN最成功的應用是在CV,那為什麼NLP和Speech的很多問題也可以用CNN來出來?為什麼AlphaGo里也用了CNN?這幾個不相關的問題的相似性在哪裡?CNN通過什麼手段抓住了這個共性?
再補充一個問題,為什麼很多做人臉的paper會最後加入一個local connected conv?

覺得能答對的同學可以私信我答案,我們可以直接進入面試流程哦~


現在面到能了解本質的同學的人太難。如果這個人和你說了一堆,那他一定沒了解到本質。如果一個人和你說的很簡單。有2種可能,他已經知道本質了,還有就是他什麼都不懂。此時你可以列舉那一堆,問問他和他說的那個簡單的東西什麼關係。

現在這個知識突飛猛進的年代,還是著重一個人的自我驅動能力,學習能力是更重要的,任何現在火的東西很快都會不火(不火不代表沒用)。就看看頻率學派和貝葉斯學派已經好幾波此消彼長了。

我感覺PRML上對於Logistic Regression的7,8種不同角度的看法對了解本質很有作用。


最有鑒別度也最實用:
什麽樣的資料集不適合用深度學習?
什麽造成梯度消失問題? 推導一下

其他整人雜題:
廣義線性模式是怎被應用在深度學習中?
說明如何用支持向量機實現深度學習(列出相關數學公式給他參考)
何為共線性, 跟過擬合有啥關聯?
用貝葉斯機率說明dropout的原理
對所有優化問題來說, 有沒有可能找到比現在已知演算法更好的演算法?(答案是某定理)


看到大家前面的回答,都很好,但主要談的還是偏向於知識的考察。

我個人在軟體開發的行業經歷了13年,從事演算法這個行業已3年,經歷了兩家和演算法相關的公司,面試演算法/NLP/圖像方向的不下500人(對,我們不特彆強調深度學習,如特彆強調,這家公司/部門要麼是做純粹研究性質的,要麼是騙人的,要麼面試官一知半解),應該有些發言權:

1.明確你崗位的職責,說白了,就是你要什麼樣的人,這是第一步,而且是最重要的一步,所有的技術考察,性格考察都是基於這一步來的。如果說,你要一個NLP的人,你需要明確NLP的那些方向是你首要考察的重點,詞義的?語義的?句法結構的?哪些應用是你比較看重的?搜索引擎,關鍵字優化?實體識別?情感識別?分詞?

2.接著你會按照這個目標去篩選簡歷,然後約人來面試。請記住:在簡歷這關你必須要刷下60%-70%的人,這是我按照目前的演算法這個行業普遍從業情況,和自己的面試經歷,得出一個概數。這減少你遇到奇葩的機會。

3.技術面試需要注意的地方:

我會考察四個方面

  • 過去的項目經驗
  • 知識結構
  • 處理問題的能力/觀察能力
  • 理解能力/學習能力

其中,

  • 過去的項目經驗:

主要考察項目的基本情況,面試人在項目中承擔什麼樣的職責,難易程度,你學習到哪些東西。這裡有很重要的一點,就是看他的工程能力如何。有些人適合做研究,工程能力一塌糊塗,我想你的公司如果不是大到一定程度,是不會養只做研究的人,你作為面試官首要對公司負責。當然如果這個人理論知識特彆強,雖然工程能力不強,我們也可以特例招入,並配一個工程能力強的人搭配幹活。

注意:工程能力並不僅僅是代碼實現能力!

  • 知識結構:

仍舊以NLP舉例,分詞你用過多少種,他們之間的細微不同你是否都看過,是否追到源碼中去?是否改過源碼?這些都是層次遞進的。分詞只是其中很小一部分,但是非常基礎的一部分,能體現你的團隊在NLP領域的深入程度,基本上做了一年的NLP都不可避免的修改分詞這個基本組件的源碼。再考察一些相對新的東西認知到什麼程度,比如word2vec,比如cnn提取文本信息。接著看你基礎演算法掌握的如何,比如說說PCA,SVM的原理,一些聚類演算法的原理(不要求你寫出公式,我也記不住)。這個階段我問的任何一點都是工作中實際在用的,沒有任何一條是為了問你而問,或為了顯擺我會而你不會,請面試者擺正心態,好好的回答問題,不知道就說不知道!

  • 處理問題的能力:

我經常會給出兩道演算法題,比如一道是和NLP相關的,讓你說用什麼演算法解決,還有一道是和歸因分析或預測相關的讓你談思路。非常開放的問題,主要看你的思維方式,是否細緻,是否能靈活運用演算法。

  • 理解能力:

我會給出4篇論文,由面試者自己抽一篇,給你30分鐘,儘可能的看,最後給我講這篇論文主要解決什麼問題、關鍵的步驟、公式解釋、結果分析等,說的越詳細越好,當然你可以查字典。如果你問正好這篇有的面試者看過怎麼辦?不是對其他人不公平嗎?首先我選擇論文的時候,已經選擇的是最近的論文,如果這你都還看過只能說你平時就下功夫;如果湊巧你平時也不看,這篇論文你看了,那我要恭喜你,面試運氣也是非常關鍵的因素,你覺的呢?

4.性格能力的考察

這一點有很多面試技巧談到,但要注意你找的人。做演算法是需要一個比較細緻的性格,開放的思維,靈活的運用,另外還要結合你要往團隊中補充什麼類型的人。你可以問一些生活的小事,了解他的各種背景。問問他覺得最有成就的事情(非技術)。看看他視野如何,對其他哪些方面也感興趣。比如他如果回答我對音樂也感興趣,那就問他喜歡聽聽什麼類型的?交響?那你喜歡哪位?至少你要知道音樂風格的區別,比如貝多芬和莫扎特曲風就有區別。如果他回答流行,你可以繼續問你喜歡哪位歌手?

說白了就是要找他最喜歡的那個點。這個階段很輕鬆,你也可以放到一開始就問,以緩和氣氛。


5.面試完成後

面試完了並不代表對這個人的考察結束,面試只能很不全面的了解一個人,我們只能儘可能全面的了解他,但必然了解的不完全。如果招進來後,在試用期內你需要布置什麼樣的工作?如何考察試用期員工?也是非常重要的,但先寫到這裡吧,好像稍稍跑題,有人看再說,待續。。。。。


大概會問傳統機器學習、深度學習、最優化、coding四個方面。

傳統機器學習一定要好好問問,因為很多人只會深度學習的調參技巧,知其然,不知其所以然。傳統機器學習演算法裡面理論相對完備,通過考傳統機器學習演算法更容易看出應聘者的理論能力。

傳統機器學習考察點:
1、bias與variance的含義,並結合ensemble method問哪種方法降低bias,哪種方法降低variance
2、lr與svm的區別與聯繫
3、gbdt與adaboost的區別與聯繫
4、手推svm,svm麻雀雖小五臟俱全
5、pca與lda的區別與聯繫,並推導
6、白化的原理與作用
7、給一個演算法,例如lr,問這個演算法的model、evaluate、optimization分別是啥

深度學習考察點:

1、手推bp
2、梯度消失/爆炸原因,以及解決方法
3、bn的原理,與白化的聯繫
4、防止過擬合有哪些方法
5、dnn、cnn、rnn的區別與聯繫
6、機器學習與深度學習的聯繫

7、batch size大小會怎麼影響收斂速度

最優化考察點:

1、sgd、momentum、rmsprop、adam區別與聯繫
2、深度學習為什麼不用二階優化
3、拉格朗日乘子法、對偶問題、kkt條件

coding考察點:

排序、雙指針、dp、貪心、分治、遞歸、回溯、字元串、樹、鏈表、trie、bfs、dfs等等


1. 基本編程能力 (LintCode, LeetCode 中等難度)

- BFS, DFS, ... etc

2. 數學編程的能力( mathmatic programing)

- EX : 給與一個 softmax的方程式, 能夠用代碼實現出來 &<有很多種實現方式&>

3. 了解DNN基本單元的構成 :

Layer

- Convolution Layer (Stride, Pad, Dimension)

- Pooling Layer (Pooling Size, Pooling_Operation(max/average/...etc) )

- RNN-layer/cell (hidden_unit)

- LSTM-layer/cell (hidden_unit)

- Embedded layer

- Basic layer


Activation function / non-linear operation

- ReLU

- LeakyReLU

- tanh

- sigmoid

- etc ...


Frequently used loss/objective/cost function :

- hinge

- Cross Entropy

- MSE

- ... etc

4. 如何優化模型 : 加速收斂, 避免overfit, 提升精度 ..

- batch size effect

- learning rate effect

- weight initialization effect

- batch normalization

- drop-out

- model average

- fine-tuning

- data augmentation

- ... etc

5. 模型設計 : 給定一問題, 請面試者描述如何設計演算法架構與分析流程

- Data Preprocess

- Define Learning Architecture

- Objective Function Select or Design

- How to optimize the performance of your designed model ?

- In what condition, DNN/DL might not be a best choice ? (Q : small and biased/unbalanced dataset)


如果招聘的目的是要給他一個數據, 然後用DL做些處理,那麼就聊聊他以前做過什麼數據,
在訓練NN當中,碰到什麼問題,怎麼解決?
一拿到新的數據,先做什麼呢,為什麼? 一開始練NN,他會用什麼樣子的structure,為什麼?跑第一,X次,看了結果後,會做什麼改變,為什麼?

定義是容易背的,比如BN=reduce covariate shift, dropout=reduce overfitting, a form of model ensemble, reduce co-adaptation 等, 這個想似此問些brain teaser 一樣,可能不是那麼靠譜。(除非他又解釋什麼是covariate shift,還有其他什麼方法克服這個,runtime speed tradeoff多少,什麼情況下用)

Prof. Andrew Ng 說過,(paraphrase) 百度要codify這些訓練NN會碰到的問題,然後跟團隊分享,所以他們的iteration speed 會加快,那個是他的責任。

畢竟,招聘了之後,公司有限量的顯卡,不可能無限制的做grid search。

關於CNN,可以問tied, untied bias,跟 shared weights 或者locally connected layers 有什麼差別,什麼時候用? 1x1 convolution 的目的?CNN architecture 哪裡用多parameters, 哪裡用多memory?有什麼辦法減少parameter,memory,對於每個辦法,tradeoff 是什麼?

也可以聊聊基本NN。 比如今晚我跟朋友聊他的問題,他有 dataset (x,y) where X in Real, y in【0,1】, 如果他用 1 x 100 x 1 structure 跟 100 x 100 x 1 比較, 那個可能會好一點, 為什麼? (assume, say relu,binary cross entropy, uniform init)。 backprop 怎麼update weight的啊?理論上,如果有500個unique(x,y)pair,需要幾個hidden node去overfit? (upperbound?)

個人覺得,深度學習有2個難點
1)學model intuition/relations, see models,learning,algorithms in
http://shakirm.com/slides/DLSummerSchool_Aug2016_compress.pdf
學到對models有個mental landscape(心理景觀?), 必須花很多時間,很瘋狂obsessive的去做。可能夢都夢到KL
學到有信心的在MLSS 在 prof。bengio salakhutdinov 大牛前面做演講,這個可能就是讀phd的事了。(不過沒讀過,不知道!)
Building Machines that Imagine and Reason: Principles and Applications of Deep Generative Models
2)很多學習是從playing with model,data來的。這個也要花很多時間。(prof。bengio 也建議這樣),那麼多個model,一個一個來吧
所以maximize learning 1)+ 2), subj. to constraint time/$.

如果有自己正在訓練NN, 不停的(hypothesis,test,repeat),那麼歡迎私信。
如果在上海,歡迎到靜安寺這邊聊聊。


先給題主道個歉,之間的回答不太友好,刪掉一些多餘的話。

本人對深度學習有接近一年經驗。

如果讓我判斷一個人是否懂深度學習,我判斷不了,因為我也不敢說自己就懂。

但是讓我判斷一個人對深度學習是否入門,這個還是挺容易的,20分鐘以內的聊天就足夠。

主要分成理解和應用

首先看他能不能理解深度網路各個模塊的物理意義,優化網路的方法,還有各種現有網路結構的應用場景和優缺點。
比如,卷積層共享參數的目的,pooling層的作用。finetune是什麼。dropout,bn等作用。一個網路為什麼需要這些來組成?

再看他能不能針對自己的任務,合理應用各種現有技術去解決。
比如,網路結構的選擇,該不該finetune,根據交叉檢驗的結果改進網路,該加層還是該刪,不收斂怎麼找原因,監督函數的選擇等等。

如果都是正面回答,個人認為是入門了。

如果能找到待解決的問題和有價值的研究點,我覺得就不僅僅是入門水平了。
比如,fcn的prediction都是獨立的,能否根據需要引入約束對其建模(牛津某組工作),現有監督函數不滿足要求,合理引入其他loss來輔助(cuhk)或提出更適合的(google)


最直接的是看code或者看發過的文章。我喜歡有google scholar的面試者。


分職位吧,我們的職位要求能把deep learning 用出來,能解決客戶問題的就是好同志。 具體點說,我們的數據不是語音,不是圖像,不是自然語言,您說deep learning能不能用吧,是不是適合用,如果要用可能會碰到什麼問題,哪一種network比較適合處理我的數據。如果只是會調用package,一般是解決不了我們的問題的,因為我們這根本就不是圖像識別嘛。

具體點,我一般是這麼問的:

1。哈哈天氣不錯,今天怎麼樣呀,挺好吧。咱們來聊聊簡歷。你以前做過深度學習是吧? 介紹一下你的項目?

2。我們這裡有個跟你的項目類似的問題,也是classification,但是輸入不是圖像,我們有claim level的數據,你看能不能用你的方法做?適合么?

3。如果要用deep可能會碰到什麼問題,哪一種network比較適合處理我的數據?

4。相比土辦法,用深度有什麼優勢呢?哥們一般會提到feature learning,我就等這句呢。

5。那怎麼從俺們的raw data里做出feature 呢?
ps: 這個問題我也不會。現在我都是跟clinical team的醫生一起做feature,靠人工。判斷一個人有沒有可能骨質疏鬆,他們說跟糖尿病,bmi指數,抽煙可能有關,那就整理唄,我哪知道呀。那跟高血壓,高膽固醇,甚至一些失眠之類的癥狀有關嗎?很麻煩呀,要整理數據,再分析。總共有幾千個癥狀,還要考慮combination什麼的。。。 btw,上面說的那些都是時間序列,不是indicator。

來吧,騷年,我們一起開發data driven的feature learning 辦法吧。

還有幾個小問題,看心情問

a)數據imbalance 怎麼辦?sparse 怎麼辦?什麼?你不知道這兩個詞是什麼意思?那88,走好不送。

b) 最後這個比較野,我一般不問,如何讓客戶信服,我們不僅僅是跑了個包?
ps:我們能說服consultant,consultant才能說服客戶。雖然我不接客,但我要給consultant這種混合著商科理科工科的大哥大姐們講明白呀。


瀉藥

首先肯定要問一下當前的幾種流行的深度學習模型,面試者是否都有所了解。並問一些涉及到其中重要參數,變數的含義。需要了解自己曾經在學習生活中應用到的深度學習模型框架,自己跑過什麼樣大型的數據,在跑程序時,發現了哪些在書中,網路中沒有發現的一些知識經驗發現。做過哪些項目,是否有自己的github主頁,參加過什麼樣的數據比賽,得到過什麼樣的成績。最後,還要讓面試者手動推到一些涉及深度學習數學基礎方面的公式。

這樣一輪過後,可以知道面試者在大局觀,理論能力與實踐能力是否符合公司的要求。

http://weixin.qq.com/r/PjqxtMTEsAzMKIDXb2_6 (二維碼自動識別)


首先,「深度學習」並不是一個孤立的專門學科,而是整體機器學習的一部分,需要堅實的基礎和能力,應該在這個意義上綜合考察。

其實,面試跟相面一樣,考察的信息來源只能靠對方說的多,而不是你問得多。我認為考察的好方法其實思路很簡單,也是當年在MSRA學到的方法,那就是先不要問任何問題,而是讓應聘者找一項自己最得意的工作,可以是研究項目,也可以是工程項目,系統地講解一遍。此過程可以考察幾項非常重要的能力:

1. 提煉問題、確定目標函數的能力。當然,這個要求是錦上添花,很多初級項目不一定會碰到。只能說,碰到且表現不錯的話,是個大大的加分因素。

2. 分解目標、逐個解決問題的能力。這一部分是區分普通工程師與有總體架構潛力者的重要分水嶺,在實際項目的介紹中,應聘者的統籌思維能力、重點把控能力、具體建模技能一定會一覽無餘。

3. 把控細節的能力。一項具體的任務一定會面臨許多細節上的問題,應聘者自己比較滿意的項目,應該是解決了這些細節,糾正了認識上先驗的偏差,這是實際工程中非常重要的能力。

注意,這個過程不是聽報告,一定要充分互動,提出質疑或啟發性問題,以確定對方的工作是親力親為,而且在表述內容之外進行了充分的思考和準備。在應聘者介紹完自己的工作後,就大致可以了解他對哪個領域比較熟悉,然後可以在這個領域簡單問幾個問題,一般來說,可以考慮如下幾類問題各問一個:

1. 理論框架性問題,比如,為什麼深度神經網路比淺層模型有更強的表達能力?

2. 基礎知識問題,比如,從梯度下降法到Adagrad都是怎麼更新模型的,這些方法是如何演變的?

2. 工程實踐驗證問題,假設他的工作主要用到Tensorflow,可以讓他用此寫一個簡單的模型訓練代碼。

3. 開放性問題,這個範圍較廣,可以根據自己的習慣決定。比如,你覺得人工智慧將在哪些領域首席取代人工,原因是什麼?

切記,一定要在前面工作介紹的基礎上在對方熟悉的領域內找問題!因為在對方不熟悉的領域內找問題來問,是毫無意義的。另外,複雜繁難的問題是毫無意義的,因為那並沒有鑒別力。

當然,上面這套方法,對面試官的要求也比較高,您別打算突擊學過一兩個模型就拿來砍人。另外,別再以為給了數據能把某個模型參數就叫熟練掌握深度學習了,非常負責任地說,這樣的工作靠譜的大專生完全可以勝任。(參見我的另一篇專欄文章《20萬、50萬、100萬的演算法工程師,到底有什麼區別?》)


[我是@北冥乘海生,想吸收更多負能量,請大家關注我的公眾號「計算廣告」(Comp_Ad)和知乎專欄「計算廣告」!]


1. weights initialization. 不同的方式,造成的後果。為什麼會造成這樣的結果。
2. activation function. 選用什麼,有什麼好處,為什麼會有這樣的好處。
3. dropout。 怎麼做,有什麼用處,解釋。
4. loss. 有哪些定義方式(基於什麼?), 有哪些優化方式,怎麼優化,各自的好處,以及解釋。
5. 為什麼網路夠深(Neurons 足夠多)的時候,總是可以避開較差local optima?
。。。。
第五點可以參考:http://arxiv.org/abs/1412.0233。


那個時候深度學習還沒火,面試的老師就問了我一個問題:你覺得bp神經網路是什麼東西?
以及面試某個數學研究生的:如何判斷一個矩陣為正定?
開放、基礎的問題才是考功力的,我覺得「softmaxloss推導一下」這個問題就很不錯。


不需要判斷,深度學習本身沒什麼門檻,好理解易實現(特指單機版),如果有好框架,那就更簡單了,shell腳本編寫的難度。
然後找本Tricks of the Trade,下個Hinton的公開課,trick也差不多會了。
icml,nips啦,一開會就趕緊看dl方向的論文,看看有啥新網路拓撲,有啥新套法,趕緊follow!
我覺得就這個難度,一般合格的碼農,都能很快上手,需要判斷水平嗎?


講一個自己熟悉的問題和採用的模型。從模型的結構到訓練方法做一個完整的介紹(是什麼,為什麼,怎麼做)。

再問問看看這個模型能夠在哪些方面有改進空間。

最後給合理時間驗證想法(可以在面試後給出)。


推薦閱讀:

deep learning 可以用來做推薦系統嗎?
如何評價 Nature 重磅封面:谷歌人工智慧擊敗歐洲圍棋冠軍,3 月將與李世石對弈?
RL兩大類演算法的本質區別?(Policy Gradient 和 Q-Learning)
在圖像識別這一塊,目前有沒有可以移植到嵌入式設備的深度學習演算法?
深度學習調參有哪些技巧?

TAG:機器學習 | 深度學習(Deep Learning) |