如何快速get到AI工程師面試重點,這12道題必備

ai科技大本營 發佈 2019-12-23T05:42:43+00:00

作者| JP Tech譯者 | 劉暢編輯 | Jane出品 | AI科技大本營【導讀】2020 年的三月春招要來了,現在想要 Get 一個算法工程師的實習或全職機會,已經不是一件易事了。如果現在著手複習,茫茫題海不能毫無重點,我們要先抓住那些剛需必備的面試題。

作者 | JP Tech

譯者 | 劉暢

編輯 | Jane

出品 | AI科技大本營(ID:rgznai100)

【導讀】2020 年的三月春招要來了,現在想要 Get 一個算法工程師的實習或全職機會,已經不是一件易事了。如果現在著手複習,茫茫題海不能毫無重點,我們要先抓住那些剛需必備的面試題。這次,作者收集了 12 個 AI 工程師職位的面試問題,助你攻下你心儀的 offer。

1、介紹一下 BN 層的含義

這是非常好的一個問題,因為它能顯示出候選者在使用神經網絡模型時,掌握的知識面夠不夠全面。這個問題可以有不同的回答,但需要囊括以下主要的思想:

BN層是一種有效的訓練神經網絡模型方法。此方法的目標是將特徵(經過激活後每一層的輸出)歸一化為標準偏差為1的零均值狀態。因此,非零均值時它是如何影響模型訓練呢:

第一,需要理解的是非零均值是指數據未分布在0值附近,相反大多數數據具有大於零或小於零的值。結合高方差問題,數據可能變得非常大或非常小。在訓練深層的神經網絡時,此問題很常見。當特徵的在固定的間隔(從小到大)內分布的不夠穩定時,它將對網絡的優化過程產生影響。眾所周知,優化神經網絡需要使用導數計算。假設一個簡單的層計算公式為y =(Wx + b),則y對w的導數如下:dy = dWx。因此,x的值直接影響導數的值(當然,神經網絡模型中的梯度的概念不是這麼簡單,但從理論上講,x會影響導數)。因此,如果x帶來不穩定的變化,則導數可能太大或太小,從而導致模型學習的不夠穩定。這也意味著在使用批歸一化時,我們可以在訓練時使用更大的學習率。

第二,BN層可以避免x的值經過非線性激活函數後達到飽和的現象。因此它可以確保激活後不會過高或者過低。這有助於減少對初始參數的依賴。

第三,BN層也可以是一種正則化方法,有助於最大程度的減少過擬合。當使用BN層,不需要使用過多的dropout層。因為當我們drop down網絡時,不必擔心丟失太多的信息。當然,仍然建議同時使用兩種技術。

2、介紹偏差和方差的含義以及它們之間的trade-off

什麼是偏差?可以理解,偏差是當前模型的平均預測與預測的實際結果之間的差異。具有高偏差的模型表明它不太關注訓練數據。這會使模型過於簡單,並且在訓練和測試過程中均無法達到良好的準確性。這種現象稱為欠擬合。

方差可以簡單地理解為模型輸出在數據點上的分布(或聚類)。方差越大,該模型就越有可能更關注訓練數據,並且無法對未見過的數據進行泛化。結果,該模型會在訓練集上獲得非常好的結果,但是對於測試數據,結果卻非常差。這種現象稱為過擬合。

這兩個概念間的關聯如下圖所示:

在上圖中,圓心是一個可以完美預測的模型。實際上,這只是理想狀態。隨著模型預測分布離圓心越來越遠,預測結果越差。

我們可以更改模型,以便可以儘可能多地增加落入圓心的模型。這當然需要在「偏差」和「方差」值之間保持平衡。如果我們的模型過於簡單且參數很少,那麼它可能具有較高的偏差和較低的方差。

另一方面,如果我們的模型具有大量參數,那麼它將具有高方差和低偏差,這是我們在設計算法時計算模型複雜度的基礎。

3、假設深度學習模型已經學到了一千萬個人臉向量,如何通過查詢最快地找到一個新人臉?

這個問題與深度學習算法在實踐中的應用有關,這個問題的關鍵是對數據進行索引的方法。這是將One Shot Learning用於面部識別問題的最後一步,但這是將應用程式部署在實踐中最重要的一步。

基本上,對於這個問題,您應該首先介紹One Shot Learning的人臉識別方法。可以將其簡單地理解為將每張臉變成一個向量,而新的人臉識別就是找到最接近(最相似)輸入臉的向量。通常,人們將使用具有自定義損失函數(稱為三元組損失)的深度學習模型來實現此操作。

