機器學習相關崗位面試中,有哪些加(zhuang)分(bi)項?
比如說,有哪些對某些模型的深刻理解,對A模型和B模型之間的聯繫,對某些數學概念的幾何理解,對某些高級機器學習模型的通俗描述,說出來可以加(zhuang)分(bi)的?
舉一個我面試中遇到過的目前最牛的例子,簡稱M。我一般負責和人吃飯閑聊。這位先生以前在Intel,只大概看過機器學習的一些東西。
我:目前深度學習當中用mapreduce的比較少,因為我們經常要SGD,
M:哦我猜一下,所以你們用MPI,然後你要優化Allreduce。
我:。。。對的,然後很多時候網路會有瓶頸,
M:恩,因為你們不想上infiniband。
我:。。。對的,
M:然後你們 網路的 吞吐速度是夠的,但是延遲不理想。
我:。。。對的,
M:所以你們想要有非同步通信,但是同時又要控制 模型不發散。
我:。。。對的。
我:然後我們的模型在部署的時候希望盡量高速,一個方法是 找稀疏解,
M:但是你們發現稀疏性不夠,目前的運行庫需要1-5%的稀疏性才行。
我:。。。對的,
M:但是你們估計最多只有30%上下的稀疏性,否則模型質量就下降。
我:對的。但是還是有一些辦法,因為部署的時候模型是固定的,
M:所以可以做即時編譯然後內聯參數。
我:。。。對的。
所以面試的加分項就是面試官還沒問問題,你就先回答完了。
裝b結束了,說說我大概想表達的意思吧:機器學習裡面了解怎麼推公式,怎麼解釋演算法等等,都是停留在技術的層面上。技術牛肯定是有加分的,但是如果要找一位演算法/系統架構師,更容易加分的是了解這些技術背後真正解決的問題,在出現 需求的時候能很快解釋背後的原理,然後找到解決問題的思路。這也是為啥我在面試的時候不問具體技術細節的緣故 - 開個玩笑,好的架構師只需要寫頭文件就行。。。
=== 因為評論說沒看懂,具體展開說 ===
SGD+MPI+Allreduce:這個問的是機器學習當中SGD演算法怎樣並行化,以及如何處理並行當中的計算模式,討論可以見Allreduce (or MPI) vs. Parameter server approaches
網路瓶頸:需要正確估計計算時間和網路通訊之間的比例,保證可以實現pipeline:Pipeline (computing)
Infiniband以及ethernet:問的是大規模系統架構的時候的硬體選擇問題,不想上Infiniband是因為成本問題,以及容易被少數vendor lock in的風險。
網路的吞吐和延遲的區別:What is the difference between latency and throughput?
非同步通信的時候對於收斂性的影響:可以參見google的async sgd,sync sgd revisited,Eric Xing的latency bounded sgd,以及EASGD等一系列文章的討論。
模型的稀疏解:這個涉及到對於模型稀疏化能力的正確估計,目前的很多網路要保證不丟準確率的情況下,很難做到傳統稀疏矩陣的那種要求。
稀疏矩陣庫的計算效率問題:這個如果做過數值優化的話應該是常識,但是五秒鐘裡面能從上一條跳到這一條然後找到瓶頸還是讓我很驚訝的。
即時編譯和內聯參數:這個比較涉及到數值優化的一系列可能性,以及對於編譯器的期望,本身就是一道可以展開說一個鐘頭的問題。。。比如說,我們在做矩陣乘法的時候是需要pre-pack矩陣的,如果我們知道參數矩陣不會變,我們就可以預先pack,然後如果你可以自己寫編譯器來利用這些特性的話,你甚至可以沒有那個矩陣,直接出一個程序把參數都寫在指令裡頭。
一般面試是不會涉及到那麼多問題的,其中一兩個就夠討論了,M先生屬於特別牛的那種。。。Update: 有人說我show off,因為這個問題就是加(zhuang)分(bi)啊!這些並不會是面試官真實會問的問題,看清題目再comment啦~~以及,裝逼需謹慎,該裝的都裝了,被好奇寶寶面試官追問下去答不上來,圓(ji)不(chu)好(cha)也別怪本答案啦~~科科
以及PCA那裡,感謝@木遙大神指正!那個norm constraint是個hypersphere,令這個問題無論如何都不會是凸優化問題嘛,constraint被我默認成小於等於了_(:з」∠)_…
==========================================
裝逼可以啊,聊聊相同模型的不同理論解釋嘛,比如說dropout as a bayesian approximation, EM as a coordinate descent, k-means as a matrix factorization, word embedding as matrix factorization, DPM as a CNN...這些東西我能說一天,相當地有意思。你別看這個世界上有這麼多模型,實際上可能只是同一模型的不同分身罷了。
事實上,我建議題主把SVM這個機器學習中最可愛的演算法了解透徹,同一個模型,我可以用subgradient descent求解hinge loss(比如說PEGASOS),我可以用它primal和dual的形式分別求解二次規劃,再進一步,我們可以用interior point method,用primal-dual的方法用牛頓法求解,再有就是大家都熟悉的SMO,它又是怎麼工作的?數學是個很神奇的東西,它有自己的語言有自己的世界和規律,然而萬變不離其宗。我覺得概念簡單但不容易深入理解的還有Lasso,EM還有variational inference,把這些都能說明白表達得清楚,面試官肯定是被你說的一愣一愣的,計劃通(●°u°●) 」
應題主要求,補充一個具體的例子:
貌似前面的說的都和優化有關,木有辦法,優化算是ML的主線劇情了,補充一個具體的例子,PCA,面試官問道你的時候你可以這麼跟他扯。說到這個主成分分析啊,大家都知道它是在找最大的特徵值對應的特徵向量,嗯?歪?可能很多人又道聽途說了很多諸如最大的特徵值對應著最大的variance,嗯,sounds good! 很多人覺得這是一個凸優化問題,然而真相是殘酷_(:з」∠)_
具體到公式來說,PCA解決的問題是 s.t ,是協方差矩陣,由於協方差矩陣都是半正定的,而這個函數的Hessian矩陣 自然也是半正定的,也就是說這是個凸函數,然而exo me,前面的符號竟然是max???差評!也就是說這個函數有多個局部最優,雖然憂桑,但是局部最優也是滿足KKT condition的,(...skip the math...),我們發現eigen vector剛好可以滿足KKT的stationarity condition!然後結論,找到所有的局部最優(eigen vectors),然後選最大的,解決。希望面試官還好。這個時候你應該淡淡地說,我覺得用EM解決PCA的辦法更為精妙,我簡單地寫一...「啊我們今天就到這兒吧,我們得到消息馬上通知你!!!」
不過,如果看畢真的有人認為像如上PCA這類基礎知識都能算是加(zhuang)分(bi)項的話,那...
正如評論里所說的,這些所謂的加(zhuang)分(bi)不僅能讓你看起來很厲害的樣紙,還能甄別哪些公司靠譜哪些公司不靠譜。
先聲明我的答案只是我個人經驗,我感覺比較適合諮詢類企業。在四大工作過的朋友應該知道我在說什麼。加州那些科技企業的機器學習崗位,我不知道。下面是原答案。
我負責onsite前一輪,onsite也會參與。
一般上來都是讓被面試者自我介紹。然後根據項目經驗提幾個問題,這好像沒法投機取巧吧?做沒做過,做得好不好一般都能猜個八九不離十。
第二個環節是問一下我們的項目你有什麼建議。考察被面試者思路是不是清晰。有些人說著說著就說漏嘴了,暴露出一些概念性的錯誤。不過我覺得犯一兩個錯問題不大,只要有足夠多的亮點,我都會建議onsite。
其實paper,github,kaggle這些乾貨才是加分項,其他的都意思不大。
onsite面試會更加concrete,我會把我在工作中碰到的一些實際問題包裝成一道大題六個小問這種形式,比如給candidate看點raw data,然後介紹一下客戶給我們的要求,我會扮演一個團隊合作者的角色,讓面試者從頭到尾作為主要負責人,過一遍建模的整個流程。大方向上問完了,再問一些細節,比如missing value,data imbalance,partially labeled data,sample quality,feature colinearity等等。最後再問模型的分析,比如如何找出重要的特徵,如何證明模型的合理性,如何justify outliers等等。我肯定是挑著問的,不然時間不夠。
#####
既然高票答案這麼裝逼,那我也小裝一下吧。比如在第二個環節里,面試者這麼跟我講svm的primal解法和 dual解法,扯topic model和nmf,我應該不會被扯暈。我會讓你說的更多,除非你能白紙把svm的解法整個推導一遍,否則肯定會被問到寫不出來的地方。你說kkt,我問你kkt和stationary point的關係。你說em等價於majorization minimization,我問你為什麼每次update的都是lower bound。類似的太多了,bayes,我問你為什麼一個分布是共軛先驗。什麼?你還敢扯variational bayes。你真當來面試faculty job來了?能推導的出來最優近似的factor的分布q()嗎,裡面要算很多expectation的哦,要能有close form的積分喲,不能亂寫喲。
大哥,要知道我認識的突然給張白紙,順順利利能把svm完整推導一遍的人,不多,基本上最後都是faculty了。既能推導svm,又能推導卡爾曼濾波的,那就更少了。知道高票答案裡面涉及了多少個方向嗎?太容易被抓把柄了,呵呵。
高票答案說的這些演算法的等價關係,確實是沒錯,但我覺得還是要慎重表達呀。真懂了,再說會比較好。
總之,我意思就是面試官也都是讀博士發paper這麼過來的。我們review paper的時候最喜歡挑刺兒了。說這種很細節很學術的東西的時候請一定小心,被抓住把柄就不好看了。上班么,還是要解決問題,做工程,對嗎?
面試的時候發散性的回答有風險,如果沒把握,切中要害言簡意賅的回答應該為佳。迅速理解提問者的意圖也很重要。
#############
下面這段有爭議,可能比較適用於在美國找工作,國內的我不知道。
我也不能光吐槽,還是要提供解決方案。被問過這樣的問題,ee,物理,統計等等碩士畢業,(cs的比較牛逼,沒人問過我)怎麼當上machine learning scientist的職位。我說fresh在我們公司基本不可能呀,你可以先干一些data manipulation的活呀,熟悉sql,先進來干唄,從做feature開始唄。慢慢就會接觸到更多模型設計,實驗設計,presentation之類的露臉的活了唄。否則該怎麼辦?沒工作經驗,沒paper,沒code,上來就讓做model,那僱主風險也太大了吧。
(我上面這段寫的有點問題,被罵了。一般來說,美國畢業的博士和碩士水平差距,比國內的碩博差距要大。好像國內讀三年研究生就很牛掰了,不比讀五年的博士差多少。美國碩士有的實際就上一年課,半年找工作,三學期畢業,還不進實驗室。這搞毛線,跟phd差的就很多了。我上面那段話,只適用於在美國找工作。)
####
補充一點內容。我在諮詢公司工作,跟科技類公司盈利方式很不一樣。我們的項目,管理模式,data scientists的工作內容,可能也會有相應的特殊性。我不想說太多。但有一點很明顯,data 是有價格的,一個用戶的瀏覽記錄,他的電話號碼,購買記錄,這些價值都不一樣。那我們的data呢,比這些要貴得多得多。我工作里處理的data,也就幾個g,需要spark嗎?需要h2o么?目前不需要。當然我有很熟悉資料庫的同事,他們很擅長從非常非常大的資料庫里幫我篩選出這幾個g。
前幾天跟訊飛的一個大神聊天,他嘲笑我們這就是過家家,連gpu都不用。我承認。但這根本不是重點好嗎,我怎麼覺得我們是私人訂製裁縫,客戶來說要做一套貼身的正裝。我們拿出最好的數據(彷彿羊毛),幫他們設計一整套方案,包括問題抽象,建模(包括做feature),實驗設計,模型解釋,模型展示。這不就跟寫paper做科研很像了么?
有的客戶喜歡時髦的模型,有的客戶喜歡傳統統計。那就沒辦法了,既要會odds ratio,又要知道relu,sgd,cnn這些。沒辦法呀,我是煩死odds ratio了,對於continuous variable我都不知道這玩意有啥用。我說我要做feature elimination來決定feature重要性,consultant說不行,不好解釋。靠,這根本就不是技術問題了,我認栽。
我們的面試比較簡單,很少會讓人寫code,主要還是類似面銀行,保險,廣告這些公司的套路。難點在於過簡歷關吧,對於沒工作經驗的人,有個好文憑,有幾篇好paper,甚至有好gpa還是有很大優勢。有工作經驗那就看經驗跟我們有多相關了,以及一些soft skill。
我感覺知乎上在校學生還挺多的,我寫答案也就是希望給別人介紹多一些的路線。不同企業的數據分析人員的工作也還是不太一樣的,企業內大家的技能樹也不一樣。比如說我領導,技術也就那樣了,但人家商業分析能力強,項目管理的好,理解力又強,我很是佩服,要好好向他學習。
就算是做數據,選擇還很多的,找到自己喜歡的就好。祝大家找工作順利。
沒code沒paper才需要裝逼。無paper、無開源項目開發、無kaggle比賽 的三無研究生說自己做機器學習,本身就有問題。
倒是有面試官更裝逼。你問決策樹細節,根本沒什麼人能答上來,也沒有必要答上來。基礎好的人,花一天看理論,一天讀sklearn代碼,兩天就搞定。按照這人的面試方法,cmu教授也未必能通過。裝b最大苦惱:裝的自己都陶醉了,對面卻一臉懵b。
題主的那些都加不了分,既然是入職就不要搞虛的,你應該說你用什麼實現了什麼。不管這個實現的東西是某大公司的挑戰競賽,還是你實驗室的實驗項目,總之企業需要的是實際動手能力。
有一次去面試,聊到某某演算法,我說哦我看過源碼,細節是blah blah blah
要不是那個源碼是Python 2.7,而我是3.5,我也不會去看2333333
聊到另一個概念,我說主流的模型有A,B,C。其中C的論文我看了一遍沒看懂,大概是blah blah blah。面試官笑了一下,說呵呵我沒看過233333
Anyway,面試哪有技巧。你必須很努力才能看起來毫不費力。
說說我面試別人的一些感受吧。我以兩個例子吧,比如決策樹,假如一個應聘者能把決策樹演算法講清楚,這個講清楚我指的是至少要把節點裂變的方法講清楚,能了解常用的決策樹演算法,以及決策樹如何解決overfit問題。這樣的人姑且算合格,如果一個剛畢業的學生能把上面這些講清楚,那就算合格;
再進一步,他如果說用某個決策樹演算法解決過具體問題,我就會問下他用了多少特徵,數據量多大,準確率和覆蓋率有多少,訓練時間是多長,可能我也不會問多高深的問題,但真正用過一個模型和沒有用過只是死記硬背的人,給出的答案絕對不一樣,沒有真正用過的人幾個數據回答過後,可能就磕磕巴巴,扯不到點子上。
而如果第二關過了,我一般會擴展下問題,考察下應聘者知識的廣度,我可能不要求應聘者精通所有的方法,用過所有的方法,但一專多能還是需要的,你可能只用過一個分類演算法,但至少要多了解幾種分類演算法,因為,之所有有那麼多種分了演算法,就是因為,還沒有發現某種演算法能包打天下,每個演算法可能都有自己擅長解決領域,也有自己的不足;
根據我的經驗,第二關會刷下去很多人。其實,細節最能考察一個人,各種演算法都有自己的坑,沒有真正用過的人,不知道坑在哪裡。要說加分項,我覺得,真正用過踩過不少演算法的「坑」,能把這些坑準確的說出來,必然會加分不少;
「有哪些對某些模型的深刻理解,對A模型和B模型之間的聯繫,對某些數學概念的幾何理解」
這些東西如果是你看來的,不是自己領悟的,覺得能zhuangbi
那我傾向於扣分
有不同於他人的見解,則是大大的加分
更新。。。
內容非原創,是從英語翻譯過來的,翻譯過程中可能會有一些誤解。為避免誤導,請有需要的直接閱讀原文:40 Interview Questions asked at Startups in Machine Learning / Data Science
---------------------------
先把問題答好了在想著加(zhuang)分(bi)的事吧。
機器學習/數據分析崗位面試時會遇到的40個問題。
Q1:給定一個大小為1000列,100,000,000行的基於分類問題的訓練集。你的經理要求你通過降低數據的維度來減少模型計算時間。你的計算機內存有限。你應該如何做?(你可以做一些實際的假設)
Answer:
- 由於計算機內存有限,首先應該關閉計算機上的所有應用,包括瀏覽器,使機器可用內存最大化。
- 對數據集進行隨機採樣。這意味著可以得到一個更小的數據集,比如,有1000個變數和300000行,然後進行計算。
- 為了降低維度,可以把數字變數和類別變數分開,並去除相關變數。對於數字變數,使用相關係數,對於類別變數,使用卡方檢驗(chi-square test)。
- 利用PCA方法挑選出可以解釋數據集中最大方差的成分。
- 可以使用在線學習演算法,如Vowpal Wabbit。
- 利用隨機梯度下降演算法建立一個線性模型。
- 我們也可以利用經驗來估計哪一個預測器(predictors)可以影響因變數。然而,這是一個直觀的方法,錯誤的估計出有用的預測器將導致嚴重的信息損失。
Q2:在PCA中旋轉變換是必要的嗎?如果有必要,為什麼?如果不旋轉這些成分,將會發生什麼?
Answer:有必要。需要旋轉變換(正交的)是因為它能夠最大化了變數之間的差異。主成分分析的初衷就是選擇更少的成分(而不是特徵)使得原始空間的數據投影到變換後的空間具有較大的方差。通過旋轉,成分之間的相對位置不變,而僅僅是改變了點的坐標。
如果不旋轉,PCA的作用就減弱了,我們也需要選擇更多的成分來解釋方差。
Q3:假設有一個癌症檢測的數據集。你建立了一個分類模型,並且得到了96%的精度。為什麼你不應該為此模型的表現感到高興?你還可以做些什麼改進?
Answer:癌症檢測結果是一種不平衡的數據(Imbalance data)。在一個不平衡的數據集中,不應該把精度作為衡量性能好壞的指標,因為96%的精度可能意味著正確預測多數類別,但是我們感興趣的類別是少數類別(4%),這些代表了實際被檢測為患有癌症的人群。因此,為了評估模型的性能,我們應該使用TP(True Positive Rate)、TN(True Negative Rate)和F等指標衡量模型分類精度。如果少數類別分類性能表現的很差,可以採取以下措施:
- 使用欠採樣、過採樣和SMOTE演算法是數據平衡化;
- 通過Probability Calibration方法選擇合適的預測閾值,並且使用AUC-ROC曲線尋找最優閾值;
- 對類別添加權重,以保證少數類別具有更大的權重;
- 也可以使用異常檢測方法。
Q4:為什麼樸素貝葉斯是「樸素」的?
Answer:「樸素」是因為它假設了數據集中的所有特徵是同等重要的並且是條件獨立的。然而,這是一個很強的假設,在實際情況中,這個假設通常很難嚴格成立。
Q5:解釋樸素貝葉斯演算法中的先驗概率、似然和邊緣似然概念?
Answer:先驗概率代表了數據集中因變數的比例,它是指你不依靠額外的信息能做出最有可能的類別猜測。比如,在一個垃圾郵件分類的數據集中,因變數是二進位的(0和1),1(垃圾郵件)的比例是70%而0(非垃圾郵件)的比例是30%,據此,我們可以估計一個新的郵件有70%的可能是垃圾郵件。
似然是指存在其他變數的情況下,把一個給定的觀測分類為1的概率。比如,「FREE」這個詞出現在垃圾郵件中的概率就是似然。邊緣似然是「FREE」出現在任何郵件中的概率。
Q6:你在處理一個時間序列數據集。你的經理要求你建立一個高精度模型,開始你是用了決策樹演算法,因為你知道他在所有的數據上表現的還算不錯。可是後來你嘗試了一個時間序列回歸模型並且得到了比決策樹更高的精度。可能發生上面的情況嗎?為什麼?
Answer:時間序列數據是線性的。然而,決策樹演算法在非線性的情況下具有最好的表現。決策樹不具有魯棒性是因為它不能夠像回歸模型那樣很好的映射線性關係。因此,我們知道線性回歸模型對於具有線性假設的數據集有著更好的預測效果。
Q7:現在有一個項目是要幫助一家食品快遞公司賺更多的錢。問題是,公司的快遞團隊無法按時配送食物,結果客戶很不高興,為了讓他們高興,他們決定終止免費配送服務。那種機器學習演算法可以幫助他們?
Answer:你一定在大腦中快速搜尋機器學習演算法的列表,但是請等等,這個問題考察的是機器學習的基本原理。
這不是一個機器學習的問題,這是一個路徑優化問題。機器學習問題需要包含3件事:
- 要有一個模式;
- 你不能通過數值方法解決它(即使是寫出一個多項式);
- 你需要有數據。
記得通過這三個要素來判定是否可以使用機器學習方法解決一個實際問題。
Q8:你的模型現在表現出低偏差和高方差。你應該使用什麼方法解決?為什麼?
Answer:當模型的預測值接近實際值時會出現低偏差的情況,換言之,模型對訓練集合的分布擬合的很好,這看起來很不錯,但是實際上這樣的模型泛化能力很弱。這意味著,當把這個模型用在一個它從未「看到」過的數據上時,它的表現會讓人很失望。
在這種情況下,我們可以使用Bagging演算法(類似隨機森林)來解決高方差的問題。Bagging演算法把一個數據集分成若干個通過隨機採樣得到的子集,然後,在每個自己上訓練一個基分類器,最後對訓練過的分類器進行投票,將測試樣本指派到得票最高的類中。
此外,也可以通過如下手段解決高方差的問題:
- 使用正則化方法降低模型複雜度;
- 使用變數重要性最高的n個特徵。使用數據集中的所有變數可能導致演算法很難找到有意義的信號。
對準備工作面試的比喻多種多樣,譬如準備上戰場、鼓足勇氣向異性邀約。最佳情況是精神緊張,而最壞的情況則是感到恐懼,做好機器學習面試準備也不例外。你知道你的表現要麼會非常出色,要麼就很糟糕。但是如何確保效果很棒呢?
思維能力+準備工作 > 技術準備
當你已經進入機器學習面試階段時,我相信你的技術能力已經基本過關了。或者說,到了這個時候,再補充更多的技術知識並不一定能幫助你更好地通過面試。就好像高考最後衝刺階段,老師不會讓你做更多的難題,而會教你一些做題的技巧。
那麼在機器學習面試時,什麼可以讓你脫(cheng)穎(gong)而(zhuang)出(bi)?
公司和職位
了解你即將參加面試的職位的產生背景,即為何公司產生了這一空缺職位,將是準備工作必不可少的一部分。了解為何接受面試有助於了解你對公司的價值。例如,如果公司想要尋找一名機器學習工程師,那麼很清楚的是,他們正在嘗試解決很難用傳統演算法解決,或者傳統演算法根本行不通的複雜問題,並且這個問題是他們非常想要解決的問題。
發現核心問題
在申請此類崗位時首先要做的是想像下你處在該崗位的情形。要做到這樣,你需要搜索儘可能多的關於該公司和職位的信息,並整理你的調查,問問自己:我可以為這家公司解決一個什麼樣的核心問題?回答該問題的過程應該能夠讓你很興奮,並促使你進一步了解關於該問題的相關信息:現有的方法、該領域最近的發展狀況——並得出一系列更加具體的挑戰。如果你了解你要加入的團隊,那麼找到一個合適的問題可能很輕鬆;否則,你應當選擇看上去對公司來說最為關鍵的問題。換句話說,思考一下公司面臨的挑戰,然後嘗試確定他們可能會問的問題。
探索潛在數據來源
準備過程的下一步應該是思考:回答這些問題,你需要哪些數據?有些也許能夠立即獲得,但是某些其他的信息可能需要你構建其他關聯性來收集。深入探索公司的基礎設施和運營狀況,他們運轉所用的堆棧是什麼,他們具有什麼樣的 API,他們已經在收集什麼樣的數據,等等。如今的大部分企業都擁有一個博客,他們會在博客上討論他們的挑戰、方法、成功和失敗情況。這些博客可以幫助你深入了解他們的運營情況,並了解他們可能擁有什麼樣的產品和服務。
準備討論機器學習解決方案
現在你需要作出一個非常大的概念性跳躍:機器學習如何適應所有這一切?根據你要實現的目標,以及你認為可能可用的數據,能夠變成學習問題嗎?什麼樣的模型是合適的?舉個例子,很多推薦系統(例如 Netflix 和 Amazon)遇到的主要挑戰是分類歸併,而不是預測,一旦你能夠整理似乎具有相似的偏好和行為的用戶群,就很容易推薦他們可能覺得實用的產品。
這種思維流程將幫助你討論對公司來說最關鍵的問題。沒人會指望你一來參加面試,就能夠針對他們數個月或數年來苦苦解決的問題給出完整的解決方案!但是大家都喜歡對他們的核心問題展現出真實的興趣、激情和好奇心的應聘者。
面試者可能會向你提出更加技術性的問題,具體取決於你的面試官和面試階段,但是你應該抓住一切機會表示你對公司和職位都思考研究過。當他們提出更加開放性的問題(例如「描述當你處理一個項目時遇到的技術性挑戰,以及你是如何解決這一挑戰的?」)時,你可以試著給出和公司的興趣保持一致的答案。
技術和示例問題
成為一名機器學習工程師所必須掌握的5項技能是什麼?我的結論是:
- 計算機科學基礎知識和編程
- 概率和統計學
- 數據建模和評估
- 應用機器學習演算法和庫
- 軟體工程和系統設計
接下來,我們將針對這幾項技能,介紹在機器學習面試中你可能會遇到的相應問題,並向你提供一些應對方法。
計算機科學基礎知識和編程
示例問題
- 如何查看鏈表具有循環?
- 給出二叉搜索樹中的兩個元素,找到它們的最低共同祖先。
- 編寫一個對給定堆棧進行排序的函數。
- 任何基於比較的排序演算法的時間複雜度是什麼?可以證明嗎?
- 如何在加權圖中找到從一個節點到另一個節點的最短路徑?如果某些權重是負值呢?
- 從給定字元串中找到所有迴文子字元串。
*對於所有此類問題,你應該能夠推理出你的方法的時間和空間複雜度(通常用大 O 記法),並嘗試儘可能實現最低複雜度。
*廣泛實踐是熟悉不同類別的問題的唯一方式,這樣才能快速得出有效的解決方案。InterviewBit、LeetCode、Interview Cake、Pramp 和a href="http://interviewing.io/"> http://interviewing.io 等編程/面試準備平台在這方面非常有幫助。
概率和統計學
示例問題
- 某個人群中男人和女人的平均身高為μW和μM 。整個人群的平均身高是多少?
- 最近的一項調查研究指出義大利有三分之一的汽車是法拉利,並且有一半的顏色是紅色。如果你看到遠處有一輛紅色汽車正在向你開來,那麼這輛車是法拉利的概率是多少?
- 你想尋找在你的網站上投放橫幅廣告的最佳位置。你可以讓廣告位大小(或厚度)小、中或大,並選擇垂直頂部、中間或底部位置。至少需要多少總頁面訪問次數和廣告點擊次數,才能95% 確認其中一種位置比所有其他位置效果都要好?
*注意,有很多機器學習演算法都有概率和統計學偏差。從概念上理解這些基礎知識非常重要,但是與此同時,你必須能夠將抽象的公式與現實數量聯繫起來。
數據建模和評估
示例問題
- 一位奶農想要弄明白影響到奶牛產量的因素。她一直在記錄每日溫度(通常是 30°C 到 40°C)、濕度 (60-90%)、消耗的糧食 (2000-2500 kgs),以及產出的奶量(500-1000 升)。
- 你應該如何處理這些數據並建模,以便預測出每天的牛奶產量(升)?
- 這是什麼樣的機器學習問題?
- 貴公司正在構建一個面部表情編碼系統,需要獲得標準高清 1920×1080 像素攝像頭拍攝的照片,並持續指出用戶是否處於以下某種狀態:沒有情緒、開心、憂傷、生氣或害怕。當用戶的臉部沒有出現在相機框架中時,它應該指出特殊的狀態:無。
- 這屬於什麼類型的機器學習問題?
- 如果每個像素由 3 個值構成(紅色、綠色和藍色通道),那麼處理每個圖片的原始輸入數據複雜度是多少(維數)?有沒有降低維數的方法?
- 你會如何表示系統輸出內容?解釋下原因。
- 在過去一個世紀收集的天氣數據得出了氣溫上升和下降的循環模式。你會如何對該數據(平均年度氣溫值序列)建模,以預測未來 5 年的平均氣溫?
- 你在一家在線新聞服務機構上班,工作職責是收集全球各地的文本報告,並將每個故事當做一篇文章,內容整合自不同的新聞媒體。你會如何設計此類系統?你會應用什麼樣的機器學習技巧?
應用機器學習演算法和庫
示例問題
- 我正在嘗試將一個隱藏層神經網路擬合到給定的數據集,我發現迭代訓練多次後,權重來回擺動(變化很大,經常在正值和負值之間搖擺)。我需要調整哪個參數,才能解決這一問題?
- 在訓練支持向量機時,你會優化什麼樣的值?
- 套索回歸使用 L1 範數係數作為懲罰項,而嶺回歸使用 L2 範數作為懲罰項。哪個正則化方法更有可能導致稀疏解,一個或多個係數剛好為 0?
- 在使用反向傳播訓練 10 個層級的神經網路時,我發現前 3 個層級的權重根本不變!後面幾個層級 (4-6) 在變化,但是很慢。這是怎麼回事,如何解決這一問題?
- 我發現了一些關於歐洲小麥種植區域的數據,包括年度降雨量(R,單位是英寸)、平均海拔(A,單位是米)以及小麥產量(O,單位是千克/平方千米)。經過簡單的分析和一些圖表,我認為輸出與降雨量的平方及海拔對數有關:O = β0 + β1 × R2 + β2 × loge(A),我能使用線性回歸將模型中的係數 (β) 擬合到數據嗎?
*數據科學和機器學習挑戰(例如 Kaggle 上的挑戰)是了解不同類型的問題和細微差別的很好方式。嘗試參加儘可能多的挑戰,並應用不同的機器學習模型。
軟體工程和系統設計
示例問題
- 你負責運行一個商務網站。當用戶點擊某個商品以打開詳情頁面時,你會根據商品特徵以及用戶的購買記錄建議另外 5 個用戶可能感興趣的商品,並在頁面底部顯示這些商品。對於這一行為,你會使用什麼服務和資料庫表格?假設可以使用這些服務及表格,請寫一個查詢或流程來獲取要建議的 5 個商品。
- 為了衡量用戶吸引力和視頻熱門程度,你需要從在線視頻播放器(例如 YouTube)上收集什麼數據?
- 一個簡單的垃圾郵件檢測系統的工作原理如下:它一次處理一封電子郵件,並輸出其中每個唯一單詞的出現次數(術語頻率),然後將這些計數與之前見過的、是否標為垃圾郵件的電子郵件進行對比。為了擴大此系統的規模,以便處理大量電子郵件,你能設計一個在多台計算機上運行的映射降低機制嗎?
- 你想生成一個實時可視化圖表,展示用戶目前正在查看和點擊的網頁部分,就像熱圖。為此,你需要在客戶端和伺服器端使用什麼樣的組件/服務/API?
結論
這篇文章想要呈現的是機器學習面試體驗的兩個方面:背景方面和技術方面。如果有一點值得強調的話,那就是你應該避免側重於後者,而忽略了前者。雄心勃勃的機器學習初學者很容易就沉浸在技術準備中,而很少會對面試提出「為何…」這種問題:為何有一個空缺職位,為何該公司要尋找機器學習人才(以及機器學習解決方案!),他們為何對你感興趣?理解這些問題將使你需要解決的技術挑戰變得有意義和背景信息,回答這些問題將使你脫穎而出,成為最適合推動公司向前發展的應聘者 。
作者:Arpan Chakraborty
編譯:優達學城
原文鏈接:http://blog.udacity.com/2016/05/prepare-machine-learning-interview.html
當然是加分項,這些內容至少能代表題主有很強的主動思考意願,雖然工業界經常是調個api,但會調的人多了,能不能把業務作出效果可就不一定了。有句話不是說細節是魔鬼嘛。前提是別不懂裝懂。
真正的加分項是你如何解決問題,創造有價值的業務,為公司帶來收益。理論公式推導屬於科研工作的組成部分,科研和工業還是有很大的區別,老闆招一個數據挖掘工程師不是來搞科研做理論研究的,是為公司創造價值的。對於數據挖掘的學習者,這些理論知識的學習很有必要,但是只會理論不會解決實際問題,這和我們學習數據挖掘的目標是本末倒置的。
理論能力的確能加分,面試官能考查出你對模型的把握程度,但切忌東拼西湊看資料,應系統的掌握幾個重要模型的原理。
但不要忘了根本計算機基礎,編碼能力,工業界除了bat大公司的部分團隊有那些只會python,r的演算法科學家,其他大多需要你強悍的編碼能力,因為沒有多餘的人力來幫你把演算法實踐上線,因此編碼基礎還是第一位。
現在很多學生或者工作一兩年的年輕人,都想做機器學習,去看一堆書但是沒深入,沒理解透徹,實踐就是跑一個sklearn,認為這樣就是機器學習演算法工程師。由此而忽略了數據結構演算法基礎,工程項目實踐,面試時體現出糟糕的編碼能力和業務理解能力。
我認為實踐經驗是加分項,掌握幾個經典模型並有過實踐。如果是校招你有大把的時間去理解原理並嘗試自己工程實現,從單機到並行,去理解透徹。如果是社招,除了基礎原理,我認為以往的模型演算法實際經驗,解決問題的能力更重要。
你就說你做過的項目,在項目中如何和隊友協作,設計了哪些方法處理異常值就夠了。你要裝逼的話最好針對如何分析數據,找到方法能夠利用機器學習為公司的業務做出提升(比如幫某公司的健康設備設定出預測對客戶體型變化(減肥)的最佳的當日鍛煉時間)。
至於你工作內容,大部分時間模型全是調包,挨個試……大部分時間都在清洗數據,你要不是大牛也涉及不到數學上去解決演算法,工作中你最多也就是賣個萌用np.eye()來做one_hot encoding,也是自己看著清爽。至於你如何理解卷積的物理意義,你做NLP時對LSTM和GRU的比較和使用,誰TM在乎。
我覺得題主的意思是,假如自己乾貨已經足夠了,那麼在面試中知道哪些裝逼的點、技巧或者方式,比較有可能錦上添花、克敵制勝呢?所以,我認為:
1. 機器學習中可以裝的逼,和其他領域相比,也沒有什麼特別的,所以推薦花點時間,研讀一下:
《假裝的藝術》(美,勞倫斯 懷特德)鏈接:http://pan.baidu.com/s/1kV4ZzRx 密碼:hnru
萬變不離其宗,一通百通,融會貫通
2. 面試場合裝逼,和其他場合最大的區別是,你需要征服的是HR的口味——也就是說,他們需要什麼,咱們就給什麼!
具體而言,
- 李委員領導下的百度,可能比較喜歡技術細節的裝逼,所以是不是AI獨角獸的視野分析,更能征服在場的考官們?
- 馬主席籠罩下的阿里,可能比較喜歡運營思想的出色,所以是不是阿里帝國大殺四方流芳百世風格的演講,更能get到G點?
- 小馬哥執掌的騰訊,可能比較喜歡通過產品致勝千里,所以是不是QQ和微信之後,物聯網和5G時代新一個獨領風騷的產品創意,比較驚艷?
- 任大教主統領下的華為,可能比較希望能夠在長長久久地把產品銷售到南北極等每個角落,所以是不是如何發揮狼性文化早日將菊花企標映照到外太空的宏偉計劃,更能狗脫穎而出呢?
…… 不一而足,因地制宜,隨機應變。
好運!加油!
唉只是想面個實習生各位大佬至於這麼為難我們嗎
世界頂級的機器學習大會的best paper award.現在難道到了人人都能做機器學習的地步了?還是公司跟風導致的「人才」需求巨大?
退而求其次之也是在kaggle中拿過前100名的名次吧。
保研面試的時候,裝了一個X後某導師當場放了offer(當然,本寶寶最後沒有選擇該校)。
老師跟我聊他現在正在做的一個項目,他說現在這個項目遇到一個問題,就是用統計機器學習的方法做出來的模型的漂移現象嚴重。具體的項目不能透露,但是意思就是用當前時間和場景下採集的數據集訓練出的高精度模型,放到其他看似相同的場景就會表現很差,甚至同樣的場景隨時間推移而導致模型越來越差。問我解決思路。
然後本寶寶「老師,我覺得您這個項目根本不需要機器學習技術」
老師:
hhh當然不是單純為了裝x而裝x了,那樣就無法圓場惹。
其實現在有一些人給我的感覺是「為了用機器學習而設計方案」,而且竟然會發生在大學裡,而且這樣的課題竟然申請通過了。
由於不能透露項目信息,感覺講的好假大空啊(′Д` )
總之意思就是,在工程上,第一重點不是該用哪個機器學習模型,而應該是任務本身的結構。所以在面試中考察工程中的機器學習問題是,與其將各種高大上的前沿演算法/模型往任務上生套,還不如先分析一下這個任務本身的複雜性和先驗知識。
-------
還有個裝X失敗的例子。
大學裡想找個實習的時候,去了一家小企業面試。面試官讓我講講貝葉斯定理的時候,我在紙上隨手寫了個
P(A)P(B|A)=P(B)P(A|B)
結果還沒等我開口,面試官就說寫的不對。
我說:「這是對的,將左邊的P(A)移到右邊之後就是常見的形式,實際上大部分問題中P(A)也不用展開成全概率的形式」
面試官:「你這寫都寫錯了,再回去考慮考慮吧」
_(:з」∠)_對於該面試官我實在不知道該說什麼...反正以後面試時,還是先把傳統的東西講了,再講帶有裝X性質的東西吧...不要回答,這是HR和技術面試官挖的坑
推薦閱讀:
※去蘋果公司 (Apple) 總部面試應該如何著裝?
※帶牙套對於面試或者說話有影響嗎?
※HR 們面試的時候會看外表嗎?
※參加北電文學系(戲文專業)的面試有什麼經驗和技巧?