Deep Learning - 3 改進神經網絡的學習方式


反向傳播算法是大多數神經網絡的基礎,我們應該多花點時間掌握它。

還有一些技術能夠幫助我們改進反向傳播算法,從而改進神經網絡的學習方式,包括:

  • 選取更好的代價函數
  • 正則化方法
  • 初始化權重的方法
  • 如何選擇網絡的超參

Cost Function

這里來看一個非常簡單的神經元,我們輸入1,期望它輸出0。

我們看看 Gradient Descent 是如何幫助我們學習 Weights 和 Biases 的。

Round 1

我們的初始值如下:
$$
Weight = 0.6 \
Bias = 0.9 \
\eta = 0.15
$$

這個神經元的初始輸出是 0.82 。

我們看到神經元能夠迅速地學習 Weights 和 Biases ,經過300 epoch 的學習,最終輸出是 0.09,已經很接近我們的預期 0 ,這個結果已經足夠好了。

Round 2

我們修改下初始值,再來看下:
$$
Weight = 2 \
Bias = 2 \
\eta = 0.15
$$

這個神經元的初始輸出是 0.98 。

盡管 Learning Rate 一樣,但是我們看到學習在一開始非常緩慢。看起來在前150 epoch ,Weights 和 Biases 都沒有改變太多。

從這個例子我們可以看出,人工神經元在誤差很大的時候,學習遇到了問題,學習速度變慢了。

為什么學習速度變慢

神經元的學習方式:

通過計算代價函數的偏導 $\frac{\partial C}{\partial w}$ 和 $\frac{\partial C}{\partial b}$ 來改變 Weights 和 Biases 。

我們說學習速度變慢,實際上是在說偏導很小。

為什么偏導很小

我們的代價函數是均方誤差代價函數
$$
C = \frac{ (y-a)^2 }{2}
$$

  • a是x=1時神經元的輸出
  • y=0是期待的輸出

在激活函數是Sigmoid函數時
$$
a = \sigma(z) \
z = wx+b
$$
代價函數的偏導是
$$
\frac{\partial C}{\partial w} = (a-y) \sigma'(z) x \
\frac{\partial C}{\partial b} = (a-y) \sigma'(z) \
$$
當x=1,y=0時
$$
\frac{\partial C}{\partial w} = a \sigma'(z) \
\frac{\partial C}{\partial b} = a \sigma'(z) \
$$
我們來看下Sigmoid函數的形狀

當神經元的輸出接近1時,曲線變得非常平緩,$\sigma'(z)$ 就變得非常小,從而 代價函數的偏導 $\frac{\partial C}{\partial w}$ 和 $\frac{\partial C}{\partial b}$ 也會變得非常小。

這就是學習速度變慢的根源。

Cross Entropy Cost Function

那么,我們換個代價函數能不能解決上面的問題?

再看擁有多個輸入變量神經元模型


$$
z = \sum_j w_j x_j + b
$$

  • 這里 z 是輸入的加權求和。

我們為這個神經元定義交叉熵代價函數如下:
$$
C = -\frac{1}{n} \sum_x \left[y \ln a + (1-y ) \ln (1-a) \right]
$$

  • n是訓練數據的個數
  • 求和是針對所有訓練輸入樣本x
  • y是我們對每個樣本x所期望的相應地輸出

均方誤差代價函數和交叉熵代價函數都有兩個特點

交叉熵是正數
  1. 由Sigmoid激活函數的特性可以知道,激活值a的取值介於0和1之間,它們的對數是負數
  2. 求和后的數是負數
  3. 整個等式前面有一個符號,最終$C>0$
當所有輸入x的輸出都能接近期望輸出y時,代價函數接近0

比如對於樣本x,它的
$$
y = 0 \
a \approx 0
$$
這樣,等式的第一項就是0

從圖上可以看出,等式的第二項$\ln(1-a) \approx 0$

對於樣本x
$$
y = 1 \
a \approx 1
$$
等式的第二項為0

等式的第一項$\ln a \approx 0$

上面兩種情況,交叉熵代價函數都約等於0

交叉熵獨有的特點

先看下交叉熵關於權重的偏導
$$
\frac{\partial C}{\partial w_j} = -\frac{1}{n} \sum_x \left(
\frac{y }{\sigma(z)} -\frac{(1-y)}{1-\sigma(z)} \right)
\frac{\partial \sigma}{\partial w_j}
\
= -\frac{1}{n} \sum_x \left(
\frac{y}{\sigma(z)}
-\frac{(1-y)}{1-\sigma(z)} \right)\sigma'(z) x_j
$$
通分簡化后
$$
\begin{eqnarray}
\frac{\partial C}{\partial w_j} & = & \frac{1}{n}
\sum_x \frac{\sigma'(z) x_j}{\sigma(z) (1-\sigma(z))}
(\sigma(z)-y).
\tag{60}\end{eqnarray}
$$
我們知道$\sigma'$
$$
\sigma(z) = \frac{1}{1+e^{-z}} \
\sigma'(z) = \sigma(z)(1-\sigma(z))
$$
代入到上面的公式中
$$
\frac{\partial C}{\partial w_j} = \frac{1}{n} \sum_x x_j(\sigma(z)-y)
$$
從交叉熵關於權重的偏導中,我們看到權重的學習速率可以是被輸出結果的誤差所控制。

之前均方誤差關於權重的偏導中,誤差太大導致$\sigma'(z)$非常小,造成學習速度非常慢。

現在交叉熵關於權重的偏導中,$\sigma'(z)$被抵消掉了,因此不會擔心誤差太大會導致學習速度慢。相反,誤差越大我們的神經元學習速率越大。

Round 3

再來看看使用交叉熵代價函數時的學習速度。
$$
Weight = 0.6 \
Bias = 0.9 \
\eta = 0.15
$$

對於交叉熵代價函數而言,Learning Rate = 0.15 太高了,學得太快,以至於我們看不清楚代價函數的值是如何變化的。

這里將 Learning Rate 換成 0.005 再看一次。
$$
Weight = 0.6 \
Bias = 0.9 \
\eta = 0.005
$$

我們看到和之前一樣好。

Round 4

$$
Weight = 2 \
Bias = 2 \
\eta = 0.005
$$

我們看到誤差太大沒有導致學習速度變慢。

Softmax

激活函數除了Sigmoid,還有Softmax。

第j個輸出神經元的激活值 $a_j^L$ 是
$$
a_j^L = \frac{e{z_jL}}{\sum_k e{z_kL}}
$$
分母是對所有輸出神經元求和。

從公式我們可以看出,Softmax層的所有輸出激活值都是正數,並且它們加起來和為1。

這樣就可以把Softmax層得到的輸出看作是一個概率分布,將數據激活值 $a_j^L$看作是神經網絡認為結果是 j 的概率。

Softmax的單調性

函數的單調性,指函數的自變量增大或減小,函數值也增大或減小。

Softmax也有這樣的特性,當加權輸入 $z_j^L$ 增加時,激活值 $a_j^L$ 也增加。

Softmax的非局部性

sigmoid層的第j個神經元的輸出是
$$
a_j^L = \sigma(z_j^L)
$$
它是只關於第j個神級元的加權輸入的一個函數。

而 Softmax 層的任何一個 $a_j^L$ ,都要依賴該層所有神經元的加權輸入。

反轉Softmax層

我們有一個帶有Softmax層的神經網絡,已知激活值,那么加權輸入為:
$$
z_j^L = \ln a_j^L + C
$$

Log-Likelihood Cost Function

Sigmoid 輸出層與 Cross-Entropy 代價函數搭配

Softmax 輸出層與 Log-Likelihood 代價函數搭配

Log-Likelihood 代價函數的公式是:
$$
C \equiv - \ln a_y^L
$$

  • x表示輸入網絡的訓練樣本
  • y是期待的輸出,用One-Hot向量表示。y=7表示向量的第7位是1,其余位是0

如果輸入的是數字 7 對應的圖像,那么 Log-Likelihood 代價是
$$
-\ln a_7^L
$$
如果網絡工作很好,對輸出 7 非常自信,$a_7^L$ 會非常接近1,那么$-\ln a_7^L$ 就會很小。

如果網絡工作不好,概率 $a_7^L$ 會很小,而 $-\ln a_7^L$ 會很大。

學習速度不會衰退

$$
\frac{\partial C}{\partial b^L_j} = a^L_j-y_j
\
\frac{\partial C}{\partial w^L_{jk}} = a^{L-1}_k (a^L_j-y_j)
$$

這些表達式確保我們不會遇到學習速度衰退的問題。

反向傳播

$\delta_j^L = a_j^L - y_j$

過擬合和正則化

Johnny von Neumann 說四個參數可以模擬一頭大象,五個參數可以讓它搖動鼻子。

Enrico Fermi 認為,擁有大量自由參數的模型能夠描述一個足夠寬泛的現象。即使這樣的模型與現有數據擬合得非常好,但它並沒有真正地洞察到現象背后的本質,以至於不能普及到新的情況上。

訓練數據的代價

測試數據的准確度

測試數據的代價

訓練數據的准確度

我們看到,訓練數據的代價一直在下降,這可能讓我們覺得模型似乎一直在改進。

但是從測試數據的准確度來看,280 epoch 后就幾乎停止改善。

從測試數據的代價來看,更直觀,在15 epoch前代價一直在降低,但之后卻開始變大。而訓練數據的代價是一直在降低的。

從訓練數據的准確度來看,訓練數據的准確率上升到100%,能正確分類所有的訓練數據,但是在測試數據上的准確率卻直郵82.27% 。

以上種種跡象表明,280 epoch 開始的網絡產生了 OverFitting 。

在含有大量 Weights 和 Biases 參數時,神經網絡很容易過擬合。我們需要跟蹤網絡訓練過程中測試數據的准確度,如果測數據集的准確度不在提高,就應該停止訓練。

Validation Data

我們引入 Validation Data,每一步訓練后,計算 Validation Data 的分類准確度,一旦分類准確度達到飽和,就停止訓練。這種策略叫做 Early Stopping(提前終止)。

為什么使用 Validation Data 而不是使用 Test Data 來蘋果結果去設置超參

如果基於 Test Data 去做,有可能我們最后的網絡是對 Test Data 過擬合的,網絡的性能不能推廣到其它數據集。

可以將 Validation Data 看作幫助我們學習合適超參的一種訓練數據。

這里超參是指網絡層數,隱藏層神經元個數,學習率,批次大小。

增加數據訓練數據

增加訓練數據是降低過擬合的最好方法之一。

一樣的超參,只是訓練圖片從1000增加到50000,測試數據和訓練數據的准確度更加接近,差距從之前17.73%降低到1.53% 。

雖然過擬合依然存在,但已經大大降低,我們的網絡能從訓練數據更好地泛化到測試數據。

Regularization

除了增加訓練數據,還能通過減小網絡規模去避免過擬合。但是我們覺得大型網絡更有潛力,不願意減小規模。

在固定網絡規模和固定訓練數據大小的時候,我們還可以選擇 Regularization(正則化)技術。

L2 Weight Decay

權重衰減是最常用的正則化技術,也叫 L2 Regularization(L2 正則)。它的思想是在代價函數中加入一個額外的正則化項。
$$
C = C_0 + \frac{\lambda}{2n} \sum_w w^2
$$

  • $C_0$ 是原本沒有正則化的代價函數
  • 第二項是網絡中所有 Weights 的平方和
  • $\lambda$ 是 regularization parameter(正則化參數),並且 $\lambda > 0$

當 $\lambda$ 較小時,我們偏好最小化原來的代價函數,當 $\lambda$ 較大時,我們讓網絡偏好學習更小的 Weights 。

在隨機梯度下降算法中應用正則化

在正則化的網絡中應用隨機梯度下降算法,對上面的公式求偏導可知:
$$
\frac{\partial C}{\partial w} = \frac{\partial C_0}{\partial w} + \frac{\lambda}{n} w \
\frac{\partial C}{\partial b} = \frac{\partial C_0}{\partial b}
$$
只要照常使用反向傳播,並把 $\frac{\lambda}{n} w$ 代入
$$
b \rightarrow b - \eta \frac{\partial C_0}{\partial b} \
w \rightarrow w - \eta \frac{\partial C_0}{\partial w} - \frac{\eta \lambda}{n} w \
= \left(1 - \frac{\eta \lambda}{n}\right) w - \eta \frac{\partial C_0}{\partial w}
$$
我們看到,跟之前唯一的變化時,我們用 $\left(1 - \frac{\eta \lambda}{n}\right) $ 來調整 Weights ,這種調叫做 Weight Decay(權重衰減)。

之前我們的隨機梯度下降,時在包含m個訓練樣本的mini-batch數據中進行平均以估計$\frac{\partial C_0}{\partial w}$,現在對於隨機梯度下降法而言正則化的學習方法變成了:
$$
w \rightarrow \left(1 - \frac{\eta \lambda}{n}\right) w - \frac{\eta}{m} \sum_x \frac{\partial C_x}{\partial w} \
b \rightarrow b - \frac{\eta}{m} \sum_x \frac{\partial C_x}{\partial wb}
$$
$\sum$ 是針對mini-batch中所有訓練樣本進行求和

$C_x$ 是每個樣本未進行正則化的代價

我們看到,正則化只是增加了權重衰減。

Round 1

我們使用 $n = 1000$ 個訓練樣本再跑一次,這次由30個隱藏層神經元,每個mini-batch的大小是10,學習率是0.5,使用交叉熵代價函數,正則化參數 $\lambda = 0.1$。使用1000個訓練樣本。

我們看到訓練數據的代價函數一直在下降,與之前沒有進行正則化時一樣。

但是從測試數據的准確度,我們看到應用正則化抑制了過擬合。

准確度也從之前的82.27上升到87.1 。

Round 2

這次將訓練樣本增加到 $n=50000$ ,相應的,也需要調整正則化參數 $\lambda = 5$,讓權重衰減跟之前保持一樣。

我們之前看到過,對於50000樣本量的訓練數據,過擬合已經不再是個大問題了。但是應用正則化后,我們在測試數據上的准確度從95.49%提升到96.49% 。

從經驗來看,正則化讓我們的網絡聲稱得更好,並有效地減弱了過擬合效應。

正則化的好處

  • 減弱過擬合,
  • 提升分類准確率,
  • 避免陷入代價函數的局部最優中

使用隨機 Weights 初始化時,經常卡在代價函數的局部最優中,結果就是每次運行可能產生相當不同的結果。

而應用了正則化后,每次運行可以提供更容易復現的結果。

為什么正則化能夠降低過擬合

一般的說法是:某種程度上,越小的權重復雜度越低,能更簡單有效地描繪數據,所以我們傾向於選擇這樣的權重。

L1

$$
C = C_0 + \frac{\lambda}{n} \sum_w |w|
$$

我們再來看下L2正則的代價函數
$$
C = C_0 + \frac{\lambda}{2n} \sum_w w^2
$$
對L1代價函數求偏導
$$
\frac{\partial C}{\partial w} = \frac{\partial C_0}{\partial w} + \frac{\lambda}{n} sgn(w)
$$
$sgn(w)$是取w的符號,當w為正數時,$sgn(w) = +1$。當w為負數時,$sgn(w) = -1$。

對反向傳播進行修改,使用基於L1正則化的隨機梯度下降進行學習。
$$
w \rightarrow w' = w - \frac{\eta \lambda}{n} sgn(w) - \eta \frac{\partial C_0}{\partial w}
$$
我們可以使用 mini-batch 的均值去估計 $\frac{ \partial C_0}{\partial w}$,
$$
w \rightarrow w' = (1 - \frac{\eta \lambda}{n}) w - \eta \frac{\partial C_0}{\partial w}
$$
我們再來看下L2正則的:
$$
w \rightarrow w' = \left(1 - \frac{\eta \lambda}{n}\right) w - \frac{\eta}{m} \sum_x \frac{\partial C_x}{\partial w}
$$

共同點

L1 和 L2 的共同點是都懲罰大的權重。

不同點

L1 中,權值通過一個常量向 0 縮小。

L2中,權值通過一個和 w 成比例的量進行縮小。

  • 當 $|w|$ 很大時,L1 比 L2 縮小得少。
  • 當 $|w|$ 很小時,L1 比 L2 縮小得多。

結果是,L1 會將權值保留在少量的高重要度的連接上,其它權值會趨向0接近。

Dropout 棄權

L1 和 L2 正則化是對代價函數的修改。Dropout 是改變網絡本身。

假設我們有訓練數據 x,和輸出 y,一般會通過在網絡中正向傳播 x 進行訓練,再反向傳播確定梯度的貢獻。

當使用 Dropout 時:

  1. 我們先隨機臨時刪除網絡中的一半的隱藏神經元,同時輸入層和輸出層的神經元保持不變。
  2. 在一個 mini-batch 中,前向傳播輸入 x ,通過修改后的網絡,然后反向傳播結果,並通過這個修改后的網絡。然后對有關權值和偏置進行更新。
  3. 重復上面的過程,先重置棄權的神經元,再選擇一個新的隱藏神經元的隨機子集,對這個不同的 mini-batch 估計它的梯度,然后再更新權值和偏置。

我們棄權掉不同的神經元幾何,這樣就像是我們在訓練不同的神經元集合。棄權過程如同大量不同網絡的效果的平均。不同的網絡會以不同的方式過度擬合,所以棄權過的網絡效果會減輕過擬合。

比如我們訓練了五個網絡,其中三個把數字分類為3,那很可能就是3了。

在圖像、語音識別、自然語言處理時,很有效。大規模深度網絡時也很有用,因為這樣的網絡過擬合問題特別突出。

人為擴展訓練數據

一般我們認為大量的訓練數據會得到更好的性能。

但這個代價很大。有時我們可以人為擴展訓練數據,比如圖片5,將其做一個旋轉,轉換,扭曲,都懂,使用擴展后的訓練數據來提升網絡的性能。

更多的訓練數據能補償不同算法的差距。

權值初始化

之前我們一直用均值為0,標准差為1的獨立高斯隨機變量來選擇權值和偏置。

其實用歸一化的高斯分布不是最好的。

跟以前的歸一化問題一樣,如果權值大,$z$ 也大,$\sigma ( z )$ 就接近 1 或 0,隱藏層神經元會飽和,梯度下降算法學習慢。

之前我們通過選擇不同的代價函數來解決,但那只是對輸出神經元有效,對隱藏神經元不起作用。

假設我們有一個神經元,它的輸入權值是 $n_{in}$,然后我們用均值是0,標准差是 $\frac{1}{\sqrt{n_{in}}}$ 的高斯隨機變量來初始化這些權值。

這樣,$z = \sum_j w_j x_j +b$ 的取值更小。

這樣的神經元更不容易飽和,也更不可能使學習速度下降。

$\frac{1}{\sqrt{n_{in}}}$ 權值初始化,可以加快訓練速度,有時也能提升網絡的最終性能。

如何選擇超參數

每一 epoch 的精確度一直下降,但是我們一開始並不知道哪些超參數應該被調整。

  • 也許問題在於無論我們怎么選擇超參數,30個隱藏神經元網絡永遠都不會工作得很好。
  • 我們可能真的需要至少100個隱藏神經元?或300個隱藏神經元?或多個隱藏層?
  • 可能我們的網絡正在學習,但是需要更多的 epoch。
  • 可能 mini-batch 太小了。
  • 可能我們我們應該換回 均方誤差代價函數。
  • 可能我們需要嘗試一個不同的途徑來初始化權值。
  • 等等。

我們很容易就會迷失方向。這里我們解釋一些啟發式的方法,幫助你開發一個工作流,能讓你更好地設置超參數。

Broad Strategy 寬泛策略

寬泛策略不好。

Learning Rate

Different Learning Rate

  • $\eta = 0.025$,代價函數平滑下降到最后回合。

  • $\eta = 0.25$ ,代價在20回合時接近飽和。后面微震盪和隨機抖動。

  • $\eta = 2.5$,代價一直震盪。

震盪的原因是$\eta$太大,使算法在接近最小值時,又越過谷底。

隨機梯度下降期望我們能夠逐漸地抵達代價函數的谷底。

學習率太大,代價一直震盪,太小又算法變慢,如果可變學習速度會更好。開始時使用$\eta = 0.25$,接近谷底換成$\eta = 0.025$。

策略是:

  • 一開始就找到使代價震盪的 $\eta$ 的量級,也就是 $\eta$ 的 threshold。
  • 如果0.01沒有震盪,加到0.1, 1.0。
  • 如果0.01就震盪,減到0.001,0.0001。
  • 先找量級,再確定 threshold,再將 $\eta$ 設為 threshold 的一半。

Early Stopping

在每個 epoch 結束時,我們都會在驗證數據上計算分類精度。當分類精度不再提升時,我們就結束它。Early Stopping 會自動防止過擬合。但是在試驗的早期階段,我們會關閉 Early Stopping ,這樣我們能夠看到任何過擬合的信號,並用這些信息去選擇正則化算法。

即使是總體趨勢在提升的情況下,我們也能看到精度在抖動和震盪。如果我們在精度剛開始下降的時候就終止它,我們肯定會錯過更好的模型。一個更好的准則是當最好的分類精度一段時間都沒有提升時,再終止它。這樣既不會錯過什么,也不會等太久。

這里有一個准則:連續十次沒有提升就終止。但是網絡有時會在很長一段時間內,分類精度很平緩,然后才會有提升。如果你想要獲得更好的性能,這個准則就太草率了。

Learning Rate Schedule

我們一直將 $\eta$ 設置為常量。一開始,我們會使用一個大的學習速率,讓權值變化地快一點。然后,我們減小學習速率,這樣可以對權值做出更加精良的調整。

一個觀點是保持學習速率不變,直到驗證數據集精度開始變差時,按照 1/2 或 1/10 去降低學習速率。這樣重復幾次,直到學習學習速率變為初始值的 1/1000,就停止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM