標籤:

跳槽季·機器學習面試不完全指南

本文由 「AI前線」原創,原文鏈接:跳槽季·機器學習面試不完全指南

作者|Vincent

編輯|Emily

AI 前線導讀:」春節就這麼一眨眼過去了,眼看著就到了「金三銀四」的跳槽黃金季節了,想必在去年飽經磨礪的你已經有了新的方向和目標,此時正在摩拳擦掌、蓄勢待發,世界人工智慧未來的發展重任眼看著就要落在了你們的肩上!但是!當你們憑藉強大的簡歷通過了企業的篩選,來到面試環節,面對面試官那深邃而憂鬱的目光,你能夠招架幾個回合?所以,我們整理了一些機器學習面試前你需要準備的要點,供你參考,乾貨滿滿喲~」

概述

本文是機器學習面試不完全指南,因為面試和經驗這些東西也往往都是一家之言,可參考,但並不一定就完全適合你。所以,我們搜集了一些比較靠譜的經驗,整合起來放送給你,希望能夠對你的職業生涯有所幫助。

一些善意的提醒

相信能夠進入面試的朋友,簡歷一定是優中選優的,所以這部分我們不多作贅述。但是,當面試官讓你當面對簡歷中的項目經驗進行描述的時候,請一定記住一條原則:

用可量化的方式去介紹你之前的項目。

舉個簡單的例子:

1.曾參與訓練了 XX 機器學習系統,取得了不錯的成果。

2.分別使用 Keras,Tensorflow 和 Node.js 設計並部署了一個深度學習模型,進行目標識別。與傳統神經網路(例如 ResNet)相比,該模型具有 1/30 的模型大小,1/3 的訓練時間,1/5 的推理時間,以及 2 倍的收斂速度。

如何?是不是明顯感覺到第二個更好?因為它量化了你的貢獻,並突出了你使用的特定技術(證明你具有相關專業知識)。僅僅需要簡單記錄你在實驗過程中所做的事情。但不要誇大,多花一些時間瀏覽你的簡歷以及過去的項目,以確保你在面試現場可以解釋得很好。

根據面試的階段,你可能會被問到不同的事情,你會被問到幾乎所有科技工作中可能要求的東西,比如幾個簡單的編程問題。

很多時候,看似簡單的問題反映了面試官真正關心的東西。 你有解決這個問題的好方法嗎? 你收集要求還是只是做出假設?你測試了你的代碼嗎? 你是如何選擇你的測試用例的? 你做了什麼折衷? 你是否意識到需要做一個權衡?

當被問到機器學習的內容時,面試官首先希望知道你熟悉這個術語,並且知道常用的技術框架。 沒有必要知道每種演算法的所有細節,但是在回答中需要證明你知道各種框架的基本屬性。 你還可能會被問到你將如何處理一個特定的問題。

另外,不要陷入假設每個問題都是機器學習問題的陷阱。 有些面試官經常看到應聘者在回答問題時答非所問,不能因為你懂機器學習,就把所有問題都歸結為機器學習的問題。

知識點總結

為了方便各位讀者閱讀和收藏,我們為大家總結了一些比較實用的知識點,同時在文章的底部還會附上本文參考的幾篇文章的鏈接,各位讀者可以自行取閱。

先看看下面這張圖:

這是一位機器學習專家給出的機器學習面試前,一個應聘者需要了解的技術要點。右側的技術要點從上到下分別為:

  1. 線性代數、微積分、概率和統計
  2. 信息理論
  3. 數據分析能力
  4. 機器學習 or 深度學習建模能力
  5. A/B 測試技能
  6. 數據密集型應用系統的設計
  7. 用於計算密集型應用程序的優化知識
  8. 可擴展性和容錯性知識

左邊的彩色字體分別對應了:機器學習研究員、大數據科學家、機器學習工程師、機器學習架構師。右邊相同顏色的方框裡面包含的,就是這一職位在面試前需要重點準備的科目,如果年後你就要開始面試了,那麼可以趁著這段假期,對照著這張圖進行查漏補缺。

以下是機器學習面試常見的基礎概念。

線性回歸

  • 如何學習參數:最小化損失函數
  • 如何最小化損失函數:梯度下降
  • 正則化:
    • L1(Lasso 回歸):可以將某個係數縮小到零,從而執行特徵選擇;
    • L2(Ridge 回歸):以同樣的比例收縮所有係數 ; 幾乎總是勝過 L1;
    • 合併(彈性網)。
  • 假定特徵和標籤之間存在線性關係
  • 可以添加多項式和交互特徵以增加非線性

