跳槽季·機器學習面試不徹底指南

本文由 「AI前線」原創,原文連接: 跳槽季·機器學習面試不徹底指南
做者|Vincent
編輯|Emily

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


概述github

本文是機器學習面試不徹底指南,由於面試和經驗這些東西也每每都是一家之言,可參考,但並不必定就徹底適合你。因此,咱們蒐集了一些比較靠譜的經驗,整合起來放送給你,但願可以對你的職業生涯有所幫助。面試

一些善意的提醒算法

相信可以進入面試的朋友,簡歷必定是優中選優的,因此這部分咱們很少做贅述。可是,當面試官讓你當面對簡歷中的項目經驗進行描述的時候,請必定記住一條原則:編程

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

舉個簡單的例子:網絡

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…

www.reddit.com/r/MachineLe…

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

相關文章
相關標籤/搜索