【深度学习】随机失活 (dropout)

Introduction

随机失活,dropout,2012年于AlexNet中被提出。

Note :

  • 只针对 全连接层 进行操作;

  • 训练阶段 和 测试阶段 的操作 不同

  • 可解释为一种特殊的 模型融合 (集成学习) 方式;

  • 也可解释加入了 dropout正则化 (正则化的一种);

  • 还可以解释为 加噪声提高鲁棒性

训练阶段

按概率p 随机 将神经元 置 0 [如下(b)图],以 缓解 神经元之间 隐形的协同适应,从而达到降低模型复杂度的目的:
这里写图片描述

别看dropout之后的网络只是原网络的一个 子网络 ,复杂度不比原网络。但由于每个神经元的dropout是 随机dropout,因此每一轮都相当于在一个 新的 子网络上训练。那么最终得到的模型便是 无数个 子网络 共同训练 的成果,效果自然会更好。

然后麻烦也来了,训练阶段的每个神经元要事先添加一道概率流程:
这里写图片描述

对应的公式变化如下如下:

  • 没有dropout的神经网络:
    这里写图片描述

  • 有dropout的神经网络:
    这里写图片描述

Tensorflow 中的 dropout API 如下:

tf.nn.dropout

其中,根据 keep_prob参数项 随机进行 dropout 。

# coding=utf-8

import tensorflow as tf
import numpy as np

inputs = np.random.uniform(-10, 10, size=[3, 3])
features = tf.placeholder_with_default(input=inputs, shape=[3, 3])

# 随机失活
output_dropout = tf.nn.dropout(features, keep_prob=0.5)

with tf.Session() as sess:
    print ("\nfeatures :\n{}".format(sess.run(features)))
    print ("\n----------\n")
    print ("\ndropout :\n{}".format(sess.run(output_dropout)))
features :
[[ 0.53874537 -3.09047282 -2.88714205]
 [-1.92602402 -1.56025457  3.64309646]
 [-9.13147387  8.37367913 -7.9849204 ]]

----------

dropout :
[[  0.          -6.18094565  -5.77428411]
 [ -0.          -3.12050914   7.28619293]
 [-18.26294775  16.74735827  -0.        ]]

测试阶段

所有 神经元均呈 激活态,但其权重 需乘上 p p p 以保证各权重能有和 训练阶段 相同的 期望值
这里写图片描述


[1] 理解dropout

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值