邏輯回歸

  • 用於二分類問題的廣義線性模型(GLM)
  • 將 sigmoid 函數應用於線性模型的輸出,將目標壓縮到範圍 [0,1]
  • 通過閾值做出預測:如果輸出> 0.5,預測 1;否則預測 0
  • softmax 函數:處理多分類問題

KNN

給定一個數據點,使用一定的距離度量(例如歐幾里德距離)計算 K 個最近的數據點(近鄰)。對於分類,可以取大多數近鄰的標籤;對於回歸,我們採用標籤值的均值。

對於 KNN 來說,我們不需要訓練模型,我們只是在推理時間內進行計算。這可能在計算上很昂貴,因為每個測試樣本都需要與每個訓練樣本進行比較以了解它們有多接近。

有近似的方法可以有更快的推斷時間,通過將訓練數據集劃分成區域。

注意,當 K 等於 1 或其他小數字時,模型容易出現過擬合(高方差),而當 K 等於數據點數或更大的數字時,模型容易出現欠擬合(高偏差)。

SVM

  • 可以執行線性,非線性或異常值檢測(無監督)
  • 大間距分類器:不僅有一個決策邊界,而且希望邊界距離最近的訓練點儘可能遠
  • 最接近的訓練樣例被稱為支持向量,因為它們是繪製決策邊界所基於的點
  • SVM 對特徵縮放比較敏感

決策樹

  • 非參數,有監督的學習演算法
  • 給定訓練數據,決策樹演算法將特徵空間劃分為區域。為了推斷,我們首先觀測測試數據點落入哪個區域,並取平均標籤值(回歸)或多數標籤值(分類)。
  • 構造:自上而下,選擇一個變數來分割數據,使得每個區域內的目標變數儘可能均勻。兩個常見的指標:基尼不純或信息增益,在實驗中兩者結果差異不大。
  • 優點:簡單地理解和解釋,模仿人類決策過程
  • 壞處:
    • 如果我們不限制樹的深度,可以容易地過度擬合可能不夠魯棒:訓練數據的小改動
    • 可能導致完全不同的樹
    • 不穩定性:由於其正交決策邊界,對訓練集旋轉敏感

Bagging

為了解決過擬合問題,我們可以使用稱為 bagging(bootstrap aggregating)的集成方法,它減少了元學習演算法的方差。bagging 可以應用於決策樹或其他演算法。

這是一個很好的例子:

  • bagging 是有放回採樣。在子採樣無放回時,則稱為 pasting。
  • bagging 因其對性能的提高而廣受歡迎,也因為單獨的機器學習模型可以並行訓練,並且可以很好地擴展。
  • 當機器學習模型儘可能彼此獨立時,集成方法效果最好
  • 投票: 軟投票(對所有演算法的預測概率取平均值)通常比硬投票更有效。
  • 袋外(out-of-bag)實例(37%)可以作為 bagging 的驗證集。

隨機森林

隨機森林通過增加一些隨機性來進一步改善 bagging。在隨機森林中,只隨機選擇一部分特徵來構建樹(而不是子採樣實例)。好處是隨機森林減少了樹之間的相關性。

假設我們有一個數據集。有一個信息增益很高的特徵,以及一些預測性較弱的特徵。在 bagging 樹中,大多數樹將在頂部拆分時使用這個預測性很強的特徵,因此使得大部分樹看起來相似,並且高度相關。與互不相關的結果相比,對高度相關的結果取平均不會大量降低方差。在隨機森林中,每一次劃分節點我們只考慮特徵的一個子集,並因此通過引入更多不相關的樹來進一步減少方差。

在實踐中,調整隨機森林需要擁有大量的樹(越多越好,但需要考慮計算約束)。此外,用 min_samples_leaf(葉節點的樣本的最小數量)來控制樹大小和過擬合。

特徵的重要性:

在決策樹中,更重要的特徵可能更接近樹的頂部。通過計算它在森林中所有樹上出現的平均深度,我們可以得到一個特徵對於隨機森林的重要性。

Boosting 樹

原理

Boosting 樹以迭代方式建立在弱學習器身上。在每次迭代中,都會添加一個新的學習器,而所有現有的學習器都保持不變。所有的學習器根據他們的表現(例如,準確性)進行加權,並且在加入弱學習器之後,對數據進行重新加權:錯誤分類的樣例獲得更多的權重,而正確分類的樣例減少權重。因此,未來的弱學習器會更多地關注之前的弱學習器錯誤分類的樣例。

與隨機森林(RF)的區別

  • RF 是並行訓練,而 Boosting 是按順序訓練
  • RF 降低了方差,而 Boosting 通過減少偏差來減少誤差

XGBoost(極端梯度提升):

XGBoost 使用更正則化的模型來控制過擬合,從而使其具有更好的性能。

