深度学习_正则化_抑制过拟合

过拟合 是指只能拟合训练数据,但不能很好的拟合不包括训练数据在内的数据。用正则化来抑制过拟合,正则化有两种方法:权值衰减Dropout

(1)发生过拟合的原因:
——权重参数取值过大
——模型拥有大量的参数,表现力强
——训练数据少

(2)权值衰减
在这里插入图片描述
将上式加入到损失函数中,λ是控制正则化强度的超参数,λ越大对大的权重施加的惩罚就越重。

(3)Dropout
当网络模型变得复杂,用权值衰减就很难对付,这时可以使用Dropout方法。Dropout方法是一种在学习过程中随机删除神经元的方法,训练时每传递一次数据就会随机选择要删除的神经元,然后测试时会传递所有的神经元信号,但是对于各神经元的输出,要乘上训练时的删除比例后再输出。
深度学习_正则化_抑制过拟合_第1张图片

class Dropout:
    """
    http://arxiv.org/abs/1207.0580
    """
    def __init__(self, dropout_ratio=0.5):
        self.dropout_ratio = dropout_ratio
        self.mask = None

    def forward(self, x, train_flg=True):
        if train_flg:
            self.mask = np.random.rand(*x.shape) > self.dropout_ratio   
            # np.random.rand(*x.shape)随机生成和x一样的数组,数值在0-1之间;
            # 把数组的每一个值与self.dropout_ratio相比,大于的地方为True,小于的地方为False
            return x * self.mask
            # 保留了数组x,Ture位置上的数没变,False位置上的数变为0
        else:
            return x * (1.0 - self.dropout_ratio)

    def backward(self, dout):
        return dout * self.mask

你可能感兴趣的:(深度学习,深度学习,正则化,抑制过拟合)