正则化及dropout

综合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. 以提高泛化能力


阅读更多
个人分类: 机器学习
上一篇神经网络的激活函数
下一篇C++的数据抽象、数据封装
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