吳恩達 DeepLearning.ai 課程提煉筆記(2-3)改善深層神經網路 --- 超參數調試和Batch Norm

以下為在Coursera上吳恩達老師的DeepLearning.ai課程項目中,第二部分《改善深層神經網路:超參數調試、正則化以及優化》第三周課程「超參數調試和Batch Norm」關鍵點的筆記。本次筆記並沒有涵蓋程序框架介紹的部分,關於視頻中的TensorFlow介紹請自行學習。在閱讀以下筆記的同時,強烈建議學習吳恩達老師的視頻課程,視頻請至 Coursera 或者 網易雲課堂。


1. 超參數調試處理

  • 在機器學習領域,超參數比較少的情況下,我們之前利用設置網格點的方式來調試超參數;
  • 但在深度學習領域,超參數較多的情況下,不是設置規則的網格點,而是隨機選擇點進行調試。這樣做是因為在我們處理問題的時候,是無法知道哪個超參數是更重要的,所以隨機的方式去測試超參數點的性能,更為合理,這樣可以探究更超參數的潛在價值。

2. 為超參數選擇合適的範圍

Scale均勻隨機

在超參數選擇的時候,一些超參數是在一個範圍內進行均勻隨機取值,如隱藏層神經元結點的個數、隱藏層的層數等。但是有一些超參數的選擇做均勻隨機取值是不合適的,這裡需要按照一定的比例在不同的小範圍內進行均勻隨機取值,以學習率 alpha 的選擇為例,在 0.001,ldots,1 範圍內進行選擇:

如上圖所示,如果在0.001,ldots,1的範圍內進行進行均勻隨機取值,則有90%的概率 選擇範圍在0.1sim1之間,而只有10%的概率才能選擇到0.001sim0.1之間,顯然是不合理的。

所以在選擇的時候,在不同比例範圍內進行均勻隨機取值,如 0.001sim0.0010.001sim0.010.01sim0.10.1sim1 範圍內選擇。

代碼實現

r = -4 * np.random.rand() # r in [-4,0]nlearning_rate = 10 ** r # 10^{r}n

一般地,如果在 10^{a}sim10^{b} 之間的範圍內進行按比例的選擇,則 r in [a, b]alpha = 10^{r}

同樣,在使用指數加權平均的時候,超參數 beta 也需要用上面這種方向進行選擇。

3. 超參數調試實踐--Pandas vs. Caviar

在超參數調試的實際操作中,我們需要根據我們現有的計算資源來決定以什麼樣的方式去調試超參數,進而對模型進行改進。下面是不同情況下的兩種方式:

  • 在計算資源有限的情況下,使用第一種,僅調試一個模型,每天不斷優化;
  • 在計算資源充足的情況下,使用第二種,同時並行調試多個模型,選取其中最好的模型。

4. 網路中激活值的歸一化

在Logistic Regression 中,將輸入特徵進行歸一化,可以加速模型的訓練。那麼對於更深層次的神經網路,我們是否可以歸一化隱藏層的輸出 a^{[l]} 或者經過激活函數前的 z^{[l]} ,以便加速神經網路的訓練過程?答案是肯定的。

常用的方式是將隱藏層的經過激活函數前的 z^{[l]} 進行歸一化。

Batch Norm 的實現

以神經網路中某一隱藏層的中間值為例: z^{(1)},z^{(2)},ldots,z^{(m)}

mu = dfrac{1}{m}sumlimits_{i}z^{(i)}

 sigma^{2}=dfrac{1}{m}sumlimits_{i}(z^{(i)}-mu)^{2}

z^{(i)}_{rm norm} = dfrac{z^{(i)}-mu}{sqrt{sigma^{2}+varepsilon}}

這裡加上 varepsilon 是為了保證數值的穩定。

到這裡所有 z 的分量都是平均值為0和方差為1的分布,但是我們不希望隱藏層的單元總是如此,也許不同的分布會更有意義,所以我們再進行計算:

widetilde z^{(i)} = gamma z^{(i)}_{rm norm}+beta

這裡 gammabeta 是可以更新學習的參數,如神經網路的權重 w 一樣,兩個參數的值來確定 widetilde z^{(i)} 所屬的分布。

5. 在神經網路中融入Batch Norm

在深度神經網路中應用Batch Norm,這裡以一個簡單的神經網路為例,前向傳播的計算流程如下圖所示:

