面試題

1、relu激活函數的好處

  • relu激活函數計算簡單,可以減少很多計算量。反向傳播求誤差梯度時,計算量較大,採用relu激活函數,可以節省很多計算量。
  • 避免梯度消失問題。對於深層網絡,sigmoid函數反向傳播時,很容易會出現梯度消失問題(sigmoid接近飽和區時,變換太緩慢,導數趨於0,這種情況造成信息丟失),從而無法完成深層網絡的訓練。
  • 可以緩解過擬合的問題。relu會使一部分神經元的輸出爲0,這樣造成了網絡的稀疏性,並且減少了參數的相互依存關係,緩解了過擬合的發生。
  • 相比sigmoid函數,relu函數有利於隨機梯度下降方法收斂。

2、爲什麼要使用非線性激活函數

如果使用線性激活函數(恆等激活函數),那麼無論神經網絡有多少層,一直在做線性組合,線性函數的組合還是線性函數,除非引入非線性函數,所以中間的隱藏層沒有用了,還不如去掉中間的隱藏層。

3、神經網絡爲什麼權值需要隨機初始化

對於邏輯迴歸,可以將權重初始化爲0,但如果將神經網絡的權重初始化爲0,再使用梯度下降方法,那麼完全無效。如果權重一樣,隱藏層單元都在做一樣的運算,隱藏層的單元完全一樣,這就是所謂的完全對稱,在這種情況下多個隱藏層單元沒有意義,所以權重都是隨機初始化的。權重初始化一般很小,如果權重太大,zi=wixi+bz_{i}=w_{i}x_{i}+b過大,ai=g(zi)a_{i}=g(z_{i})過大,使用tanh或者sigmoid激活函數時,梯度非常小,梯度下降會非常慢。

4、神經網絡中的epoch、batch、batch size和iteration

epoch:所有數據進行一個正向傳播和一個反向傳播
iteration:一個正向傳播和一個反向傳播
batch:在不能將數據一次性通過神經網絡的時候,就需要將數據集分成幾個 batch
batch size:一個 batch 中的樣本總數
在一個 epoch 中,batch 數和迭代數是相等的。
舉個例子:
CIFAR10 數據集有 50000 張訓練圖片,10000 張測試圖片。現在選擇 Batch Size = 256 對模型進行訓練。
每個 Epoch 要訓練的圖片數量: 50000
訓練集具有的 Batch 個數: 50000 / 256 = 195 + 1 = 196(不能整除時+1)
每個 Epoch 需要完成的 Batch 個數: 196
每個 Epoch 具有的 Iteration 個數: 196
每個 Epoch 中發生模型權重更新的次數: 196
訓練 10 代後,模型權重更新的次數: 196 * 10 = 1960
不同代的訓練,其實用的是同一個訓練集的數據。第 1 代和第 10 代雖然用的都是訓練集的五萬張圖片,但是對模型的權重更新值卻是完全不同的。因爲不同代的模型處於代價函數空間上的不同位置,模型的訓練代越靠後,越接近谷底,其代價越小。
爲什麼要使用多於一個 epoch?
在神經網絡中傳遞完整的數據集一次是不夠的,而且需要將完整的數據集在同樣的神經網絡中傳遞多次。但是請記住,使用的是有限的數據集,並且使用一個迭代過程即梯度下降,因此僅僅更新權重一次或者說使用一個 epoch 是不夠的。

5、小卷積核

小卷積核(如3x3)通過多層疊加可取得與大卷積核(如7x7)同等規模的感受野,比如一張12x12的圖片,使用兩種不同大小的卷積核(3x3、7x7)來卷積,步長爲1,7x7的卷積核卷積一次得到6x6大小的特徵圖,3X3的卷積核卷積三次得到6x6大小的特徵圖。

小卷積核需多層疊加,加深了網絡深度進而增強了網絡容量(model capacity)和複雜度(model complexity)。

增強了網絡容量的同時減少了參數個數。

更多的非線性變換。3個3x3的卷積可以使用3次relu激活函數,1個7x7的卷積只用一次relu激活函數。

6、CNN結構特點

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

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

7、pooling層作用

  • 增加特徵平移不變性。pooling可以提高網絡對微小位移的容忍能力。
  • 減小特徵圖大小。pooling層對空間局部區域進行下采樣,使下一層需要的參數量和計算量減少,並降低過擬合風險,提高模型的泛化能力。
  • max pooling可以帶來非線性。這是目前max pooling更常用的原因之一。

8、Overfitting怎麼解決

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

  • Parameter Norm Penalties(參數範數懲罰);
  • Dataset Augmentation (數據集增強);
  • Early Stopping(提前終止);
  • Parameter Tying and Parameter Sharing (參數綁定與參數共享);
  • Bagging and Other Ensemble Methods(Bagging 和其他集成方法);
  • dropout;
  • regularization;
  • batch normalization;

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

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

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

神經網絡的訓練中,通過改變神經元的權重,使網絡的輸出值儘可能逼近標籤以降低誤差值,訓練普遍使用BP算法,核心思想是,計算出輸出與標籤間的損失函數值,然後計算其相對於每個神經元的梯度,進行權值的迭代。

梯度消失會造成權值更新緩慢,模型訓練難度增加。造成梯度消失的一個原因是,許多激活函數將輸出值擠壓在很小的區間內,在激活函數兩端較大範圍的定義域內梯度爲0,造成學習停止。

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

  • 預訓練模型 + 微調
  • 梯度剪切 + 正則化
  • relu、leakrelu、elu等激活函數
  • BN批歸一化

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

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

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

11、數據爲什麼要歸一化

歸一化就是將數據映射到[0,1]或者[-1,1]區間或者其它區間。

  • 輸入數據單位不一樣,有些數據的範圍可能特別大,導致神經網絡收斂慢、訓練時間長
  • 數據範圍大的輸入在模式識別中的作用可能會偏大,而數據範圍小的輸入的作用就可能偏小。
  • 由於神經網絡輸出層的激活函數的值域是有限制的,因此需要將網絡訓練目標數據映射到激活函數的值域。例如神經網絡的輸出層若採用sigmoid激活函數,它的值域(0,1),也就是說神經網絡的輸出只能限制在(0,1)之間,所以訓練數據的輸出要歸一化到[0,1]區間。
  • S型激活函數在(0,1)區間以外的區間很平緩,區分度太小。

12、特徵是否必須要歸一化,請結合邏輯迴歸和決策樹算法做簡要分析。
特徵並不一定要歸一化;
在主要基於梯度下降優化算法的模型如邏輯迴歸,GBDT,需要將特徵歸一;
在決策樹模型中,如XGBoost,不需要特徵歸一化。

13、L1正則化和L2正則化的區別
L1是模型各個參數的絕對值之和;L2是模型各個參數的平方和的開方值。
L1正則化讓大部分變量解爲0,這就讓有效的變量的解減少,從而達到一種稀疏的目的,會產生稀疏權重矩陣,具有特徵選擇的功能;L2正則化相當於給每個變量相同的權值,不強調某一個(些)變量,考慮每個變量(即考慮全局特性),L2正則化具有比較好的魯棒性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章