1. 程式人生 > >深度學習最基礎理論知識總結 (CS231課程總結,持續更新)

深度學習最基礎理論知識總結 (CS231課程總結,持續更新)

因為有在看CS231學習深度學習的簡單知識,所以打算整理成blog,持續更新中。。。

一、損失函式loss function

1、SVM:最簡單的loss function 

其中為真實label對應的分數,為label j對應的分數,Li為每個樣本的分類損失,目的是最大化真實label對應分數。

在初始化時,Li的初始值接近於C-1,其中C為分類的個數,因為所有的分數都接近於0,對應為(C-1)個1相加。

所有樣本的loss表示為:

2、softmax

二、模型正則項

通常為了防止模型過擬合,使得模型在效果和複雜度之間達到平衡,常常引入正則項。不同的正則項都是為了模型簡單化,但是對簡單的定義各異。

1) L1正規化:鼓勵稀疏,也就是鼓勵權重向量中0的個數,從而使得模型簡單化

2) L2正規化:魯棒性更好,控制向量中的整體分佈,各個位置的數值均影響模型更好,即各個位置的數值較為平均。

3) dropout:隨機將每一層上的一些神經元設為0,常在全連線層使用。訓練時間加長,但訓練後魯棒性增強。

4) bach normalization:見下

5) dropconnect:和3不同,不是丟棄神經元,而是丟棄一些權重矩陣

6) stochastic depth:隨機丟棄一些層。

三、Bach Normalization 

深度學習中,通常為了能讓啟用函式更好地啟用,防止梯度消失或者梯度爆炸 (後面會有解釋),需要對特徵進行歸一化,將特徵向量變成均值為0,方差為1的向量

通常在全連線層和卷積層之後使用,每一層保證高斯分佈,對向量的每個維度進行歸一化。

四、正向傳播與反向傳播

神經網路中最主要的操作就是正向傳播與反向傳播。

正向傳播:值,從輸入層開始計算各個層的值,依次向後傳播直至輸出層;

反向傳播:從輸出層將損失進行反向傳播,傳播的是梯度,基於鏈式法則。

五、卷積神經網路 convolutional neural network (CNN)

全連線層:整圖input x,經過權重矩陣W,進行矩陣相乘Wx得到輸出

卷積層:對於一個矩陣x(N*N*depth),使用一個卷積核 (filter) w (F*F*depth),在x上按行向下滾動點乘 (將對應位置上的元素相乘),通常會有滾動的間隔stride,以下圖為例,對應卷積操作為:

1) 從第一行開始,在對應位置使用卷積核點乘;

2) 將卷積核向右移動一個stride,得到第二幅圖,進行點乘;

3) 一直向右以stride為間隔移動,直至到達最右端。然後從第二行開始繼續執行1、2步。

所以在經過一次卷及操作後,輸出的尺寸大小為s= (N-F)/stride+1,其中F為卷積核的尺寸,N為原始尺寸,輸出的大小為s*s*1。通常每一個卷積層會有k個不同的卷積核,所以得到的輸出層尺寸為s*s*k。

處理邊角位置:使用zero pad在外圍一層填空,或是複製邊緣值。  目的:在stride=1時保證輸出和原始尺寸相同,減少資訊損失 (圖片尺寸快速減小),減小邊角資訊損失。

常用的卷積核大小:3*3,5*5,7*7。使用不同的卷積核,為了使輸出尺寸保持不變,zero pad的寬度會隨之變化。

對於n個m*m的卷積核,對應的引數個數為(m*m*3+1)*n,其中3為depth的值,通常為RGB三通道;1為偏差項;n通常設定為2的次方(32,64,……)。

池化層 pooling layer:不改變深度,只改變尺寸。

max pooling: 使用m*m的filter,stride=m (沒有重疊區域,降取樣),每一個小塊取其中的最大值。

採用max而不是mean的原因:為了表示對應區域的受激程度。

通常的深度網路結構:((CONV-RELU)*N-POOL)*M-(FC-RELU)*K,SOFTMAX