實現梯度下降

  • for t = 1 ... num (這裡num 為Mini Batch 的數量):
    • 在每一個X^{t}上進行前向傳播(forward prop)的計算:
      • 在每個隱藏層都用 Batch Norm 將 z^{[l]} 替換為 widetilde z^{[l]}
    • 使用反向傳播(Back prop)計算各個參數的梯度: dw^{[l]}、dgamma^{[l]}、dbeta^{[l]}
    • 更新參數:
      • w^{[l]}:=w^{[l]}-alpha dw^{[l]}
      • gamma^{[l]}:=gamma^{[l]}-alpha dgamma^{[l]}
      • beta^{[l]}:=beta^{[l]}-alpha dbeta^{[l]}
  • 同樣與Mini-batch 梯度下降法相同,Batch Norm同樣適用於momentum、RMSprop、Adam的梯度下降法來進行參數更新。

Notation

這裡沒有寫出偏置參數 b^{[l]} 是因為 z^{[l]}=w^{[l]}a^{[l-1]}+b^{[l]} ,而Batch Norm 要做的就是將 z^{[l]} 歸一化,結果成為均值為0,標準差為1的分布,再由 betagamma 進行重新的分布縮放,那就是意味著,無論 b^{[l]} 值為多少,在這個過程中都會被減去,不會再起作用。所以如果在神經網路中應用Batch Norm 的話,就直接將偏置參數 b^{[l]} 去掉,或者將其置零。

6. Batch Norm 起作用的原因

First Reason

首先Batch Norm 可以加速神經網路訓練的原因和輸入層的輸入特徵進行歸一化,從而改變Cost function的形狀,使得每一次梯度下降都可以更快的接近函數的最小值點,從而加速模型訓練過程的原理是有相同的道理。

只是Batch Norm 不是單純的將輸入的特徵進行歸一化,而是將各個隱藏層的激活函數的激活值進行的歸一化,並調整到另外的分布。

Second Reason

Batch Norm 可以加速神經網路訓練的另外一個原因是它可以使權重比網路更滯後或者更深層。

下面是一個判別是否是貓的分類問題,假設第一訓練樣本的集合中的貓均是黑貓,而第二個訓練樣本集合中的貓是各種顏色的貓。如果我們將第二個訓練樣本直接輸入到用第一個訓練樣本集合訓練出的模型進行分類判別,那麼我們在很大程度上是無法保證能夠得到很好的判別結果。

這是因為第一個訓練集合中均是黑貓,而第二個訓練集合中各色貓均有,雖然都是貓,但是很大程度上樣本的分布情況是不同的,所以我們無法保證模型可以僅僅通過黑色貓的樣本就可以完美的找到完整的決策邊界。第二個樣本集合相當於第一個樣本的分布的改變,稱為:Covariate shift。如下圖所示:

那麼存在Covariate shift的問題如何應用在神經網路中?就是利用Batch Norm來實現。如下面的網路結構:

網路的目的是通過不斷的訓練,最後輸出一個更加接近於真實值的 hat y 。現在以第2個隱藏層為輸入來看:

對於後面的神經網路,是以第二層隱層的輸出值 a^{[2]} 作為輸入特徵的,通過前向傳播得到最終的 hat y ,但是因為我們的網路還有前面兩層,由於訓練過程,參數 w^{[1]},w^{[2]} 是不斷變化的,那麼也就是說對於後面的網路, a^{[2]} 的值也是處於不斷變化之中,所以就有了Covariate shift的問題。

那麼如果對 z^{[2]} 使用了Batch Norm,那麼即使其值不斷的變化,但是其均值和方差卻會保持。那麼Batch Norm的作用便是其限制了前層的參數更新導致對後面網路數值分布程度的影響,使得輸入後層的數值變得更加穩定。另一個角度就是可以看作,Batch Norm 削弱了前層參數與後層參數之間的聯繫,使得網路的每層都可以自己進行學習,相對其他層有一定的獨立性,這會有助於加速整個網路的學習。

Batch Norm 正則化效果

Batch Norm還有輕微的正則化效果。

這是因為在使用Mini-batch梯度下降的時候,每次計算均值和偏差都是在一個Mini-batch上進行計算,而不是在整個數據樣集上。這樣就在均值和偏差上帶來一些比較小的雜訊。那麼用均值和偏差計算得到的 widetilde z^{[l]} 也將會加入一定的雜訊。

