您的位置:首页 > 运维架构

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

2018-02-02 15:49 253 查看

Introduction

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

Note :

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

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

训练阶段

按概率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.        ]]


测试阶段

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



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

[2] 理解dropout
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: