文章目錄
深度學習面試寶典1
轉自: https://github.com/amusi/Deep-Learning-Interview-Book
自己fork並補充: https://github.com/Lebhoryi/Deep-Learning-Interview-Book
主幹是amusi的github中提供的,我做的是對其加註通俗易懂的理解
001 神經網絡中的Epoch、Iteration、Batchsize
神經網絡中epoch與iteration是不相等的
-
batchsize:中文翻譯爲批大小(批尺寸)。在深度學習中,一般採用SGD訓練,即每次訓練在訓練集中取batchsize個樣本訓練;
-
iteration:中文翻譯爲迭代,1個iteration等於使用batchsize個樣本訓練一次;一個迭代 = 一個正向通過+一個反向通過
-
epoch:迭代次數,1個epoch等於使用訓練集中的全部樣本訓練一次;一個epoch = 所有訓練樣本的一個正向傳遞和一個反向傳遞
舉個例子,訓練集有1000個樣本,batchsize=10,那麼:訓練完整個樣本集需要:100次iteration,1次epoch。
參考資料
002 CNN本質和優勢
局部卷積(提取局部特徵)
權值共享(降低訓練難度)
Pooling(降維,將低層次組合爲高層次的特徵)
多層次結構
003 卷積操作
- TODO
參考資料
004 卷積反向傳播過程
- TODO
參考資料
005 CNN 模型所需的計算力(flops)和參數(parameters)數量是怎麼計算的?
對於一個卷積層,假設其大小爲 (其中c爲#input channel, n爲#output channel),輸出的feature map尺寸爲 ,則該卷積層的
-
paras =
-
FLOPs =
-
TODO
參考資料
006 池化方法和操作
007 池化層怎麼接收後面傳過來的損失
平均池化(Mean Pooling)
mean pooling的前向傳播就是把一個patch中的值求取平均來做pooling,那麼反向傳播的過程也就是把某個元素的梯度等分爲n份分配給前一層,這樣就保證池化前後的梯度(殘差)之和保持不變,還是比較理解的,圖示如下
最大池化(Max Pooling)
max pooling也要滿足梯度之和不變的原則,max pooling的前向傳播是把patch中最大的值傳遞給後一層,而其他像素的值直接被捨棄掉。那麼反向傳播也就是把梯度直接傳給前一層某一個像素,而其他像素不接受梯度,也就是爲0。所以max pooling操作和mean pooling操作不同點在於需要記錄下池化操作時到底哪個像素的值是最大,也就是max id,這個可以看caffe源碼的pooling_layer.cpp,下面是caffe框架max pooling部分的源碼
// If max pooling, we will initialize the vector index part.
if (this->layer_param_.pooling_param().pool() == PoolingParameter_PoolMethod_MAX && top.size() == 1)
{
max_idx_.Reshape(bottom[0]->num(), channels_, pooled_height_,pooled_width_);
}
參考資料
008 感受野計算
RF是感受野。N_RF和RF有點像,N代表 neighbour,指的是第n層的 a feature在n-1層的RF,記住N_RF只是一箇中間變量,不要和RF混淆。 stride是步長,ksize是卷積核大小。
(N-1)_RF = f(N_RF, stride, kernel) = (N_RF - 1) * stride + kernel
第一層是33,第二層是77
黃色feature map對應的感受野是7*7大小
參考資料
009 卷積神經網絡的感受野
- TODO
參考資料
010 深度學習優化算法
- 隨機梯度下降(SGD)
- Mini-Batch
- 動量(Momentum)
- Nesterov 動量
- AdaGrad
- AdaDelta
- RMSProp
- Adam
- Adamax
- Nadam
- AMSGrad
- AdaBound
參考資料
011 梯度下降法
梯度下降的本質:是一種使用梯度去迭代更新權重參數使目標函數最小化的方法。
缺點:
- 不保證全局最優
- 到極小值附近收斂速度變慢
- 可能出現“之”字型下降
012 mini-batch梯度下降法
小批量梯度下降算法是折中方案,選取訓練集中一個小批量樣本(一般是2的倍數,如32,64,128等)計算,這樣可以保證訓練過程更穩定,而且採用批量訓練方法也可以利用矩陣計算的優勢。這是目前最常用的梯度下降算法。
批量梯度下降算法
對於批量梯度下降算法,其損失函數是在整個訓練集上計算的,如果數據集比較大,可能會面臨內存不足問題,而且其收斂速度一般比較慢。
區別點在於:整個訓練集做一次損失函數計算還是一個小批量樣本做一次損失函數計算
013 隨機梯度下降法
隨機梯度下降算法是另外一個極端,損失函數是針對訓練集中的一個訓練樣本計算的,又稱爲在線學習,即得到了一個樣本,就可以執行一次參數更新。所以其收斂速度會快一些,但是有可能出現目標函數值震盪現象,因爲高頻率的參數更新導致了高方差。
區別點在於:訓練集中的一個訓練樣本做一次損失函數計算
014 動量梯度下降法(Momentum)
引入一個指數加權平均的知識點。也就是下圖中的前兩行公式。使用這個公式,可以將之前的dW和db都聯繫起來,不再是每一次梯度都是獨立的情況。
參考資料
015 RMSprop
更新權重的時候,使用除根號的方法,可以使較大的梯度大幅度變小,而較小的梯度小幅度變小,這樣就可以使較大梯度方向上的波動小下來,那麼整個梯度下降的過程中擺動就會比較小
016 Adam
Adam算法結合了Momentum和RMSprop梯度下降法,是一種極其常見的學習算法,被證明能有效適用於不同神經網絡,適用於廣泛的結構。
超參數:
t是迭代次數
- TODO
017 常見的激活函數及其特點
-
Sigmod
-
Tanh
-
ReLU
018 ReLU及其變體
-
Leaky ReLU
-
PReLU
-
RReLU
-
ELU
參考資料: