dropout及其他减少过拟合的方法(吴恩达视频笔记)

应用场景:网络存在过拟合,也即产生了高的方差。
dropout会遍历每一层网络,并设置消除神经网络中节点的概率,比如这里3个隐藏层都设置了0.5的保留概率
在这里插入图片描述
假如我们每一层都随机丢弃了以下神经元,然后删掉从该节点进出的连线,
在这里插入图片描述
最后得到一个节点更少,规模更小的网络。
在这里插入图片描述
对于每个训练样本,我们都将采用一个精简后的神经网络来训练它。
inverted dropout反向随机失活
我们用一个3层网络来展示如何实现反向dropout。
首先,我们需要设置一个向量d3,它表示一个3层的dropout向量,

d3 = np.random.rand(a3.shape[0], a3.shape[1])< keep_prob

keep_prob是一个具体数字,上个例子中它是0.5,本例中我们设置为0.8,它表示保留某个隐藏单元的概率,意味着消除任意一个隐藏单元的概率是0.2,它的作用就是生成随机矩阵,d3就是一个矩阵,对应值为1的概率都是0.8,对应值为0的概率是0.2.接下来要做的就是从第3层中获取激活函数,

a3 = np.multiply(a3, d3)

它的作用就是过滤d3中所有等于0的元素,乘法运算最终把d3中相应元素归零,如果用python实现,d3是一个布尔型数组,值为true、false,乘法运算依然有效,python会把rue、false翻译为1、0.
最后,我们向外拓展a3,用它除以keep_prob参数。

a3 /= keep_prob

为什么要这样做呢?
假设第3个隐藏层有50个神经元,最后被归零的单元平均有10个,那么z[4] =w[4] * a[3] +b[4],我们的预期是a[3]减少20%,为了不影响z[4]的期望值,我们需要用w[4] * a[3]除以0.8,它将会修正或弥补我们所需的那20%,a[3]期望值不变。
它的功能就是不论keep_prob的值是多少,确保a[3]的期望值不变。

如何在测试阶段运用dropout呢?
在测试阶段,我们给出了x,我们在测试阶段不使用dropout,因为我们不希望输出结果是随机的,如果测试阶段应用dropout函数,预测会收到干扰。

为什么dropout可以实现避免过拟合
因为在用到dropout时,我们不敢给任何一个神经元过大的权重,因为任意一个神经元都有可能被随机清除,我们不愿意把所有赌注放在一个节点上,因此每个神经元都有一点权重,那么dropout将和L2正则化类似,产生收缩权重的平方的效果,因此正式的成为一种正则化的替代形式。
注意:
1、应用dropout时我们需要选择keep_prob的参数,它代表每一层上保留单元的概率,所以不同层的keep_prob也可以变化,如果权重矩阵过大,那么keep_prob也要相应变小一点,否则,可以让它变成0.9或是1.技术上讲,我们也可以对输入特征设置dropout,但是一般不这样做;
2、在计算机视觉中,输入了太多像素,因此dropout在计算机视觉中应用得比较频繁。但是需要注意,dropout是一种预防过拟合的方法,因此,除非算法过拟合,否则不建议用dropout;
3、dropout的一大缺点是代价函数J不再明确定义,因为不太清楚哪些节点被删除。因此,可以在最开始令keep_prob=1,运行代码,确保代价函数随着迭代次数增加而保持单调递减,然后,可以再打开keep_prob。

其他减少过拟合的方法
1、数据增强
水平翻转、随机裁剪
2、提前终止
运行梯度下降时,我们可以绘制训练误差和验证集的代价函数随迭代次数的图像,你会发现,验证集误差通常会先呈下降趋势,然后从某个节点开始上升。提前终止的作用是,当你还未在神经网络上运行太多迭代过程的时候,参数w接近于0,因为随机初始化w值时,它的值可能都是较小的随机值,在迭代过程和训练过程中,w的值会变得越来越大,提前终止就是得到一个中等大小的W矩阵,与L2正则化相似,选择参数w范数较小的神经网络。
在这里插入图片描述
但是它有一个缺点,机器学习过程包括:选择一个算法优化代价函数J,例如SGD等,但是优化J之后,我们也不想发生过拟合,比如利用正则化等,在这个过程中,超参数的数量越来越多,选出可行的算法也变得越来越复杂。优化和避免过拟合无法同时进行,提前终止虽然避免了过拟合,但是同样的也停止了优化代价函数J。
L2正则化的时候会尝试找很多个λ的值,增加了运行时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值