但是,隨著本文開頭圖像數量的增加,在每次識別中計算1000萬個矢量的距離並不是一個明智的解決方案,這會使系統變慢。我們需要考慮在真實向量空間上為數據建立索引的方法,以使查詢更加方便。

這些方法的主要思想是將數據劃分為用於查詢新數據的簡單結構(可能類似於樹形結構)。當有新數據可用時,在樹中進行查詢有助於快速找到距離最近的向量。

這裡提供幾種方法,如局部敏感hash。Faiss等

4、在分類問題中,準確率指標是否完全可靠?通常使用哪些指標來評估模型?

對於分類問題,有許多不同的評估方法。對於準確率,僅將正確預測的數據點數量除以總數據即可。這聽起來很合理,但實際上,對於不平衡的數據問題,該數據並不足夠。假設我們正在建立一個針對網絡攻擊的預測模型(假設攻擊請求大約占請求總數的1/100000)。

如果模型預測所有請求都是正常的,則準確性也高達99.9999%,該數字在分類模型中通常不可靠。上面的準確性計算通常會向我們顯示正確預測了百分之幾的數據,但沒有指出每個類別詳細的分類信息。相反,我們可以使用混淆矩陣。基本上,混淆矩陣顯示了實際上有多少個數據點屬於一個類,並且預計會落入某類中。它具有以下形式:

除了表示和定義分類每個閾值相對應的TP和FP指標變化之外,我們還有一個稱為ROC曲線的圖表。基於ROC,我們可以知道該模型是否有效。

越接近左上角,結果越理想,如圖中橙線所示。即TP值高,而FP值低。

5、如何理解反向傳播?解釋一下其作用機理。

該問題屬於神經網絡的基礎知識,回答時需要指明以下幾點:

1、前向計算過程是幫助模型計算每層的權重,結果計算將得出結果yp。接下來將計算損失函數的值;損失函數的值將顯示模型的好壞。如果損失函數不夠好,我們需要找到一種方法來減小損失函數的值。訓練神經網絡實質上是使損失函數最小化。損失函數L(yp,yt)表示模型的輸出值yp與數據標籤的實際值yt之間的差異程度。

2、為了減少損失函數的值,我們需要使用導數。反向傳播可以幫助計算網絡每一層的導數。根據每層導數的值,使用優化器(Adam,SGD,AdaDelta...)去更新網絡的權重。

3、反向傳播使用鏈式規則或者導數函數來計算從最後一層到第一層,每一層的梯度值。

6、激活函數的意義是什麼?激活函數的飽和點是多少?

  • 激活函數的意義

激活函數的誕生是為了打破神經網絡的線性。這些函數可以簡單地理解為決定信息是否通過神經元的過濾器。在神經網絡訓練期間,激活函數在調整導數斜率中起著重要作用。在接下來的部分中將進一步討論諸如Sigmoid,Fishy或ReLU等激活函數

但是,我們需要了解,這些非線性函數的性質使神經網絡有可能學習比僅使用線性函數更複雜的函數表示形式。大多數激活功能是連續且可區分的功能

這些函數是連續函數,也就是說,如果輸入具有較小且可微的變化(在其定義的域中的每個點都有導數),則輸出中的變化很小。當然,如上所述,導數的計算非常重要,這是我們的神經元是否可以訓練的決定性因素。

  • 激活函數的飽和範圍

諸如Tanh,Sigmoid和ReLU之類的非線性激活函數均具有飽和區間。

激活函數的飽和範圍是無論輸入值如何改變,函數的輸出也不會改變的間隔。改變的間隔存在兩個問題,即在神經網絡的前向上,在飽和區間內,不同的輸入將得到相同的輸出。導致整個模型中的數據流相同,這種現象是協方差shifting。第二個問題是在反向時,飽和區間的導數為零,因此網絡幾乎學不到任何東西。這就是為什麼我們需要把值範圍設置在零均值的原因。

7、模型的超參數是什麼?與模型參數有什麼不同。

  • 什麼是模型參數?

機器學習本質是需要數據,假設我們的數據是天氣信息,例如溫度,濕度,溫度等,而機器要完成的是在上述因素與愛人是否生氣之間找到聯繫?現在假設我們使用變量y來表達我們的愛人是生氣還是不生氣?變量x1,x2,x3…表示天氣元素。我們將關係歸因於找到函數f(x),如下所示:

