1. 程式人生 > 其它 >dropout正則化

dropout正則化

0 dropout

當訓練一個深度神經網路時,我們可以隨機丟棄一部分神經元及其對應的連邊來避免過擬合,這種方法稱為丟棄法(Dropout Method)。其示意圖如下:

實際上我們並不改變網路結構,而是以一定的概率將網路的隱藏層輸出值變成0。在對某個隱藏層進行dropout時,開闢一個新的矩陣mask,維度與隱藏層的維度相同,矩陣中的每個元素按照預設的概率p取值為0(小於p則取值為0,反之取值為1)。然後只需要將該矩陣與隱藏層做element-wise乘法即可。為了不改變dropout後的資料的期望,還需要將mask矩陣中取值為1對應的隱藏層原始資料除以(1 - p)。

\[x_{i}^{'}=\left\{\begin{matrix} 0\\ \frac{x_{i}}{1-p} \end{matrix}\right.\]

注意

:dropout通常用在全連線神經網路的隱藏層。

1 程式碼

def dropout_layer(sel, X, dropout_rate):
    if dropout_rate == 0:
        return X
    if dropout_rate == 1:
        return torch.zeros_like(X)
    mask = (np.random.randn(X.shape) > dropout_rate).float()

    return mask * X / (1.0 - dropout_rate)