Stacking

  • 不是使用簡單的函數 (例如硬投票) 來集成單個學習器的預測,而是訓練一個模型來執行這個集成過程。
  • 首先將訓練集分為兩個子集:第一個子集用於訓練第一層的學習器
  • 接下來,第一層學習器被用於對第二子集進行預測(元特徵),並且這些預測被用於在第二層訓練另一個模型(以獲得不同學習器的權重)
  • 可以在第二層中訓練多個模型,但這需要將原始數據集分為三部分

MLP

MLP,多層前饋神經網路。每一層可以有多個神經元,下一層中每個神經元的輸入是上一層中所有神經元輸出的線性或非線性組合。為了訓練網路,逐層反向傳播誤差。理論上 MLP 可以近似任何函數。

CNN

Conv 層是卷積神經網路的基礎結構。Conv 層由一組可學習的濾波器(例如 5 × 5 × 3,寬×高×深)組成。在前向傳遞期間,我們將濾波器在輸入上滑動(或更準確地說,卷積)並計算點積。當網路反向傳播誤差時,再次進行學習。

初始層可以捕捉低級特徵(如角度和邊緣),而後面的層可以學習前一層低級特徵的組合,因此可以表示高級特徵,如形狀和目標部分。

RNN 和 LSTM

RNN 是神經網路的另一個範式,有不同層的神經元,每個神經元不只把前一層神經元的輸出作為輸入,而且把同一層的前一個神經元的輸出作為輸入。

這看起來很棒,但實際上由於相同矩陣的一系列乘法運算,會造成梯度消失或梯度爆炸,使 RNN 幾乎不能運作。為了解決這個問題,我們可以使用 RNN 的一個變種,長短時記憶(LSTM),它能夠學習長期的依賴關係。

LSTM 背後的數學演算法可能相當複雜,但直觀上 LSTM 引入了輸入門 - 輸出門 - 遺忘門 - 記憶單元(內部狀態)

LSTM 模仿人類的記憶過程:忘記舊的東西(舊的內部狀態×遺忘門)並重新輸入(輸入節點×輸入門)

word2vec

  • 淺層,雙層神經網路,經過訓練可以構建詞語的語言上下文
  • 以一個大的語料庫為輸入,產生一個向量空間,一般為幾百維,並且語料庫中的每個單詞指向空間中的一個向量
  • 關鍵的思想是上下文:經常出現在同一語境中的單詞應該具有相同或相反的意義。
  • 兩種風格
  • 連續詞袋(CBOW):給定周圍上下文單詞的窗口,模型預測出當前單
  • skip gram:使用當前單詞預測周圍的上下文單詞

生成與判別

  • 判別演算法模型 p(y | x; w),即給定數據集和學習參數,得出 y 屬於特定類的概率是多少。判別演算法不關心數據是如何生成的,它只是對給定的樣例進行分類
  • 生成演算法嘗試對 p(x | y)進行建模,即給定特徵的類別,得出它的分布。生成演算法模擬如何生成數據。

給定一個訓練集,像邏輯回歸或感知器這樣的演算法會試圖找到一條直線,即決策邊界,將大象和狗分開。然後,將新的動物分類為大象或狗,演算法會檢查樣本在決策邊界的哪一邊,並據此做出預測。

下面是一種不同的方法。首先,看大象,我們可以建立一個大象看起來像什麼的模型。然後,看著狗,我們可以建立一個狗的樣子的單獨模型。最後,為了對新動物進行分類,我們可以將新動物與大象模型進行匹配,並將其與狗模型進行匹配,看看新動物看起來更像大象還是更像我們在訓練集中看到的狗。

參數與非參數

  • 用一組固定數量的參數(與訓練樣本的數量無關)對數據總結的學習模型稱為參數模型。
  • 訓練前未確定參數數量的模型。非參數並不意味著他們沒有參數。相反,隨著數據量的增加,非參數模型(可能)會變得越來越複雜。

以上是機器學習的不完全面試指南,也許跟你自己學習的方法和路線會有些許出入,不要擔心,所有的方法都只是參考,真正適合你的,需要你自己去探索,資料求精不求多,存在腦子裡面的叫知識,存在硬碟里叫文檔

希望你的職業生涯一片無悔,加油!

參考文章

github.com/ShuaiW/data-

github.com/ShuaiW/data-

reddit.com/r/MachineLea

更多乾貨內容,可關注AI前線,ID:ai-front,後台回復「AI」、「TF」、「大數據」可獲得《AI前線》系列PDF迷你書和技能圖譜。

推薦閱讀:

機器學習篇-指標:AUC
tensorflow數據的讀取
第三章 線性模型
機器學習-各種 Learning 概念簡明介紹
機器學習入門:邏輯回歸案例

TAG:機器學習 |