2 1 優化神經網路(上)

2021-10-21 01:42:40 字數 3051 閱讀 6828

3 其他的一些解決過擬合的方法

3.1 data augmentation(資料增加)

3.2 early stopping

4 加快訓練速度的方法

4.1 early stopping

4.2 歸一化輸入

5 梯度消失和梯度**及其解決

6 梯度檢驗

都遍歷神經網路的每一層,並設定消除神將網路中節點的概率。對每乙個訓練樣本輸入神經網路進行訓練時,我們判斷當前神經網路有哪些節點被刪除了,哪些還保留著,若該節點被消除,則刪除掉從該節點進出的連線。所以對每乙個訓練樣本,我們都是用乙個精簡後的神經網路去訓練它。即每次使用不同的訓練樣本迭代都會有不同的單元被刪除

我們常用的是inverted dropout(反向隨機失活)

假設神經網路有3層,設定第三層的節點保留概率為keep-prob=0.8

令d3 = (np.random.rand(a3.shape[0], a.shape[1]) < keep-prob),d向量是用來覺得每乙個隱層哪些神經元被刪除的

a3 = np.multiply(a3, d3)

a3 = a3 / keep-prob

在測試階段卻不使用dropout,因為我們不希望我們的測試輸出是隨機的

我們可以對神經網路的不同層設定不同的keep-porb值,若該層神經元個數多,則過擬合可能性大,我們應該使用較小的keep-porb值,具體設定多少,可以通過交叉驗證集確定。

我們甚至可以在輸入層使用dropout來隨機刪除部分特徵(實際應用少)

dropout正則化在cv領域應用較多,因為資料量太大

代價函式j不再被明確定義,因為j不再隨著迭代次數增加而依次降低,所以debug時我們一般先把dropout關閉(將keep-porb值設定為1)迭代幾次,若j逐漸降低,說明網路結構沒錯,可以進一步計算

如果我們想通過擴大訓練集來解決過擬合的話,我們可以簡單地將訓練集進行變換,獲得新的訓練輸出樣本,這樣可以在低成本的情況下增大訓練資料集

同時繪製訓練集上和交叉驗證集上的誤差隨著迭代次數增加的變化曲線,在紫色點處停止訓練,神經網路在此時已經表現的很好了:

early stopping就可以起到類似l2正則化的效果,但是他不用搜尋很大的λ引數空間,僅使用一次梯度下降迭代就可以得到和l2近似的效果,因為我們一般初始化w和b的值都很小,隨著迭代次數增加會變得越來越大,而early stopping可以在w還比較小的時候停止迭代,這與l2正則化功能類似。

對輸入資料集,減去其特徵的均值μ(使該資料集的每個特徵均值為0)

歸一化方差

則歸一化後的結果為:

**我們還應該使用剛剛的μ和σ去歸一化測試集,因為我們希望訓練集和測試集都是通過相同的μ和σ定義的相同的資料轉換 **

可以加速訓練的原因:如果你使用非歸一化的輸入特徵,那麼代價函式將會像下圖左側圖那樣,這是乙個非常細長狹窄的代價函式。如果x1的取值範圍從1到1000,x2的範圍是從0到1,結果是引數w1和w2的範圍或比率將會非常不同。如果你能畫出該函式的部分輪廓,它會是這樣乙個狹長的函式。然而,如果你歸一化特徵,代價函式平均起來更對稱。如果你在左圖這樣的代價函式上執行梯度下降法,你必須使用乙個非常小的學習率,因為如果初始位置位於下圖紅色箭頭的位置,梯度下降法可能需要多次迭代過程,直到找到最小值。但如果函式是乙個更圓的球形輪廓,那麼不論從哪個位置開始,梯度下降法都能夠更直接地找到最小值,你可以在梯度下降法中使用較大步長,而不需要像在左圖那樣反覆執行。當然,實際上w是乙個高維向量,因此用二維繪製w並不能正確地傳達直觀理解,但總的直觀理解是當特徵都在相似範圍內時,代價函式會更圓一點,而且更容易優化。

梯度消失和梯度**是訓練深層網路經常遇到的問題,即導數的坡度會變得非常大或者非常小。假設我們的網路很深,為了方便起見,我們這裡假設啟用函式是線性的g(z)=z,則我們最後得到的輸出y也是x1,x2的線性組合,呈指數關係

如果w的權重都是1.5,則y將會比輸入的x大好多好多倍:

反之,如果w的權重小於1,那麼y將會比輸入的x小很多

解決方法是謹慎選擇權重矩陣的初始化的值:如果某一層的神經元數量越多,為了防止下一層神經元啟用函式取到太大的輸入值,我們一般希望權重小一些,即我們在w初始化時乘以下面這一項:其中分子可以是1,也可以是2

也可以乘以這個:

在編寫梯度下降演算法的**時,為了防止出錯,我們一般使用梯度檢驗操作來檢驗我們演算法的正確性,方法如下:

注意,這種梯度檢測雖然可以很近似的表示梯度,但是時間複雜度很高,遠大於反向傳播時間複雜度,所以梯度下降只用作檢驗方法。

注意:

如果使用了正則化項,則在梯度檢測中近似表示dθ時也要加上正則化項

在梯度檢測中不要使用dropout,這樣會導致代價函式j很難計算。

神經網路優化

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input data 載入資料集 mnist input data.read data sets mnist data one hot true 每個批次的...

2 1 神經網路基礎(一)

計算機要儲存一張,實際需要儲存三個矩陣。分別對應的是紅綠藍三個顏色通道。在二分分類問題中,目標是訓練出乙個分類器。它以中的特徵向量x作為輸入,輸出結果標籤y是1 是乙個貓 還是0 不是乙個貓 最後,為了方便表示,我們將x和y都寫成矩陣形式,在python中 x.shape 這樣的命令就是用來看矩陣的...

神經網路優化(一)

使用反向傳播演算法和梯度下降演算法調整神經 網路中引數的取值。神經網路的優化過程分為兩個階段 1.1第一階段 先通過前向傳播演算法計算得到 值,並將 值和真實值做對比得出兩者之間的差距。1.2第二階段 通過反向傳播演算法計算損失函式對每乙個引數的梯度,再根據梯度和學習率使用梯度下降演算法更新每乙個引...