深度學習中的常見問題彙總(一)

深度學習中的常見問題彙總(一)

轉自網絡

1.CNN複雜度分析

在深度學習基礎網絡不斷進化的過程當中,能夠發現新的模型不只性能有極大地提高,網絡的複雜度一般也會更低。深度學習網絡模型的複雜度直接關係到其實際應用中的速度與可行性,所以這裏總結一下 CNN 複雜度的含義與計算方式。框架

1.1時間複雜度

一般,咱們假設計算機運行一行基礎代碼須要一次運算,那麼模型的時間複雜度即爲模型的運算次數,用浮點運算次數 FLOPs(FLoating-point OPerations) 表示。首先來看一個最簡單的單層卷積的時間複雜度。ide

其中,函數

  • M 爲每一個卷積核輸出特徵圖(Feature Map)的尺寸長度
  • K 爲卷積核(Kernel)的尺寸大小
  • C_in 輸入的通道數,即上一層的輸出通道數目
  • C_out 卷積層具備的卷積核個數,即輸出通道數目

而特徵圖的尺寸 M 又與輸入矩陣大小 X,卷積核尺寸 K,Padding 和步長 Stride 有關,其計算公式爲:性能

M = (X - K + 2 * Padding )/Stride + 1

注:爲了方便說明,上述所提到的卷積核尺寸 K 與輸入矩陣大小 X 均爲正方形;
且爲了簡潔,省略了模型中的偏置 bias。學習

對於總體的卷積網絡而言,其時間複雜度的計算方式爲各層複雜度的累加。其計算方式以下:設計

其中,3d

  • D 爲卷積層的數目
  • i 爲第 i 個卷積層
  • Ci 爲第 i 層卷積的輸出通道數目

1.2空間複雜度

在深度學習中,空間複雜度通常指的是訪存量,包括兩個部分:參數量,輸出特徵圖。code

參數量:模型全部帶參數的層的權重參數總量(即模型體積,下式左半部分)。orm

特徵圖:模型在實時運行過程當中,每層輸出的特徵圖大小(下式右半部分)。

  • 參數量只與卷積核的尺寸 K 、通道數 C 、卷積的總層數 D 相關,而與輸入數據的大小無關。
  • 輸出特徵圖的空間佔用比較容易,就是其空間尺寸 M^2 和通道數 C 的連乘。

注:實際上有些層(例如 ReLU)實際上是能夠經過原位運算完成的,此時就不用統計輸出特徵圖了。

2.CNN網絡的感覺野

2.1感覺野的含義

感覺野是深度學習中最爲重要的概念之一,定義爲:在卷積神經網絡CNN中,決定某一層輸出結果中一個元素所對應的輸入層的區域大小,被稱做感覺野(Receptive Field)。通俗來講就是卷積層輸出的一個點映射到輸入矩陣上的區域大小。感覺野的大小直接影響到模型的輸出特徵,如對於目標檢測模型,不一樣尺寸的目標所適配的感覺野大小也不一樣,所以爲了讓模型可以適應多尺度的目標檢測,一般會藉助圖像金字塔,或融合多個卷積層的特徵,以得到最佳的檢測性能。

爲了更直觀的理解感覺野,能夠藉助以下的示意圖(爲了方便,將二維簡化成一維)。這是一個三層的 CNN 網絡,每一層卷積核的 kernel_size=3, stride=1 ,那麼最上層的特徵所對應的感覺野爲7x7。

2.2感覺野的計算方式

其中 RF 表示特徵感覺野大小, l 表示層數,l=0 表示輸入層, 此時 RF0=1 , feature_stride_0=1 。

根據感覺野的計算公式能夠獲得每一層的感覺野大小:

第一層

第二層

第三層

但若是有dilated conv的話,計算公式爲

3.梯度消失、爆炸的解決方案

深度學習的模型訓練一般採用梯度更新的方法,且通常層數越深,就能夠處理更爲複雜的問題。可是隨之也帶了許多弊端,如梯度消失與梯度爆炸。

3.1梯度消失

神經網絡的反向傳播是逐層對函數偏導相乘,所以當神經網絡層數很是深的時候,最後一層產生的誤差就由於乘了不少的小於1的數而愈來愈小,最終就會變爲0,從而致使層數比較淺的權重沒有更新,這就是梯度消失。

產生的緣由:

  • 網絡層數較深
  • 採用不合適的損失函數,好比sigmoid

3.2梯度爆炸

梯度爆炸與梯度消失相似,當每層的偏導數值都大於1時,通過多層的權重更新以後,梯度就會以指數形式增長,即爲梯度爆炸。

產生緣由:

  • 網絡層數較深
  • 權重初始值太大
  • 訓練樣本有誤

3.3解決方法

  • 逐層訓練加微調

    該方法由 Geoffrey Hinton 於2006年提出,具體流程爲每次只訓練一層神經網絡,待權重穩定以後,再使用該層網絡的輸出進行後一層網絡的輸入,重複該步驟至訓練全部網絡層。最後再對整個模型進行finetune,獲得最優的模型。

  • 梯度剪切

    梯度剪切這個方案主要是針對梯度爆炸提出的,其思想是設置一個梯度剪切閾值,而後更新梯度的時候,若是梯度超過這個閾值,那麼就將其強制限制在這個範圍以內。這能夠防止梯度爆炸。

  • 權重正則化

    比較常見的是L1正則,和L2正則,在各個深度框架中都有相應的API可使用正則化。

  • relu、leakrelu、elu等激活函數

    Relu: 若是激活函數的導數爲1,那麼就不存在梯度消失爆炸的問題了,每層的網絡均可以獲得相同的更新速度,relu就這樣應運而生。

  • batchnorm

    batchnorm全名是batch normalization,簡稱BN,即批規範化,經過規範化操做將輸出信號x規範化到均值爲0,方差爲1,保證網絡的穩定性。

  • 殘差結構

    殘差結構中的 shortcut 有效地避免了梯度消失與爆炸問題。

  • LSTM

    LSTM全稱是長短時間記憶網絡(long-short term memory networks),是不那麼容易發生梯度消失的,主要緣由在於LSTM內部複雜的「門」(gates),以下圖,LSTM經過它內部的「門」能夠接下來更新的時候「記住」前幾回訓練的」殘留記憶「,所以,常常用於生成文本中。

持續更新ing 。。。

相關文章
相關標籤/搜索