吴恩达深度学习笔记5-Course2-Week1【深度学习的实用层面】
改善深層神經網絡:超參數調試、正則化以及優化
深度學習的實用層面
一、訓練、驗證、測試集
樣本數據分成以下三個部分:
訓練集(train set): 用于對模型進行訓練。
驗證集(hold-out cross validation/development set): 對不同模型進行評估。
測試集(test set): 對選取的模型進行無偏評估。
node: 驗證集要和訓練集最好來自于同一個分布,可以使得機器學習算法變快。如果不需要用無偏估計來評估模型的性能,則可以不需要測試集。
數據的量的分配:
數據量較小時(小于10000):70% / 30% 或 60% / 20% / 20%;
數據量較大時:通常驗證和測試集主要是評估不同模型,數據量不需要太大,足夠就行。根據數據量的增加減少驗證和測試集的比例。百萬數據時 98% / 1% / 1%。
二、偏差和方差
偏差(bias):由訓練集的error決定:error 大是高偏差(hight bias)
方差(variance):由訓練集和驗證集的error決定:訓練集error 遠小于驗證集error 是高方差(hight bias)
node: 這里的大小是相對于最優誤差也稱為“貝葉斯誤差”的,例如:以人眼判別誤差為“貝葉斯誤差”,人眼誤差為0%時16%的誤差大,如果人眼為15%時16%的誤差小。
欠擬合(underfitting): 高偏差
improve:更復雜的網絡結構(bigger network),增加layer 或 hidden unit;增加迭代次數;尋找更合適的網絡;
過擬合(overfitting): 高方差
improve: 更多的數據(more data); 正則化(regularization); 尋找更合適的網絡;
三、正則化(regularization)
作用:防止 overfitting, 即消除High variance
Logistic regression:
在 cost function 中增加正則化項:
λ為正則化因子。正則化項有很多種,通常使用上式的L2向量范數(norm)。
node: 使用python編程時,注意lambda屬于保留字,可用“lambd”表示λ。
Neural network:
在 cost function 中增加正則化項:
上式的正則化項使用了“Frobenius ”矩陣范數。
Weight decay:正則化也視為權重衰減
求梯度:
梯度更新:
因為(1?α*λ/m)<1,所以W[l]一定會變小,因此稱為權重衰減(Weight decay)。
正則化是怎樣防止overfitting的:
直觀理解:
當正則化因子λ足夠大時,為了最小化 cost function,權重矩陣W會變得很小,接近于0。可以理解為很多w=0,即消除了這些神經元,所以神經網絡就會變成一個較小的網絡。實際上隱藏層的神經元依然存在,只是它們的值趨于0影響變的很小,使得網絡學習特征的能力變弱,這樣就可以達到防止過擬合的效果。
數學原理:
以激活函數為g(z)=tanh(z)為例:
當λ增大,W[l]減小,Z[l]=W[l]a[l?1]+b[l]Z[l]也會變小。由激活函數的圖像得,在z較小的區域里,tanh(z)函數近似線性,所以每層的函數就為近似的線性函數,整個網絡就成為一個簡單的近似線性的網絡,從而防止過擬合。
四、Dropout Regularization
Dropout: 稱為隨機失活,即在訓練每一個example時隨機刪除神經網絡的unit,使得網絡變小,對于每一個example刪除的unit可能不一樣。keep_prob: 每個 unit 被保留的概率。
node: 訓練時dropout,驗證或測試時不用,因為那樣會使得預測結果變得隨機。
對于l層進行dropout處理的python程序:反向隨機失活(Inverted dropout)
理解 Dropout:
以一個unit為例:
在網絡中加入了Dropout后,unit的每一個輸入都有可能會被隨機刪除,所以該unit不會再嚴重依賴于任何一個輸入,即不會給任何一個輸入設置太大的權重。所以通過傳播過程,dropout將產生和L2范數相同的收縮權重的效果。
可以在不同的層,設置不同的keep_prob。通常在unit較少的層可以設為1。unit越多的層可以把它設的越小。
Dropout的缺點:采用Dropout使得 Cost function 不能再被明確的定義,因為每次迭代都會隨機消除一些unit,所以無法繪制出J(W,b)迭代下降的圖。所以通常先關dropout功能,即設置 keep_prob = 1.0。訓練網絡,確保J(W,b)函數單調遞減后
再打開dropout。
五、其它正則化方法
數據擴增(Data augmentation):通過對圖片進行變換,如:水平翻轉、隨機裁剪、扭曲等,得到更多的樣本。
提前停止訓練(Early stopping):在交叉驗證集的誤差上升之前的點停止迭代,避免過擬合。這樣會同時停止優化cost function,即增大bias。所以這種方法的缺點是無法同時解決bias和variance之間的最優。
Speed up trainnig
六、正則化輸入(歸一化)
各特征的數值范圍相差很大時需要歸一化。如:0-1000 和 0-1。在不確定是否需要歸一化時,都進行歸一化,因為它不會有壞的影響。
計算各特征所有樣本數據的均值 :
使各樣本所有樣本均值=0:x = x-u
使各樣本所有樣本方差=1:
作用:加速訓練,更快收斂
最優化 cost function 時沒歸一化的迭代次數遠多于有歸一化。
七、梯度消失&梯度爆炸
梯度消失(vanishing gradients): 梯度指數級遞減
梯度爆炸(exploding gradients): 梯度指數級遞增
設 b=0, g(z)=z。則:
當W>1時,y的值將以指數級遞增。當W<1時,y的值將以指數級遞減。計算梯度時,也會有相同的情況,導致梯度下降算法的步長會變得非常小或非常大。非常大時,可能不收斂。非常小時,需要迭代的次數增加,時間更長。
處理梯度消失和爆炸: 使用初始化策略
以單個unit為例:
當輸入特征n變大時,wi值要變小,使得z保持合理的值。可以設置wi=(1/n)*wi。
初始化代碼:
八、梯度檢驗(Gradient Checking)
梯度的數值逼近: 使用雙邊誤差的方法逼近導數
誤差為:O(ε^2)
梯度檢驗:
衡量數值逼近和梯度下降得到的梯度差別公式:歐幾里得范數,平方和開根號
使用注意點:
1、Don’t use in training – only to debug. 不要在訓練的過程中使用。
2、If algorithm fails grad check, look at components to try identify bug. 找到差別最大的那個項,進行修改。
3、Remember regularization. 算梯度時記得包含正則化項。
4、Doesn’t work with dropout. 不要用來檢查dropout的梯度。因為cost function 難以計算,每個example的參數都不一樣,不能用向量化計算,很慢。
5、Run at random initialization; perhaps again after some training.
總結
以上是生活随笔為你收集整理的吴恩达深度学习笔记5-Course2-Week1【深度学习的实用层面】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何处理代码冲突
- 下一篇: linux概述、基本命令