深度学习基础:dropout解决过拟合现象

dropout有很多种方式。该文章主要总结倒置丢弃法

一、dropout概述

dropout是指:将hidden layer中的某些隐藏单元以一定的概率进行丢弃。
在这里插入图片描述

被丢弃的神经元,在反向传播时,与这些神经元相关的权重梯度均为0。由于在训练中隐藏层神经元的丢弃是随机的,即 h 1 , . . . , h 5 h_1 ,...,h_5 h1,...,h5 都有可能被清零。这样输出层的计算都⽆法过度依赖 h 1 , . . . , h 5 h_1 ,...,h_5 h1,...,h5中的任⼀个,从而在训练模型时起到正则化的作⽤,并可以⽤来应对过拟合。在测试模型时,我们为了拿到更加确定性的结果,⼀般不使⽤丢弃法

具体做法:
设丢弃概率为 p p p,那么有 p p p的概率 h i h_i hi会被清0,有 1 − p 1-p 1p的概率 h 2 h_2 h2会除以 1 − p 1-p 1p做拉伸。丢弃概率是dropout的超参数。使用dropout时,计算新的隐藏单元 h i ′ h'_i hi
h i ′ = ξ i 1 − p h i h'_i=\frac {\xi_i}{1-p}h_i hi=1pξihi

其中随机变量 ξ i \xi_i ξi为0和1的概率分别为 p p p 1 − p 1-p 1p

二、实现dropout函数

import d2lzh as d2l
from mxnet import autograd, gluon, init, nd
from mxnet.gluon import data as gdata, loss as gloss, nn

def dropout(X, drop_prob):
    assert 0 <= drop_prob <= 1
    keep_prob = 1 - drop_prob
    # 这种情况下把全部元素都丢弃
    if keep_prob == 0:
        return X.zeros_like()
    mask = nd.random.uniform(0, 1, X.shape) < keep_prob
    return mask * X / keep_prob
  • 其中nd.random.uniform(0, 1, X.shape)函数的作用是:生成和 X X X形状一样的数据结构,其中的元素均在 [ 0 , 1 ] [0, 1] [0,1]之间
  • mask的形状和X一样,其中的每个元素实际上表示了每个元素被保留的概率。如果比给定的keep_prob还小,说明小概率事件发生了,就保留下来
  • python中,形状相同 X 、 Y X、Y XY矩阵相乘,所得结果矩阵的形状也为 X . s h a p e X.shape X.shape,而其中每个元素= X i ∗ Y i X_i*Y_i XiYi

在使用mxnet框架时,可以通过在nn.Sequential()生成的容器中addnn.Dropout(prob)来实现,其中prob表示丢弃的概率,是超参数。如下:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值