所以和Dropout相似,其在每個隱藏層的激活值上加入了一些雜訊,(這裡因為Dropout以一定的概率給神經元乘上0或者1)。所以和Dropout相似,Batch Norm 也有輕微的正則化效果。

這裡引入一個小的細節就是,如果使用Batch Norm ,那麼使用大的Mini-batch如256,相比使用小的Mini-batch如64,會引入跟少的雜訊,那麼就會減少正則化的效果。

7. 在測試數據上使用 Batch Norm

訓練過程中,我們是在每個Mini-batch使用Batch Norm,來計算所需要的均值 mu 和方差 sigma^{2} 。但是在測試的時候,我們需要對每一個測試樣本進行預測,無法計算均值和方差。

此時,我們需要單獨進行估算均值 mu 和方差 sigma^{2} 。通常的方法就是在我們訓練的過程中,對於訓練集的Mini-batch,使用指數加權平均,當訓練結束的時候,得到指數加權平均後的均值 mu 和方差 sigma^{2} ,而這些值直接用於Batch Norm公式的計算,用以對測試樣本進行預測。

8. Softmax 回歸

在多分類問題中,有一種 logistic regression的一般形式,叫做Softmax regression。Softmax回歸可以將多分類任務的輸出轉換為各個類別可能的概率,從而將最大的概率值所對應的類別作為輸入樣本的輸出類別。

計算公式

下圖是Softmax的公式以及一個簡單的例子:

可以看出Softmax通過向量 z^{[L]} 計算出總和為1的四個概率。

在沒有隱藏隱藏層的時候,直接對Softmax層輸入樣本的特點,則在不同數量的類別下,Sotfmax層的作用:

9. 訓練 Sotfmax 分類器

理解 Sotfmax

為什麼叫做Softmax?我們以前面的例子為例,由 z^{[L]}a^{[L]} 的計算過程如下:

通常我們判定模型的輸出類別,是將輸出的最大值對應的類別判定為該模型的類別,也就是說最大值為的位置1,其餘位置為0,這也就是所謂的「hardmax」。而Sotfmax將模型判定的類別由原來的最大數字5,變為了一個最大的概率0.842,這相對於「hardmax」而言,輸出更加「soft」而沒有那麼「hard」。

Sotfmax回歸 將 logistic回歸 從二分類問題推廣到了多分類問題上。

Softmax 的 Loss function

在使用Sotfmax層時,對應的目標值 y 以及訓練結束前某次的輸出的概率值 hat y 分別為:

y=left[ begin{array}{l} 0100 end{array} right] ,  hat y=left[ begin{array}{l} 0.30.20.10.4 end{array} right]

Sotfmax使用的 Loss function 為:

L(hat y,y)=-sumlimits_{j=1}^{4}y_{j}log hat y_{j}

在訓練過程中,我們的目標是最小化Loss function,由目標值我們可以知道, y_{1}=y_{3}=y_{4}=0,y_{2}=1 ,所以代入 L(hat y,y) 中,有:

L(hat y,y)=-sumlimits_{j=1}^{4}y_{j}log hat y_{j}=-y_{2}log hat y_{2}=-log hat y_{2}

所以為了最小化Loss function,我們的目標就變成了使得 hat y_{2} 的概率儘可能的大。

也就是說,這裡的損失函數的作用就是找到你訓練集中的真實的類別,然後使得該類別相應的概率儘可能地高,這其實是最大似然估計的一種形式。

對應的Cost function如下:

J(w^{[1]},b^{[1]},ldots)=dfrac{1}{m}sumlimits_{i=1}^{m}L(hat y^{(i)},y^{(i)})

Softmax 的梯度下降

在Softmax層的梯度計算公式為:

dfrac{partial J}{partial z^{[L]}}=dz^{[L]} = hat y -y


本文將同時更新在我的CSDN博客

吳恩達Coursera深度學習課程 DeepLearning.ai 提煉筆記(2-3)-- 超參數調試 和 Batch Norm

歡迎關注,一起學習一起進步喲。^_^

推薦閱讀:

如何創造心智:揭示人類思維的秘密
習題都會做,為啥一到實戰還暈菜?
RNN前向傳播與後向傳播公式推導
Master並不可怕 人工智慧將激發人類智力潛能

TAG:深度学习DeepLearning | 人工智能 | 机器学习 |