正則化及dropout
阿新 • • 發佈:2019-01-22
綜合Stanford university cs231n 課堂、及google 機器學習簡介課程,進行了小小的記錄~
正則化 regularization
有助於防止出現過擬合
分為:
- L1 正則化
- L2 正則化
- 丟棄正則化
- 早停法(這不是正式的正則化方法,但可以有效限制過擬合)
dropout 丟棄
在每一次前向傳遞時,每一層都是計算上一個啟用函式的結果乘以權重矩陣,得到下一個啟用函式前的結果。然後將這一層算出來的的神經元的數值,隨機的選取一部分進行置零。
通常,將正則化率設為0.5
一般是在全連線層使用。有時也用在卷積層,不過,不是隨機把某個神經元上啟用函式的結果置零,而是隨機把整個特徵對映置為零。在卷積神經網路裡,有一個維度表示通道,可將某幾個通道整體置零,而不是某幾個元素。
dropout 能夠使模型的魯棒性更好
會使訓練的時間增長
p = 0.5 #probability of keeping a unit active. higher = less dropout def train_step(X): """ X contains the data """ # forward pass for example 3-layer neural network H1 = np.maximum(0, np.dot(W1, X) + b1) U1 = np.random.rand(*H1.shape) < p # first dropout mask H1 *= U1 # drop H2 = np.maximum(0, np.dot(W2, H1) + b2) U2 = np.random.rand(*H2.shape) < p # second dropout mask H2 *= U2 #drop out = np.dot(W3, H2) + b3 # backward pass: compute gradients... # perform parameter update... def predict(X): # ensembled forward pass H1 = np.maximum(0, np.dot(W1, X) + b1) * p # scale the activations H2 = np.maximum(0, np.dot(W2, H1) + b2) * p # scale the activations out = np.dot(W3, H2) + b3
通常,在training 訓練階段,給網路新增一些隨機性,以防止過擬合
而在testing 測試階段,不設定隨機,直接將輸出乘以dropout的概率p. 以提高泛化能力