1-6 dropout 正则化

dropout 正则化( Dropout Regularization

除了L2正则化,还有一个非常实用的正则化方法——Dropout( 随机失活):

假设你在训练上图这样的神经网络,它存在过拟合,这就是 dropout 所要处理的,我们复制这个神经网络, dropout 会遍历网络的每一层,并设置消除神经网络中节点的概率。假设网络中的每一层,每个节点都以抛硬币的方式设置概率,每个节点得以保留和消除的概率都是 0.5,设置完节点概率,我们会消除一些节点,然后删除掉从该节点进出的连线,最后得到一个节点更少,规模更小的网络,然后用 backprop 方法进行训练。

以上就是网络精简的一个样本,对于每个训练样本,我们都将采用一个精简后神经网络来训练它,这种方法似乎有点怪,单纯遍历节点,编码也是随机的,可它真的有效。
实施dropout的方法有几种,最常用的是inverted dropout(反向随机失活),例如在一个3层网络中:首先要定义向量d,${d^{[3]}}$表示一个三层的 dropout 向量:

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

然后看它是否小于某数,我们称之为 keep-probkeep-prob 是一个具体数字 ,它表示保留某个隐藏单元的概率 ,例如 keep-prob 等于 0.8,它意味着消除任意一个隐藏单元的概率是 0.2,它的作用就是生成随机矩阵 。 
${d^{[3]}}$中的对应值为 1 的概率都是 0.8,对应为 0 的概率是 0.2,随机数字小于 0.8
接下来要做的就是从第三层中获取激活函数,这里我们叫它 ${a^{[3]}}$:

 a3 =np.multiply(a3,d3)

这里是元素相乘,也可写为 : 

a3 *= d3

乘法运算最终把 ${d^{[3]}}$中相应元素输出 ,即让 ${d^{[3]}}$0 元素与 ${a^{[3]}}$中相对元素归零。

如果用 python 实现该算法的话,${d^{[3]}}$ ,则是一个布尔型数组,值为 true false,而不是1 0,乘法运算依然有效, python 会把 true false 翻译为 1 0 。
最后,我们向外扩展 ${a^{[3]}}$,用它除以 keep-prob 参数。

a3 /= keep-prob

keep-prob 参数:

不论 keep-prop 的值是多少 0.8, 0.9 甚至是 1,如果 keep-prop 设置为 1,那么就不存在 dropout,因为它会保留所有节点。 反向随机失活( inverted dropout)方法通过除以 keep-prob,确保 ${a^{[3]}}$的期望值不变。 在测试阶段,我们并未使用 dropout,自然也就不用抛硬币来决定失活概率,以及要消除哪些隐藏单元了,因为在测试阶段进行预测时,我们不期望输出结果是随机的,如果测试阶段应用 dropout 函数,预测会受到干扰。 

转载于:https://www.cnblogs.com/xiaojianliu/articles/9575905.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值