20道深度學習面試題,有你不知道的嗎?

20道深度學習面試題,有你不知道的嗎?

20道深度學習面試題,有你不知道的嗎?

前言

來源於GitHub上大神整理的20到深度學習非常經典的20問,一起來看看吧!

(1)CNN權值共享問題

首先權值共享就是濾波器共享,濾波器的參數是固定的,即是用相同的濾波器去掃一遍圖像,提取一次特徵特徵,得到feature map。在卷積網絡中,學好了一個濾波器,就相當於掌握了一種特徵,這個濾波器在圖像中滑動,進行特徵提取,然後所有進行這樣操作的區域都會被採集到這種特徵,就好比上面的水平線。

(2)CNN結構特點

局部連接,權值共享,池化操作,多層次結構。

  • 局部連接使網絡可以提取數據的局部特徵
  • 權值共享大大降低了網絡的訓練難度,一個Filter只提取一個特徵,在整個圖片(或者語音/文本) 中進行卷積
  • 池化操作與多層次結構一起,實現了數據的降維,將低層次的局部特徵組合成為較高層次的特徵,從而對整個圖片進行表示。

(3)什麼樣的數據集不適合深度學習

  • 數據集太小,數據樣本不足時,深度學習相對其它機器學習算法,沒有明顯優勢。
  • 數據集沒有局部相關特性,目前深度學習表現比較好的領域主要是圖像/語音/自然語言處理等領域,這些領域的一個共性是局部相關性。圖像中像素組成物體,語音信號中音位組合成單詞,文本數據中單詞組合成句子,這些特徵元素的組合一旦被打亂,表示的含義同時也被改變。對於沒有這樣的局部相關性的數據集,不適於使用深度學習算法進行處理。舉個例子:預測一個人的健康狀況,相關的參數會有年齡、職業、收入、家庭狀況等各種元素,將這些元素打亂,並不會影響相關的結果。

(4)什麼造成梯度消失問題

  • 神經網絡的訓練中,通過改變神經元的權重,使網絡的輸出值儘可能逼近標籤以降低誤差值,訓練普遍使用BP算法,核心思想是,計算出輸出與標籤間的損失函數值,然後計算其相對於每個神經元的梯度,進行權值的迭代。
  • 梯度消失會造成權值更新緩慢,模型訓練難度增加。造成梯度消失的一個原因是,許多激活函數將輸出值擠壓在很小的區間內,在激活函數兩端較大範圍的定義域內梯度為0,造成學習停止。

(5)Overfitting怎麼解決

首先所謂過擬合,指的是一個模型過於複雜之後,它可以很好地“記憶”每一個訓練數據中隨機噪音的部分而忘記了去“訓練”數據中的通用趨勢。過擬合具體表現在:模型在訓練數據上損失函數較小,預測準確率較高;但是在測試數據上損失函數比較大,預測準確率較低

Parameter Norm Penalties(參數範數懲罰);Dataset Augmentation (數據集增強);Early Stopping(提前終止);Parameter Tying and Parameter Sharing (參數綁定與參數共享);Bagging and Other Ensemble Methods(Bagging 和其他集成方法);dropout;regularization; batch normalizatin。是解決Overfitting的常用手段。

(6)L1和L2區別

L1 範數(L1 norm)是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則算子”(Lasso regularization)。 比如 向量 A=[1,-1,3], 那麼 A 的 L1 範數為 |1|+|-1|+|3|。簡單總結一下就是:

  • L1 範數: 為 x 向量各個元素絕對值之和。
  • L2 範數: 為 x 向量各個元素平方和的 1/2 次方,L2 範數又稱 Euclidean 範數或 Frobenius 範數
  • Lp 範數: 為 x 向量各個元素絕對值 p 次方和的 1/p 次方. 在支持向量機學習過程中,L1 範數實際是一種對於成本函數求解最優的過程,因此,L1 範數正則化通過向成本函數中添加 L1 範數,使得學習得到的結果滿足稀疏化,從而方便人類提取特徵。

L1 範數可以使權值稀疏,方便特徵提取。 L2 範數可以防止過擬合,提升模型的泛化能力。

(7)TensorFlow計算圖

