zoukankan      html  css  js  c++  java
  • 9、改善深层神经网络之正则化、Dropout正则化

    首先我们理解一下,什么叫做正则化?

      目的角度:防止过拟合

      简单来说,正则化是一种为了减小测试误差的行为(有时候会增加训练误差)。我们在构造机器学习模型时,最终目的是让模型在面对新数据的时候,可以有很好的表现。当你用比较复杂的模型比如神经网络,去拟合数据时,很容易出现过拟合现象(训练集表现很好,测试集表现较差),这会导致模型的泛化能力下降,这时候,我们就需要使用正则化,降低模型的复杂度。

    一、神经网路得L1、L2正则化

    1、矩阵的F-1范数、F-2范数

    说明:这里的F-范数指的是Frobenius范数,和logistics回归的L1、L2正则化的向量范数不一样。

    矩阵的F-1范数:矩阵所有元素的绝对值之和。公式为:

    矩阵的F-2范数:矩阵所有元素的平方求和后开根号。公式为:

     

    2、L1正则化与L2正则化(主要使用L2)

     假设神经网络的损失函数为J(W,b),参考逻辑回归的正则化,是在损失函数J(W,b)后面加一个正则化项,神经网络DNN也是一样的,只是变成了加F-范数,L1正则化与L2正则化如下所示:

    这里m为样本数,l为各个隐藏层,λλ为超参数,需要自己调试,L2中2m是为了后面求梯度的时候可以抵消掉常数2。

    3、L1正则化与L2正则化的区别

      L1 正则化项的效果是让权值 W 往 0 靠,使网络中的权值尽可能为 0,也就相当于减小了网络复杂度,防止过拟合。事实上,L1 正则化能产生稀疏性,导致 W 中许多项变成零。

      L2 正则化项的效果是减小权值 W。事实上,更小的权值 W,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好。

    二、Dropout正则化(随机失活)

      Dropout提供了正则化一大类模型的方法,计算方便且功能强大。它不同于L1、L2正则项那样改变损失函数。而是改变模型本身。Dropout可以被认为是集成大量深层神经网络的使用Bagging的方法。Dropout提供一种廉价的Bagging集成近似,能够训练和评估指数级数量的神经网络。

      假设训练的网络:

       对于使用dropout技术的话,我们随机删除隐层的神经元,形成新的网络:

       然后,我们通过前向求损失,反向传到损失,批量梯度下降完成一批,更新完w和b,然后继续随机删除隐藏层的神经元,继续批量梯度下降更新权值和偏置。

    反向随机失活(inverted dropout):

      反向随机失活(inverted dropout),是在训练时就进行数值范围调整,从而让前向传播在测试时保持不变。这样做还有一个好处,无论你决定是否使用随机失活,预测方法的代码可以保持不变。

      反向随机失活的代码如下:

    """
    反向随机失活推荐实现方式
    在训练时drop和调整数值范围,测试时不做任何事
    """
    
    p = 0.5 #激活神经元得概率,P值更高=随机失活更弱
    
    def train_step(x):
        #三层neural network的向前传播
        H1 = np.maximum(0,np.dot(w1,X) + b1)
        U1 = (np.random.rand(*H1.shape) < p) / p #第一个随机失活遮罩。注意P!!!
        H1 *=U1 #drop!
        H2 = np.maximum(0,np.dot(w2,H1) + b2)
        U2 = (np.random.rand(*H2.shape) < p) / p #第一个随机失活遮罩。注意P!!!
        H2 *=U2 #drop!
        out = np.dot(w3,H2)+b3
        
        #反向传播:计算梯度。。。(略)
        #进行参数更新。。。(略)
    
    def predict(X):
        # 向前传播时模型集成
        H1 = np.maximum(0,np.dot(w1,X) + b1) #不用进行数值范围调整
        H2 = np.maximum(0,np.dot(w2,H1) + b2)
        out = np.dot(w3,H2) + b3
  • 相关阅读:
    CodeForces 288A Polo the Penguin and Strings (水题)
    CodeForces 289B Polo the Penguin and Matrix (数学,中位数)
    CodeForces 289A Polo the Penguin and Segments (水题)
    CodeForces 540C Ice Cave (BFS)
    网站后台模板
    雅图CAD
    mbps
    WCF学习-协议绑定
    数据库建表经验总结
    资源位置
  • 原文地址:https://www.cnblogs.com/hzzhbest/p/15166298.html
Copyright © 2011-2022 走看看