其中RELU為啟用函式,下面會講到。通常

六、啟用函式activation function

1、sigmoid

其中第二個分段函式是感知機。

存在的問題:

  1. 飽和神經元使梯度消失:x很大/很小時,梯度變為0,傳遞到下游節點,梯度消失;
  2. 非零中心函式:當輸入wx+b,x均為正值時,梯度均為正或者均為負,在引數更新時只朝一個方向移動,無法得到理想引數,更新效率低;
  3. exp(-x)的計算代價較高。

2、Relu

優點:

  1. 不會飽和,避免梯度消失;
  2. 計算成本小;
  3. 收斂速度快;
  4. 更具有生物合理性。

缺點:

  1. 非零中心函式;
  2. x<0時會出現梯度消失的問題,dead relu
  3. 不適用較大梯度,引數更新後不再啟用,梯度為0。

3、Leaky-Relu

4、PRelu

5、tanh

優點:零中心

缺點:仍有梯度消失問題

6、Maxout

優點:不飽和,no die

缺點:引數數量翻倍

7、ELU

七、資料預處理 data preprocessing

1、zero-centered: x-=np.mean

1) 對所有通道取均值 AlexNet

2) 對每個channel取均值 VGGNet

2、normalized data: x/=np.std(X,axis=0)

八、權重初始化 weight initialization

初始化時可能面臨的問題:

  • 如果將w均初始化為0,則所有神經元都在做相同的事情。
  • 權值設定過小 (0.01),不斷傳播後數值變得過小
  • 權值設定過大,飽和,梯度變為0

所以常使用Xavier initialization:

np.random.randn(in,out)/np.sqrt(in)或者

np.random.randn(in,out)/np.sqrt(in/2) 解決Relu每次有一般不會被啟用的問題 (x<0)。

九、babysitting引數監控

  1.  如果loss為NaN,說明學習速率設定過大
  2. 如果loss值下降很緩慢,說明學習速率過小
  3. 交叉驗證,如果訓練集的accuracy不斷增加,而測試集不變,說明可能過擬合,需要調整正則化項

十、隨機梯度下降 stochasitc gradient decent (SGD)

梯度:沿著梯度方向函式值上升最快

梯度更新:計算好當前狀態下損失函式在每個引數下的梯度後,再更新每個引數;而不是計算一個引數就更新一個引數,然後再計算一個引數,因為這時第一個引數已經改變。      這裡提到的是同步更新的概念。

缺點:

  • 在某個方向loss下降很快,某個方向loss下降很慢
  • 區域性最小點:如下所示紅點位置

  • 鞍點:saddle point,一個方向上梯度大於0,一個方向上梯度小於0。在高維資料上容易發生

  • stochastic:曲折著走向optimal,耗時。

十一、學習率learning rate decay method

1、exponential decay

2、 1/t decay

十二、VGG Net

1) smaller filter:3*3卷積核

    引數量較小,可以使用更多的filters來增加深度

2) same effective field

    使用3層,3*3 C個filters,對應的視野域和7*7的相同,但是引數遠遠小,3*(3*3*C*C)<(7*7*C*C)。

    effective field:第一層3*3;第二層也是3*3,但其中每個點都對應第一層中的一個3*3區域,按照stride=1滾動,所以第二層中的3*3實際對應了原始中5*5的區域;同理,第三層對應到的實際是7*7的區域。

    所以視野域和直接使用7*7的卷積核是一樣的,但是引數變少了,減少了計算負擔。

十三、GoogleNet

無全連線層,含有一個inception layer, 包含了3個conv層和1個pooling層,最終結果將4個輸出串聯為最終輸出,每個conv層,pooling層尺寸相同,深度 (通道數)不同。

但是這種方法,計算量大。解決方案:加入bottleneck層,使用1*1 conv先降低輸入深度。

    例如,m*m*256經過1*1 filter後,變成m*m*32,這樣再傳入conv層能夠減少運算。

十四、ResNet

Hypothsis: the problem is an optimization problem, deeper models are harder t optimize. 所以並不是越深的網路就一定越好。