Tensorflow 是一個通過計算圖的形式來表述計算的編程系統,計算圖也叫數據流圖,可以把計算圖看做是一種有向圖,Tensorflow 中的每一個計算都是計算圖上的一個節點,而節點之間的邊描述了計算之間的依賴關係。

(8)BN(批歸一化)的作用

(1). 可以使用更高的學習率。如果每層的scale不一致,實際上每層需要的學習率是不一樣的,同一層不同維度的scale往往也需要不同大小的學習率,通常需要使用最小的那個學習率才能保證損失函數有效下降,Batch Normalization將每層、每維的scale保持一致,那麼我們就可以直接使用較高的學習率進行優化。

(2). 移除或使用較低的dropout。 dropout是常用的防止overfitting的方法,而導致overfit的位置往往在數據邊界處,如果初始化權重就已經落在數據內部,overfit現象就可以得到一定的緩解。論文中最後的模型分別使用10%、5%和0%的dropout訓練模型,與之前的40%-50%相比,可以大大提高訓練速度。

(3). 降低L2權重衰減係數。 還是一樣的問題,邊界處的局部最優往往有幾維的權重(斜率)較大,使用L2衰減可以緩解這一問題,現在用了Batch Normalization,就可以把這個值降低了,論文中降低為原來的5倍。

(4). 取消Local Response Normalization層。 由於使用了一種Normalization,再使用LRN就顯得沒那麼必要了。而且LRN實際上也沒那麼work。

(5). Batch Normalization調整了數據的分佈,不考慮激活函數,它讓每一層的輸出歸一化到了均值為0方差為1的分佈,這保證了梯度的有效性,可以解決反向傳播過程中的梯度問題。目前大部分資料都這樣解釋,比如BN的原始論文認為的緩解了Internal Covariate Shift(ICS)問題。

AI項目體驗地址 https://loveai.tech

(9)什麼是梯度消失和爆炸,怎麼解決?

當訓練較多層數的模型時,一般會出現梯度消失問題(gradient vanishing problem)和梯度爆炸問題(gradient exploding problem)。注意在反向傳播中,當網絡模型層數較多時,梯度消失和梯度爆炸是不可避免的。

深度神經網絡中的梯度不穩定性,根本原因在於前面層上的梯度是來自於後面層上梯度的乘積。當存在過多的層次時,就出現了內在本質上的不穩定場景。前面的層比後面的層梯度變化更小,故變化更慢,故引起了梯度消失問題。前面層比後面層梯度變化更快,故引起梯度爆炸問題。

解決梯度消失和梯度爆炸問題,常用的有以下幾個方案:

  • 預訓練模型 + 微調
  • 梯度剪切 + 正則化
  • relu、leakrelu、elu等激活函數
  • BN批歸一化
  • CNN中的殘差結構
  • LSTM結構

(10)RNN循環神經網絡理解

循環神經網絡(recurrent neural network, RNN), 主要應用在語音識別、語言模型、機器翻譯以及時序分析等問題上。在經典應用中,卷積神經網絡在不同的空間位置共享參數,循環神經網絡是在不同的時間位置共享參數,從而能夠使用有限的參數處理任意長度的序列。RNN可以看做作是同一神經網絡結構在時間序列上被複制多次的結果,這個被複制多次的結構稱為循環體,如何設計循環體的網絡結構是RNN解決實際問題的關鍵。 RNN的輸入有兩個部分,一部分為上一時刻的狀態,另一部分為當前時刻的輸入樣本。

訓練過程中模型不收斂,是否說明這個模型無效,致模型不收斂的原因有哪些?

不一定。導致模型不收斂的原因有很多種可能,常見的有以下幾種:

  • 沒有對數據做歸一化。
  • 沒有檢查過你的結果。這裡的結果包括預處理結果和最終的訓練測試結果。
  • 忘了做數據預處理。
  • 忘了使用正則化。
  • Batch Size設的太大。
  • 學習率設的不對。
  • 最後一層的激活函數用的不對。
  • 網絡存在壞梯度。比如Relu對負值的梯度為0,反向傳播時,0梯度就是不傳播。
  • 參數初始化錯誤。
  • 網絡太深。隱藏層神經元數量錯誤。
  • 更多回答,參考此鏈接。

(11)圖像處理中平滑和銳化操作是什麼?

平滑處理(smoothing)也稱模糊處理(bluring),主要用於消除圖像中的噪聲部分,平滑處理常用的用途是用來減少圖像上的噪點或失真,平滑主要使用圖像濾波。在這裡,我個人認為可以把圖像平滑和圖像濾波聯繫起來,因為圖像平滑常用的方法就是圖像濾波器。 在OpenCV3中常用的圖像濾波器有以下幾種:

  • 方框濾波——BoxBlur函數
  • 均值濾波(鄰域平均濾波)——Blur函數
  • 高斯濾波——GaussianBlur函數
  • 中值濾波——medianBlur函數
  • 雙邊濾波——bilateralFilter函數 圖像銳化操作是為了突出顯示圖像的邊界和其他細節,而圖像銳化實現的方法是通過各種算子和濾波器實現的——Canny算子、Sobel算子、Laplacian算子以及Scharr濾波器。

(12)VGG使用2個3*3卷積的優勢在哪裡?

(1). 減少網絡層參數。用兩個33卷積比用1個55卷積擁有更少的參數量,只有後者的2∗3∗35∗5=0.72。但是起到的效果是一樣的,兩個33的卷積層串聯相當於一個55的卷積層,感受野的大小都是5×5,即1個像素會跟周圍5*5的像素產生關聯。

(2). 更多的非線性變換。2個33卷積層擁有比1個55卷積層更多的非線性變換(前者可以使用兩次ReLU激活函數,而後者只有一次),使得卷積神經網絡對特徵的學習能力更強。

paper中給出的相關解釋:三個這樣的層具有7×7的有效感受野。那麼我們獲得了什麼?例如通過使用三個3×3卷積層的堆疊來替換單個7×7層。首先,我們結合了三個非線性修正層,而不是單一的,這使得決策函數更具判別性。其次,我們減少參數的數量:假設三層3×3卷積堆疊的輸入和輸出有C個通道,堆疊卷積層的參數為3(32C2)=27C2個權重;同時,單個7×7卷積層將需要72C2=49C2個參數,即參數多81%。這可以看作是對7×7卷積濾波器進行正則化,迫使它們通過3×3濾波器(在它們之間注入非線性)進行分解。

此回答可以參考TensorFlow實戰p110,網上很多回答都說的不全。

(13)Relu比Sigmoid效果好在哪裡?

ReLU激活函數公式如下:

20道深度學習面試題,有你不知道的嗎?

relu函數方程 ReLU 的輸出要麼是 0, 要麼是輸入本身。雖然方程簡單,但實際上效果更好。在網上看了很多版本的解釋,有從程序實例分析也有從數學上分析,我找了個相對比較直白的回答,如下: (1). ReLU函數計算簡單,可以減少很多計算量。反向傳播求誤差梯度時,涉及除法,計算量相對較大,採用ReLU激活函數,可以節省很多計算量; (2). 避免梯度消失問題。對於深層網絡,sigmoid函數反向傳播時,很容易就會出現梯度消失問題(在sigmoid接近飽和區時,變換太緩慢,導數趨於0,這種情況會造成信息丟失),從而無法完成深層網絡的訓練。 (3). 可以緩解過擬合問題的發生。Relu會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,並且減少了參數的相互依存關係,緩解了過擬合問題的發生。

參考鏈接

https://www.twblogs.net/a/5c2dd30fbd9eee35b21c4337/zh-cn

(14)神經網絡中權值共享的理解?

權值(權重)共享這個詞是由LeNet5模型提出來的。以CNN為例,在對一張圖偏進行卷積的過程中,使用的是同一個卷積核的參數。 比如一個3×3×1的卷積核,這個卷積核內9個的參數被整張圖共享,而不會因為圖像內位置的不同而改變卷積核內的權係數。說的再直白一些,就是用一個卷積核不改變其內權係數的情況下卷積處理整張圖片(當然CNN中每一層不會只有一個卷積核的,這樣說只是為了方便解釋而已)。

參考資料

https://blog.csdn.net/chaipp0607/article/details/73650759

對fine-tuning(微調模型的理解),為什麼要修改最後幾層神經網絡權值?

使用預訓練模型的好處,在於利用訓練好的SOTA模型權重去做特徵提取,可以節省我們訓練模型和調參的時間。

至於為什麼只微調最後幾層神經網絡權重,是因為: (1). CNN中更靠近底部的層(定義模型時先添加到模型中的層)編碼的是更加通用的可複用特徵,而更靠近頂部的層(最後添加到模型中的層)編碼的是更專業業化的特徵。微調這些更專業化的特徵更加有用,它更代表了新數據集上的有用特徵。 (2). 訓練的參數越多,過擬合的風險越大。很多SOTA模型擁有超過千萬的參數,在一個不大的數據集上訓練這麼多參數是有過擬合風險的,除非你的數據集像Imagenet那樣大。

(15)什麼是dropout?

dropout可以防止過擬合,dropout簡單來說就是:我們在前向傳播的時候,讓某個神經元的激活值以一定的概率p停止工作,這樣可以使模型的泛化性更強,因為它不會依賴某些局部的特徵。

20道深度學習面試題,有你不知道的嗎?

dropout具體工作流程

以 標準神經網絡為例,正常的流程是:我們首先把輸入數據x通過網絡前向傳播,然後把誤差反向傳播一決定如何更新參數讓網絡進行學習。使用dropout之後,過程變成如下:

(1). 首先隨機(臨時)刪掉網絡中一半的隱藏神經元,輸入輸出神經元保持不變(圖3中虛線為部分臨時被刪除的神經元); (2). 然後把輸入x通過修改後的網絡進行前向傳播計算,然後把得到的損失結果通過修改的網絡反向傳播。一小批訓練樣本執行完這個過程後,在沒有被刪除的神經元上按照隨機梯度下降法更新對應的參數(w,b); (3). 然後重複這一過程:

  • 恢復被刪掉的神經元(此時被刪除的神經元保持原樣沒有更新w參數,而沒有被刪除的神經元已經有所更新)
  • 從隱藏層神經元中隨機選擇一個一半大小的子集臨時刪除掉(同時備份被刪除神經元的參數)。
  • 對一小批訓練樣本,先前向傳播然後反向傳播損失並根據隨機梯度下降法更新參數(w,b) (沒有被刪除的那一部分參數得到更新,刪除的神經元參數保持被刪除前的結果)。

dropout在神經網絡中的應用

(1). 在訓練模型階段

不可避免的,在訓練網絡中的每個單元都要添加一道概率流程,標準網絡和帶有dropout網絡的比較圖如下所示:

20道深度學習面試題,有你不知道的嗎?

(2). 在測試模型階段

預測模型的時候,輸入是當前輸入,每個神經單元的權重參數要乘以概率p。

20道深度學習面試題,有你不知道的嗎?

如何選擇dropout 的概率

input 的dropout概率推薦是0.8, hidden layer 推薦是0.5, 但是也可以在一定的區間上取值。(All dropout nets use p = 0.5 for hidden units and p = 0.8 for input units.)

(16)移動端深度學習框架知道哪些,用過哪些?

知名的有TensorFlow Lite、小米MACE、騰訊的ncnn等,目前都沒有用過。

(17)如何提升網絡的泛化能力

和防止模型過擬合的方法類似,另外還有模型融合方法。

BN算法,為什麼要在後面加加伽馬和貝塔,不加可以嗎?

最後的“scale and shift”操作則是為了讓因訓練所需而“刻意”加入的BN能夠有可能還原最初的輸入。不加也可以。

(18)激活函數的作用

激活函數實現去線性化。神經元的結構的輸出為所有輸入的加權和,這導致神經網絡是一個線性模型。如果將每一個神經元(也就是神經網絡的節點)的輸出通過一個非線性函數,那麼整個神經網絡的模型也就不再是線性的了,這個非線性函數就是激活函數。 常見的激活函數有:ReLU函數、sigmoid函數、tanh函數。

(19)卷積層和池化層有什麼區別

  1. 卷積層有參數,池化層沒有參數
  2. 經過卷積層節點矩陣深度會改變,池化層不會改變節點矩陣的深度,但是它可以縮小節點矩陣的大小

(20)卷積層參數數量計算方法

假設輸入層矩陣維度是96963,第一層卷積層使用尺寸為55、深度為16的過濾器(卷積核尺寸為55、卷積核數量為16),那麼這層卷積層的參數個數為553*16+16=1216個。

20道深度學習面試題,有你不知道的嗎?

20道深度學習面試題,有你不知道的嗎?

20道深度學習面試題,有你不知道的嗎?

相關推薦

推薦中...