其中的係數w1,w2,w3..w_1,w_2,w_3 ..w1,w2,w3 ..就是所謂的模型參數。因此,當我們說找到問題的最佳模型時,是指我們已經在現有數據集上找到了最適合該問題的模型參數。

  • 什麼是模型超參數?

模型超參數其實不是模型參數。這是兩個完全不同的概念,如果從訓練數據本身對模型進行建模,則模型的超參數將完全不同。它的目的如下:

  • 訓練過程中,幫助模型找到最合適的參數

  • 通常是模型訓練人員親自挑選

  • 可以基於幾種啟發式策略進行定義

超參數舉例如下:

  • 學習率

  • 支持向量機的C和sigma參數

  • KNN中的k係數

8、學習率太高或者太低會怎麼樣?

當模型的學習率設置得太低時,模型訓練速度將非常慢,因為它每次對權重的更新都很小。在達到局部最佳點之前,需要進行許多次的更新。

如果學習率設置得太高,權重每次更新變化太大,模型有可能不會收斂。在每一次權重更新的步驟中,模型容易跨過局部最優,然後一直在局部最優點附近波動。

9、當輸入圖像大小增加一倍時,CNN的參數量增加多少倍?為什麼?

對於面試者來說,這是一個極具誤導性的問題,因為大多數人會朝著CNN參數量將增加多少倍的方向思考。但是,讓我們看一下CNN的結構:

我們可以看到,CNN模型的參數量取決於濾波器的數量和大小,而不取決於輸入圖像的大小。因此,將圖像輸入大小加倍並不會改變模型的參數量。

10、有哪些處理不平衡數據的方法?

這是一個測試面試者解決真實數據問題的能力。通常,實際數據每個類別的數據量方面會有很大差異。對於實際的數據集,可能會出現數據不平衡的情況。現在,我們可以考慮以下技術:

  • 選擇正確的度量標準來評估模型:如上文所述,對於不平衡的數據集,使用準確率進行評估是不夠全面的。應該選擇合適的評價標準,例如精度,召回率,F1分數,AUC

  • 對訓練數據集進行重採樣:除了使用不同的評價標準外,人們還可以應用技術來獲取不同的數據集。從不平衡集中創建平衡數據集的兩種方法是欠採樣和過採樣,其方法是重複,bootstrap或SMOTE。

  • 集成許多不同的模型:創建更多數據來泛化模型在實踐中並不總是可行的。例如,你有一個包含1000個數據的稀有類,一個包含10,000個數據樣本的大類。因此,我們可以嘗試訓練10個模型,而不是去再找9000個稀有類的數據樣本進行模型訓練。每個模型都使用1000個稀有類和1000個大類進行訓練。然後使用集成技術去獲得最佳結果。

  • 重新設計模型-損失函數:使用懲罰技術嚴厲懲罰損失函數中的大類,以幫助模型本身更好地學習稀有類別的數據。使得損失函數的值在所有類別中更為全面。

11、在訓練深度學習模型時,Epoch,batch和Iterration都是什麼概念?

這些是訓練神經網絡時非常基本的概念,但現實是,在區分這些概念時,很多面試者感到困惑。你可以像下面這樣來回答問題:

Epoch:代表整個數據集的疊代(所有內容都包含在訓練模型中)。

Batch:由於我們無法一次將整個數據集送入神經網絡,因此我們將數據集分為幾批較小的數據集。

Iteration:是運行一個epoch所需的batch數。假設我們有10,000張圖像作為數據,並且批處理的大小(batch_size)為200。那麼一個epoch將包含50個Iteration(10,000除以200)。

12、數據生成器的概念是什麼?我們什麼時候需要使用它?

在編程中,生成函數也很重要。數據生成函數可幫助我們直接生成數據以適合每個訓練批次中的模型。

利用數據生成函數有助於訓練大數據。由於數據集並不一定總是需要全部加載到RAM中,這會浪費內存,而且,如果數據集太大,則可能導致內存溢出,並且輸入數據的處理時間會更長。

原文連結:

https://medium.com/@itchishikicomm/12-deep-learning-interview-questions-you-should-not-be-missed-part-3-47a1dbf879f1

https://medium.com/@itchishikicomm/12-deep-learning-interview-questions-you-should-not-be-missed-part-2-8f42deeb4483v

https://medium.com/@itchishikicomm/12-deep-learning-interview-questions-you-should-not-be-missed-part-3-47a1dbf879f1

關鍵字: