天天看點

不容錯過的12個深度學習面試問題!

導讀

這12個問題是目前面試中最熱門的問題,既是非常基礎的問題,也能看出面試者的水準,具有區分度。無論是面試官還是求職者都可以看看。

不容錯過的12個深度學習面試問題!

這些是我在面試人工智能工程師職位時經常問的問題。事實上,并不是所有的面試都需要使用所有這些問題,因為這取決于應聘者以前的經驗和項目。通過大量的面試,特别是與學生的面試,我收集了 12 個在深度學習中最熱門的面試問題,今天将在這篇文章中與大家分享。我希望能收到你的許多意見。好了,别再啰嗦了,我們開始吧。

1. 介紹 Batch Normalization 的意義

這是一個非常好的問題,因為它涵蓋了候選人在使用神經網絡模型時需要知道的大部分知識。你可以用不同的方式回答,但需要闡明以下主要觀點:

不容錯過的12個深度學習面試問題!

Batch Normalization 是訓練神經網絡模型的一種有效方法。該方法的目标是将特征(每層激活後的輸出)歸一化為均值為 0,标準差為 1。是以問題在于非零的均值是如何影響模型訓練的:

  • 首先,可以了解為非零均值是指資料不圍繞 0 值分布,但資料中大多數值大于零或小于零。結合高方差問題,資料變得非常大或非常小。這個問題在訓練層數很多的神經網絡時很常見。特征沒有在穩定區間内分布(由小到大),這将影響網絡的優化過程。衆所周知,優化神經網絡需要使用導數計算。假設一個簡單的層計算公式是 y = (Wx + b), y 對 w 的導數是:dy = dWx。是以,x 的取值直接影響導數的取值(當然,神經網絡模型中梯度的概念并不是那麼簡單,但從理論上講,x 會影響導數)。是以,如果 x 帶來不穩定的變化,其導數可能太大,也可能太小,導緻學習模型不穩定。這也意味着當使用 Batch Normalization 時我們可以在訓練中使用更高的學習率。
  • Batch Normalization 可以避免 x 值經過非線性激活函數後趨于飽和的現象。是以,它確定激活值不會過高或過低。這有助于權重的學習,當不使用時有些權重可能永遠無法進行學習,而用了之後,基本上都可以學習到。這有助于我們減少對參數初始值的依賴。
  • Batch Normalization 也是一種正則化形式,有助于最小化過拟合。使用 Batch Normalization,我們不需要使用太多的 dropput,這是有意義的,因為我們不需要擔心丢失太多的資訊,當我們實際使用的時候,仍然建議結合使用這兩種技術。

2. 解釋 bias 和 Variance 之間的權衡關系

什麼是bias?可以了解,bias是目前模型的平均預測與我們需要預測的實際結果之間的差異。一個高 bias 的模型表明它對訓練資料的關注較少。這使得模型過于簡單,在訓練和測試中都沒有達到很好的準确性。這種現象也被稱為欠拟合。

Variance 可以簡單了解為模型輸出在一個資料點上的分布。Variance 越大,模型越有可能密切關注訓練資料,而不提供從未遇到過的資料的泛化。是以,該模型在訓練資料集上取得了非常好的結果,但是與測試資料集相比,結果非常差,這就是過拟合的現象。

這兩個概念之間的關系可以從下圖中看出:

不容錯過的12個深度學習面試問題!

在上圖中,圓的中心是一個模型,它完美地預測了精确的值。事實上,你從來沒有發現過這麼好的模型。當我們離圓的中心越來越遠,我們的預測就越來越糟。

我們可以改變模型,這樣我們就可以盡可能地增加落入圓中心的模型猜測的數量。需要在偏內插補點和方內插補點之間取得平衡。如果我們的模型過于簡單,參數很少,那麼它可能有高偏差和低方差。

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

不容錯過的12個深度學習面試問題!

3. 假如深度學習模型已經有了 1000 萬個人臉向量,如何通過查詢來找到新的人臉?

這個問題是關于深度學習算法在實踐中的應用,這個問題的關鍵是資料的索引方法。這是将 One Shot learning 應用于人臉識别問題的最後一步,但這一步是在實踐中進行部署的最重要的一步。

基本上,回答這個問題,你應該先描述一下 One Shot learning 來進行人臉識别的方法一般性方法。它可以簡單地了解為将每個人臉轉換成一個向量,而新的人臉識别是尋找與輸入人臉最接近(最相似)的向量。通常,人們會使用 triplet loss 損失函數的深度學習模型來實作這一點。

不容錯過的12個深度學習面試問題!

然而,随着圖像數量的增加,在每次識别中計算到 1000 萬個向量的距離并不是一個明智的解決方案,這使得系統的速度慢了很多。為了使查詢更加友善,我們需要考慮在實向量空間上索引資料的方法。

這些方法的主要思想是将資料劃分為便于查詢新資料的結構(可能類似于樹結構)。當有新資料可用時,在樹中進行查詢有助于快速找到距離最近的向量。

不容錯過的12個深度學習面試問題!

有好幾種方法可以用于這種目的,比如Locality Sensitive Hashing—LSH,Approximate Nearest Neighbors — Annoy Indexing等等。

4. 對于分類問題,精度名額是否完全可靠?你通常使用哪些度量來評估你的模型?

對于一個類問題,有許多不同的評估方法。在準确性方面,該公式簡單地用正确預測資料點的個數除以總資料。這聽起來很合理,但在現實中,對于不平衡的資料問題,這個數量還不夠顯著。假設我們正在建構一個網絡攻擊的預測模型(假設攻擊請求占請求總數的 1/100000)。

如果模型預測所有請求都是正常的,那麼準确率也達到 99.9999%,而這個數字在分類模型中通常是不可靠的。上面的精度計算通常向我們展示了有多少百分比的資料是正确預測的,但并沒有詳細說明如何對每個類進行分類。相反,我們可以使用混淆矩陣。基本上,混淆矩陣顯示了有多少資料點實際上屬于一個類,并且被預測屬于一個類。其形式如下:

不容錯過的12個深度學習面試問題!

除了表示真陽性和假陽性名額對應于定義分類的每個門檻值的變化外,我們還有一個 ROC 圖。根據 ROC 曲線,我們可以知道模型是否有效。

不容錯過的12個深度學習面試問題!

理想的 ROC 曲線是最接近左上角的橙色線。真陽性比較高,假陽性比較低。

5. 如何了解反向傳播?解釋其作用機制?

不容錯過的12個深度學習面試問題!

這個問題旨在檢測你對于神經網絡如何工作的知識。你需要講清楚以下幾點:

  • 前向過程(前向計算)是一個幫助模型計算每一層權重的過程,其結果計算将産生一個yp結果。此時将計算損失函數的值,損失函數的值将顯示模型的好壞。如果損失函數不夠好,我們需要找到一種方法來降低損失函數的值。訓練神經網絡本質上是最小化損失函數。損失函數 L (yp, yt)表示yp模型的輸出值與yt資料标簽的實際值的差别程度。
  • 為了降低損失函數的值,我們需要使用導數。反向傳播幫助我們計算網絡每一層的導數。根據每個層上的導數值,優化器(Adam、SGD、AdaDelta…)應用梯度下降更新網絡的權重。
  • 反向傳播使用鍊式規則或導數函數計算每一層從最後一層到第一層的梯度值。

6. 激活函數是什麼意思?激活函數的飽和區間是多少?

激活函數的意義

激活函數的産生是為了打破神經網絡的線性特性。這些函數可以簡單地了解為用一個濾波器來決定資訊是否通過神經元。在神經網絡訓練中,激活函數在調節導數斜率中起着重要的作用。一些激活函數,如 sigmoid、fishy 或 ReLU,将在下面幾節中進一步讨論。

然而,我們需要了解的是,這些非線性函數的性質使得神經網絡能夠學習比僅僅使用線性函數更複雜的函數的表示。大多數激活函數是連續可微函數。

