(CNN)卷积神经网络(四)dropout

第一篇文章介绍了卷积神经网络的数据输入形式和权值的初始化:CNN)卷积神经网络(一) 第二篇文章介绍了卷积操作,常用的激活函数(CNN)卷积神经网络(二)
第三篇介绍了卷积神经网络的池化层,可视化理解以及用数学的角度理解卷积操作:(CNN)卷积神经网络(三)
这里写图片描述

dropout

第一种理解方式
大家应该都有了解过集成学习吧,不了解也没关系,在我看来,集成学习最牛逼的想法就是利用自主采样的方式采集不同的样本子集,然后每个样本子集都训练一个模型,因为数据不一样,所以每个模型的侧重点不一样,也就导致了模型之间具有比较大差异性。

我们用同样的想法在神经网络中,就有了dropout这个操作,有人称呼它为随机失活,如下图所示:
(CNN)卷积神经网络(四)dropout_第1张图片

然后,相当于多个不同的模型合起来得到最终的模型,能很好的缓解过拟合的出现
(CNN)卷积神经网络(四)dropout_第2张图片

为什么dropout能达到比较好的效果?

第二种理解方式:
无论是神经网络还是机器学习,我们都希望自己的模型有一定的泛化能力,因为神经网络记数据真的是太擅长了,但我们并不希望它记住那么多东西,比如一只猫,它有毛,有耳朵,这些信息,因为这样的信心,老虎,狗都有,我们更希望网络能记住表征猫这种动物特性的信息。所以,肯定会有一部分信息是冗余的,我们希望神经网络不要记住这些冗余的信息,它是怎么做到的呢?

就是dropout,在调整神经网络的过程中,在某一些节点处出现了这些冗余信息,在某些节点处没有这些冗余信息,那神经网络就会知道哪部分信息对分类是有用的,哪些信息是冗余的,dropout让某些神经元失活,让某些神经元被激活,不就刚好完成了这个操作吗?
(CNN)卷积神经网络(四)dropout_第3张图片
举个小栗子吧,假如有两个特征,有一只耳朵,有尾巴,假如这两个特征同时出现的时候,能判定它是一只猫,当只有有尾巴这个特征的时候,也能判定它是一只猫,但只有有一只耳朵这个特征的时候,就不能判定它是一只猫,那神经网络就知道有一只耳朵这个特征在分类是否是猫这个问题时,是个冗余信息,那分类的时候就不用它了嘛。

dropout会让每一层都的神经元都以一定的概率失活,用代码理解一下:

#设定保持一个神经元激活状态的概率
p = 0.5

def train_step(x):
    #三层神经网络前向运算
    H1 = np.maximum(0,np.dot(W1,X)+b1)
    U1 = np.random.rand(*H1.shape) 

#第一次Dropout H1 *= U1 #drop H2 = np.maximum(0,np.dot(W2,H1)+b2) U2 = np.random.rand(*H2.shape) < p #第二次Dropout H2 *= U2 #drop out = np.dot(W3,H2) + b3 def predict(X): H1 = np.maximum(0,np.dot(W1,X) + b1)*p #这里也要以这样的概率打开,相当于数学期望 H2 = np.maximum(0,np.dot(W2,H1) + b2)*p out = np.dot(W3,H2) + b3

一点小提醒:
b = 0.8
a = 0.8<0.5 #python中True为1,False为0
b *=a
print(b)

得到0.0

但是,仔细观察你会发现,在预测的时候,乘上这样一个概率会比较慢,我们不管你训练得有多慢,但最后预测的时候一定是要求一定要快的,所以我们把这个概率移动训练阶段:

#设定保持一个神经元激活状态的概率
p = 0.5

def train_step(x):
    #三层神经网络前向运算
    H1 = np.maximum(0,np.dot(W1,X)+b1)
    U1 = (np.random.rand(*H1.shape) #第一次Dropout,同时除以p
    H1 *= U1 #drop
    H2 = np.maximum(0,np.dot(W2,H1)+b2)
    U2 = (np.random.rand(*H2.shape) < p)/p #第二次Dropout,同时除以p
    H2 *= U2 #drop
    out = np.dot(W3,H2) + b3
    #省略一长串
def predict(X):
    H1 = np.maximum(0,np.dot(W1,X) + b1)  #这里也要以这样的概率打开
    H2 = np.maximum(0,np.dot(W2,H1) + b2)
    out = np.dot(W3,H2) + b3

深度学习的本质是什么?

在图片处理中,因为图片具有不变性,因此可以使用滑动窗口,也就是卷积,在图片上滑动收集图片的信息,也正因为用了卷积操作,才降低的 运算量(减少参数)。

你可能感兴趣的:(计算机视觉/深度学习)