CNN學習筆記:正則化緩解過擬合
過擬合現象
在下圖中,雖然綠線完美的匹配訓練數據,但太過依賴,並且與黑線相比,對於新的測試數據上會具有更高的錯誤率。雖然這個模型在訓練數據集上的正確率很高,但這個模型卻很難對從未見過的數據做出正確響應,認為該模型存在過擬合現象。
綠線代表過擬合模型,黑線代表正則化模型。故我們使用正則化來解決過擬合問題。
正則化模型
正則化是機器學習中通過顯示控制模型復雜度來避免模型過擬合、確保泛化能力的一種有效方式。正則化在損失函數中引入模型復雜度指標,利用給W加權值,弱化了訓練數據中的噪聲。
L2正則化
L2 正則化公式非常簡單,直接在原來的損失函數基礎上加上權重參數的平方和。假設待正則的網絡層參數為w,l2正則化形式為:
其中,Ein 是未包含正則化項的訓練樣本誤差,λ控制正則項大小,較大的λ取值將較大程度約束模型復雜度;反之亦然。實際使用時,一般將正則項加入目標函數(損失函數),通過整體目標函數的誤差反向傳播,從而達到正則項影響和指導網絡訓練的目的。
L2正則化在深度學習中有一個常用的叫法是“權重衰減”,另外L2正則化在機器學習中還被稱為“嶺回歸”或Tikhonov正則化。
L1正則化
L1 正則化公式也很簡單,直接在原來的損失函數基礎上加上權重參數的絕對值。假設待正則的網絡層參數為w,L1正則化為:
L1正則化除了同L2正則化一樣能約束參數量級外,L1正則化還可以使得參數更稀疏,使得優化后的參數的一部分為0,另一部分為非0實值。
Tensorflow實現
tf.contrib.layers.l1_regularizer() tf.contrib.layers.l2_regularizer()
Keras實現
from keras.regularizers import l2 model.add(Dense(units=200,input_dim=784,activation='tanh',kernel_regularizer=l2(0.01)))
Dropout隨機失活
隨機失活是目前幾乎所有配備全連接層的深度卷積神經網絡都在使用的網絡正則化方法。隨機失活在約束網絡復雜度的同時,還是一種針對深度模型的高效集成學習方法。
傳統神經網絡中,由於神經元件的互聯,對於某單個神經元來說,其反向傳導來的梯度信息同時也受到其他神經元的影響,可謂“牽一發而動全身”。這就是所謂的“復雜協同適應”效應。隨機失活的提出正是一定程度上緩解了神經元之間復雜的協同適應,降低了神經元間依賴,避免了網絡過擬合的發生。
原理非常簡單,對於某層的每個神經元,在訓練階段以概率P隨機將該神經元權重重置為0,測試階段所有神經元均呈激活狀態,但其權重需乘(1-p)以保證訓練和測試階段各種權重擁有相同的期望,輸入層和隱藏層都能應用dropout。
在Keras中示例
from keras.layers.core import Dropout model = Sequential([ Dense(output_dim=hidden1_num_units, input_dim=input_num_units, activation='relu'), Dropout(0.25), Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'), ])