前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习: 随机失活 (dropout)

深度学习: 随机失活 (dropout)

作者头像
JNingWei
发布2018-09-27 15:18:52
1.6K0
发布2018-09-27 15:18:52
举报
文章被收录于专栏:JNing的专栏

Introduction

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

Note :

  • 只针对 全连接层 进行操作;
  • 训练阶段 和 测试阶段 的操作 不同
  • 可解释为一种特殊的 模型融合 (集成学习) 方式;
  • 也可解释加入了 dropout正则化 (正则化的一种);
  • 还可以解释为 加噪声提高鲁棒性

训练阶段

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

这里写图片描述
这里写图片描述

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

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

这里写图片描述
这里写图片描述

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

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

Tensorflow 中的 dropout API 如下:

tf.nn.dropout

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

代码语言:javascript
复制
# 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)))
代码语言:javascript
复制
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.        ]]

测试阶段

所有 神经元均呈 激活态,但其权重 需乘上 ppp 以保证各权重能有和 训练阶段 相同的 期望值

这里写图片描述
这里写图片描述

[1] 解析卷积神经网络—深度学习实践手册 [2] 理解dropout

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年02月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Introduction
  • 训练阶段
  • 测试阶段
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档