這些函數是連續函數,也就是說,如果輸入的變量很小且可微(在其定義域内的每一點都有導數),那麼輸出就會有一個小的變化。當然,如上所述,導數的計算是非常重要的,它是決定我們的神經元能否被訓練的決定性因素。提幾個常用的激活函數,如 Sigmoid, Softmax, ReLU。

激活函數的飽和區間

Tanh、Sigmoid、ReLU 等非線性激活函數都有飽和區間。

不容錯過的12個深度學習面試問題!

可以很容易了解的是,觸發函數的飽和範圍是指即使輸入值改變,函數的輸出值也不改變的區間。變化區間存在兩個問題,即在神經網絡的正向傳播中,該層的數值逐漸落入激活函數的飽和區間,将逐漸出現多個相同的輸出。

這将在整個模型中産生相同的資料流。這種現象就是協方差移位現象。第二個問題是,在反向傳播中,導數在飽和區域為零,是以網絡幾乎什麼都學不到。這就是我們需要将值範圍設定為均值為 0 的原因,如 Batch 歸一化一節中所述。

7. 模型的超參數是什麼?它和參數有什麼不同?

模型的參數是什麼?

不容錯過的12個深度學習面試問題!

回到機器學習的本質上來,關于機器學習我們需要一個資料集,沒有資料我們如何學習?一旦資料可用,機器需要在資料堆中找到輸入和輸出的聯系。

假設我們的資料是溫度、濕度、溫度等天氣資訊,要求機器做的是找出上述因素與你老婆是否生氣之間的聯系。這聽起來毫無關聯,但機器學習在做的時候是相當愚蠢的。現在假設我們用變量y來表示我們的老婆是否生氣了,變量 x1、x2、x3…代表天氣元素。我們把求函數 f (x)歸結為如下關系:

不容錯過的12個深度學習面試問題!

看到系數 w1 w2 w3 了嗎。w_1, w_2, w_3 ..w1, w2, w3 ..?這就是我們要求的資料和元素之間的關系,也就是所謂的模型參數。是以,我們可以定義模型參數如下:

模型參數是由訓練資料生成的模型值,用于幫助顯示資料中數量之間的關系。

是以,當我們說找到問題的最佳模型時,應該意味着我們已經在現有的資料集上找到了最适合問題的模型參數。它具有以下幾個特征:

  • 用于預測新資料
  • 它顯示了我們使用的模型的能力。通常用準确性來表示,我們稱之為準确率。
  • 直接從訓練資料集學習
  • 通常不需要人工設定

模型參數有多種形式,如神經網絡權值、支援向量機中的支援向量、線性回歸或邏輯回歸算法中的系數。

什麼是模型的超參數?

不容錯過的12個深度學習面試問題!

我們經常假設模型超參數看起來像一個模型參數,但它不是真的。實際上這兩個概念是完全分開的。如果模型參數是由訓練資料集本身模組化的,則模型超參數是完全不同的。它完全在模型之外,不依賴于訓練資料。它的目的是什麼?實際上,他們有以下幾個任務:

  • 用于訓練過程中,幫助模型找到最合适的參數
  • 它通常是由模型訓練的參與者手工挑選的
  • 它可以基于幾種啟發式政策來定義

對于一個特定的問題,我們完全不知道什麼是最好的模型超參數。是以,在現實中,我們需要使用一些技術來估計最佳取值範圍(例如 k 近鄰模型中的k系數),如網格搜尋。這裡我想舉幾個模型超參數的例子:

  • 訓練人工神經網絡時的學習率
  • 訓練支援向量機時的C和sigma參數
  • 最近鄰模型中的k系數

8. 當學習率太高或太低時會怎麼樣?

不容錯過的12個深度學習面試問題!

當模型的學習率被設定得太低時,模型訓練将會進行得非常慢,因為它對權重進行非常小的更新。在到達局部最優點之前需要多次更新。

如果設定的學習率過高,則由于權值更新過大,模型可能會不收斂。有可能在一個更新權值的步驟中,模型跳出了局部優化,使得模型以後很難更新到最優點,而是在在局部優化點附近跳來跳去。

9. 當圖像尺寸變為 2 倍,CNN 的參數數量變為幾倍?為什麼?

對于候選人來說,這是一個非常誤導人的問題,因為大多數人會把注意力放在 CNN 參數的數量會增加多少倍的問題上。然而,讓我們來看看 CNN 的架構:

不容錯過的12個深度學習面試問題!

我們可以看到,CNN 模型的參數數量取決于濾波器的數量和大小,而不是輸入圖像。是以,将圖像的大小加倍并不會改變模型的參數數量。

10. 如何處理不平衡資料?

這是一個測試候選人處理真實資料問題的方法的問題。通常,實際資料和标準資料集在資料集的屬性和資料量方面差異很大(标準資料集不需要調整)。對于實際的資料集,可能會出現資料不平衡的情況,即類之間的資料不平衡。我們現在可以考慮以下技術:

  • 選擇正确的度量來評估模型:對于不平衡的資料集,使用準确性來評估是一項非常危險的工作,如上面幾節所述。應選擇精度、召回、F1 分數、AUC等合适的評價量。
  • 重新采樣訓練資料集:除了使用不同的評估标準,人們還可以使用一些技術來獲得不同的資料集。從一個不平衡的資料集中建立一個平衡的資料集有兩種方法,即欠采樣和過采樣,具體技術包括重複、bootstrapping 或 hits(綜合少數過采樣技術)等方法。
  • 許多不同模型的內建:通過建立更多的資料來概括模型在實踐中并不總是可行的。例如,你有兩個層,一個擁有 1000 個資料的罕見類,一個包含 10,000 個資料樣本的大型類。是以,我們可以考慮一個 10 個模型的訓練解決方案,而不是試圖從一個罕見的類中找到 9000 個資料樣本來進行模型訓練。每個模型由 1000 個稀有類和 1000 個大規模類訓練而成。然後使用內建技術獲得最佳結果。
不容錯過的12個深度學習面試問題!
  • 重新設計模型 — 損失函數:使用懲罰技術對代價函數中的多數類進行嚴厲懲罰,幫助模型本身更好地學習稀有類的資料。這使得損失函數的值在類中更全面。
不容錯過的12個深度學習面試問題!

11. 當訓練深度學習模型時,Epoch、Batch 和 Iteration 概念是什麼意思?

這些是訓練神經網絡時非常基本的概念,但事實是很多候選人在區分這些概念時都很困惑。具體來說,你應該回答以下問題:

  • Epoch:表示整個資料集的疊代(所有内容都包含在訓練模型中)。
  • Batch:是指當我們不能一次将整個資料集放到神經網絡中時,我們将資料集分割成幾批較小的資料集。
  • 疊代:是運作 epoch 所需的批數。假設有 10,000 個圖像作為資料,批處理的大小(batch_size)為 200。然後一個 epoch 将包含 50 個疊代(10,000 除以 200)。

12. 資料生成器的概念是什麼?我們什麼時候需要使用它?

資料生成器在寫代碼中很重要,資料生成函數幫助我們直接生成資料,然後送到模型中進行每個 batch 的訓練。

不容錯過的12個深度學習面試問題!

利用生成函數對訓練大資料有很大幫助。因為資料集并不總是需要全部加載到 RAM 中,這是一種記憶體的浪費,而且如果資料集太大,會導緻記憶體溢出,輸入資料的處理時間會變長。

總結

以上是我在面試過程中經常問應聘者的 12 個關于深度學習的面試問題。然而,根據每個候選人的不同,提問的方式也會不同,或者還有一些問題是随機從候選人的問題中提出的。

雖然這篇文章是關于技術問題的,但是與面試相關,并且基于我個人的觀點,态度決定了面試成功的 50%。是以,除了積累自己的知識和技能,總是用真誠、進步、謙虛的态度來表達自己,你一定會在任何對話中取得成功。我希望你早日實作你的願望。

不容錯過的12個深度學習面試問題!

—END—

英文原文:

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