一、前述
上一篇講述了神經網路中的調優實現,本文繼續講解。
二、L1,L2正則防止過擬合
使用L1和L2正則去限制神經網路連線的weights權重,限制更小
1、對於一層時可以定義如下:
一種方式去使用TensorFlow做正則是加合適的正則項到損失函式,當一層的時候,可以如下定義:
2、對於多層時可以定義如下:
可是如果有很多層,上面的方式不是很方便,幸運的是,TensorFlow提供了更好的選擇,很多函式如get_variable()或者fully_connected()接受一個 *_regularizer 引數,可以傳遞任何以weights為引數,返回對應正則化損失的函式,l1_regularizer(),l2_regularizer()和l1_l2_regularizer()函式返回這個的函式。
上面的程式碼神經網路有兩個隱藏層,一個輸出層,同時在圖裡建立節點給每一層的權重去計算L1正則損失,TensorFlow自動新增這些節點到一個特殊的包含所有正則化損失的集合。你只需要新增這些正則化損失到整體的損失中,不要忘了去新增正則化損失到整體的損失中,否則它們將會被忽略。
三、Dropout防止過擬合
1、原理
在深度學習中,最流行的正則化技術,它被證明非常成功,即使在頂尖水準的神經網路中也可以帶來1%到2%的準確度提升,這可能乍聽起來不是特別多,但是如果模型已經有了95%的準確率,獲得
2%的準確率提升意味著降低錯誤率大概40%,即從5%的錯誤率降低到3%的錯誤率!!!
在每一次訓練step中,每個神經元,包括輸入神經元,但是不包括輸出神經元,有一個概率被臨時的丟掉,意味著它將被忽視在整個這次訓練step中,但是有可能下次再被啟用(是隨機的)
超引數p叫做dropout rate,一般設定50%,在訓練之後,神經元不會再被dropout(設定成50%的話,傳輸到下一層就少了半的引數)
2、舉例
公司每天投擲硬幣只要一半的員工上班,或許帶來的公司收入更高?公司或許因為這個被迫調整組織結構,也許員工一人會多個任務,而不是未來受制於一倆個員工的缺席,這裡的員工類比到神經元
3、優點
相當於變相的提高資料量,但迭代次數要增加,可以理解成每次遮擋一部分資料,變相提高推廣能力,使模型更加健壯,防止過擬合。
4、圖例
除了輸出層其他都可以Dropout,一般我們Dropout的是全連線層。
5、應用
keep_prob是保留下來的比例,1-keep_prob是dropout rate
當訓練的時候,把is_training設定為True,(丟掉一些資料),當測試的時候,設定為False(不能Dropout)
四、選擇適當的啟用函式
大多數情況下啟用函式使用ReLU啟用函式,這種啟用函式計算更快,並且梯度下降不會卡在plateaus,並且對於大的輸入值,它不會飽和,相反對比logistic function和hyperbolic tangent
function,將會飽和在1對於輸出層,
softmax啟用函式通常是一個好的選擇對於分類任務,因為類別和類別之間是互相排斥的,(會做到歸一化)
對於迴歸任務,根本不使用啟用函式
多層感知機通常用於分類問題,二分類,也有很多時候會用於多分類,需要把輸出層的啟用函式改成共享的softmax函式,輸出變成用於評估屬於哪個類別的概率值
五、資料增大
1、原理
從現有的資料產生一些新的訓練樣本,人工增大訓練集,這將減少過擬合
2、舉例
例如如果你的模型是分類蘑菇圖片,你可以輕微的平移,旋轉,改變大小,然後增加這些變化後的圖片到訓練集,這使得模型可以經受位置,方向,大小的影響,如果你想用模型可以經受光條件的影響,你可以同理產生許多圖片用不同的對比度,假設蘑菇對稱的,你也可以水平翻轉圖片TensorFlow提供一些圖片操作運算元,例如transposing(shifting),rotating,resizing,flipping,cropping,adjusting brightness(亮度),contrast(對比度),saturation(飽和度),hue(色調)
3、圖示