dropout正则化

Posted on 2021-08-01 20:31  foghorn  阅读(173)  评论(0编辑  收藏  举报

0 dropout

当训练一个深度神经网络时,我们可以随机丢弃一部分神经元及其对应的连边来避免过拟合,这种方法称为丢弃法(Dropout Method)。其示意图如下:

dropout示意图

实际上我们并不改变网络结构,而是以一定的概率将网络的隐藏层输出值变成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)

Copyright © 2024 foghorn
Powered by .NET 9.0 on Kubernetes