Dropout直观理解和实现方法

概念

在这里插入图片描述

  • 一种正则化方法
  • 在训练过程中随机丢弃神经元节点和输入输出的连接
  • 对于大小固定的模型,最好的正则化手段是对所有可能的参数集合做平均预测,根据训练数据的后验概率对每个集合做weighting。

在这里插入图片描述


在这里插入图片描述

  • 对每层设置一个dropout probability
  • 对每个batch随机决定一个神经元是否被移除
  • Inverse dropout当dropout在预测时被关闭时,用设置好的probability scale activtions 以保持总体的度量一致。

具体实现

在这里插入图片描述

  • 定义 m i m^i mi矩阵,纬度和每层一致,神经元随机被移除的概率p服从伯努利分布,每次迭代 m i m^i mi会变化
  • 训练时,用隐层和m矩阵做点积运算再除以p。
  • 测试时关闭dropout
  • 除了输出层都可以被应用
  • 训练时的梯度是m/p和该隐藏梯度的哈达玛积

Code

keep_prob = 0.5 


def train_step(X):

	hidden_layer_1 =np.maximum(0, np.dot(W1, X) +b1)
	
	dropout_mask_1 =np.random.binomial(1, keep_prob, hidden_layer_1.shape) /keep_prob
	
	hidden_layer_1 *=dropout_mask_1
	
	hidden_layer_2 =np.maximum(0, np.dot(W2, hidden_layer_1) +b2)
	
	dropout_mask_2 =np.random.binomial(1, keep_prob, hidden_layer_2.shape) /keep_prob
	
	hidden_layer_2 *=dropout_mask_2
	
	out =np.dot(W3, hidden_layer_2) +b3

  

    # backward pass: compute gradients... (not shown)

    # perform parameter update... (not shown)

  

def predict(X):

    # ensembled forward pass

	hidden_layer_1 =np.maximum(0, np.dot(W1, X) +b1)
	
	hidden_layer_2 =np.maximum(0, np.dot(W2, hidden_layer_1) +b2)
	
	out =np.dot(W3, hidden_layer_2) +b3

why work?

在这里插入图片描述

  • 打破了神经元间的共同适应,从而找到更general的feature
  • 通过ensembling(averaging)多个networks,每个network relying on 不同的feature,从而得到更有效的模型(集成学习)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值