Dropout直观理解和实现方法

概念

Dropout直观理解和实现方法_第1张图片

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

Dropout直观理解和实现方法_第2张图片


Dropout直观理解和实现方法_第3张图片

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

具体实现

Dropout直观理解和实现方法_第4张图片

  • 定义 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?

Dropout直观理解和实现方法_第5张图片

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

你可能感兴趣的:(DL,机器学习,深度学习,神经网络)