改善深層神經網路第一週
1.1 訓練/開發/測試集
可以將一個數據集分為三個部分,
- 訓練集:對訓練集執行訓練演算法,通過驗證集或簡單交叉驗證集選擇最好的模型.
- 驗證集:驗證不同的演算法的有效性進而選擇最終的模型,然後就可以在測試集上進行評估了.
- 測試集(test):對驗證集最終選定的神經網路做出無偏估計,如果你不需要對模型進行無偏估計,那麼測試集沒有也無妨。
於資料量過百萬級別的資料我們可以使測試集,驗證集佔比更少即可
經驗之談:要確保驗證集和測試集的資料來自同一分佈.
1.2 偏差/方差
- Bias是 “用所有可能的訓練資料集訓練出的所有模型的輸出的平均值” 與 “真實模型”的輸出值之間的差異;
- Variance則是“不同的訓練資料集訓練出的模型”的輸出值之間的差異。
1.3如何解決高偏差/方差的問題
當初始模型訓練完成後,首先要知道演算法的偏差高不高,偏差高(無法擬合訓練集)的解決辦法有:
1)選擇一個新網路,比如含有更多隱層或者隱層單元的網路
2)花費更多時間訓練演算法,或者嘗試更先進的優化演算法
當結果很好地擬合訓練集時,就要檢視是否在驗證集上也表現很好,即檢查是否有高方差問題(過度擬合),高方差的解決方法有:
1)採用更多的資料(可能很難)
2)通過正則化來減少過擬合
不斷迭代,直到找到一個低偏差,低方差的模型
1.4正則化
- √正則化:在損失函式中給每個引數 w 加上權重,引入模型複雜度指標,從而抑制模型噪聲,減小 過擬合。
- why L2:在BP演算法中權值W的每次梯度下降會額外減去一個(1−αλm)W(1−αλm)W的值稱之為”權重衰減”即”Weight decay”
1.5 為什麼正則化可以減少過擬合
正則化項可以理解為複雜度,cost越小越好,因此cost加入正則化項後,為了使cost小,則不能使正則項大,也就是不能讓模型複雜,這樣就降低了模型的複雜度,也就降低了過擬合,這就是正則化。
1.6 dropout正則化
優點:對於存在過擬合的神經網路,dropout會遍歷神經網路的每一層,並設定消除每一點的概率,然後刪除某些點,得到一個更小的神經網路,然後用backprop方法進行訓練.
1.7 其他正則化方法
- 擴增資料集:人工合成數據
- early stopping:”神經網路你到現在的迭代訓練中表現已經非常好了,我們停止訓練吧”
機器學習的一般步驟:
1)選擇一個演算法來優化代價函式J
2)優化代價函式之後,同時不要過擬合(使用正則化或者擴增資料)
1.8 early stopping和L2正則化的權衡
- L2正則化:引入超引數λ,這樣就要不停的尋找λ,使得訓練效果更好,因此訓練代價高;
- earlystopping:只執行一次梯度下降,那你就可以找到w的較小值,中間值和較大值,而無需嘗試L2正則化超級引數λ的很多值.但是在訓練早期就終止了,使得代價函式J並沒有達到最優。
1.9 正則化輸入
1.10 梯度消失與梯度爆炸
直觀上理解,梯度消失會導致優化函式訓練步長變小,使訓練週期變的很長.而梯度爆炸會因為過大的優化幅度而跨過最優解。
1.11 初始化權重
為了防止梯度爆炸或者梯度消失,我們希望w儘可能小,最合理的方法就是設定W方差為1/n, n表示神經元的輸入特徵數量
1.12 梯度的數值逼近
梯度其實就是微分求導,但是由於求導結果可能比較複雜,所以使用微積分中的求導的定義來計算梯度。
最後我們的主要目標是檢查這個梯度的近似向量與反向傳播演算法得到的梯度向量是否近似相等。
在確定好神經網路的結構後,我們按如下的步驟訓練神經網路:
- 隨機初始化權重引數;
- 對於每一個 通過前向傳播得到;
- 計算代價函式;
- 反向傳播演算法用於計算偏導數
- 使用梯度檢查來比較反向傳播演算法計算的和數值估計的的梯度,如果沒有問題,在實際訓練時關閉這部分程式碼;
- 在反向傳播的基礎上使用梯度下降或其他優化演算法來最小化;