卷积神经网络

定义

    卷积神经网络(CNN,Convolutional Neural Network),是一种主要用来处理具有类似网格结构的数据的神经网络。目前,被广泛应用在时间序列数据和图像数据中。“卷积神经网络”表明在这种神经网络中主要使用卷积操作(一种特殊的线性运算),但是,这里使用的卷积运算和数学领域的定义可能不太一样。接下来会详细介绍卷积神经网络里的几个核心概念:

  1. 卷积运算
  2. 稀疏交互
  3. 参数共享
  4. 池化

卷积运算

    在这里我们不去探讨卷积运算在数学领域的严格定义,我们主要介绍卷积在神经网络中的定义。

    在卷积神经网络的术语中,卷积的第一个参数(X)通常叫做输入,第二个参数(W)叫做核函数(kernel function),输出有时被叫做特征映射(feature map)。卷积运算主要是进行下图的操作:


    在实际应用中,每一种核函数就代表一种特征。因此,往往会利用有很多的核函数。如果我们使用32个核函数对于图像进行处理,就意味着可以用32中不同的特征来描述这张图像。

    从上面的例子中,我们可以发现如果输入的维度是m*n,核函数的维度是:l*l,那么我们得到的输出是(m-l+1)*(n-l+1)。因此,可以发现每次使用核函数,都会造成输入的维度降低。而且可以发现,在图像边缘的元素被采用的较少(左上角的元素只被使用到一次),也就意味着我们丢失了很多图像的边缘信息。为了解决这两个问题,可以使用padding操作。

padding

    就是在图像进行卷积操作之前,先沿着图像边缘四周进行填充0。padding主要有两种模式:

  1. Valid:没有填充
  2. Same:输入和输出的维度不变
stride

    步长:就是每次进行卷积操作,窗口滑动的长度。例如前面的例子中,步长默认为1。

    在介绍完padding和stride之后,可以得到图像在每次卷积之后的大小。例如输入的图像大小是n*n,过滤器的大小是f*f,padding是p,stride是s。通用公式如下:


稀疏交互

    卷积神经网络具有稀疏交互的特征。例如,在处理图像时,输入的图像可能包含成千上万个像素点,但是我们可以通过几十到上百个像素点来检测一些小的特征(图像的边缘)。这意味着我们需要存储的参数更少,减少了模型的存储需求,提高了它的统计效率;意味着为了得到输出我们只需要更少的计算量。稀疏交互的实现如图所示:


    在深度卷积神经网络中,处在网络深层的单元可能与绝大部分输入是间接交互的,这允许网络可以通过只描述稀疏交互的基石来高效的描述多个变量的复杂交互。


参数共享

    参数共享是指在一个模型的多个函数中使用相同的参数。在传统的神经网络中,权重矩阵的每一个元素只使用一次。对于参数共享,我们也可以说一个网络具有绑定的权重,因为用于一个输入的权重也会被绑定在另一个输入上。在卷积神经网络中,核的每一个元素都会应用在输入的每一个位置上。因此,参数共享保证我们只需要学习一个参数集合,而不是在每一个位置上都要学习一个单独的参数集合。这虽然没有改变前向传播的运行时间,但是它可以显著降低模型的参数存储需求。参数共享的实现如下所示:


    参数共享的特殊形式使得神经网络层具有对平移等变的性质。如果一个函数满足输入改变,输出也以同样的方式改变这一性质,我们就说它是等边的。如果f(x)与g(x)满足f(g(x))=g(f(x)),我们就说f(x)对于变换g具有等变性。对于卷积来说,如果令g是输入的任意平移函数,那么卷积函数对于g具有等变性。当处理时间序列数据时,通过卷积可以得到一个由输入中出现不同特征的时刻所组成的时间轴。如果把一个时间往后延时,在输出中仍然有相同的表示。同样在处理图像时,在卷积的第一层进行边缘检测是很有用的,相同的边缘或多或少的散落在图像各处,所以应该对于整个图像进行参数共享。  

池化

    在使用传统的神经网络处理图像时,我们把每一个像素都连接到隐藏单元上。那么对于一张1000x1000像素的图片,如果我们有1M隐藏层单元,就会产生10^12个参数,这是我们不想看到的。因此,可以使用池化操作,用于压缩数据和较少参数数量。

    池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置上的输出。例如使用最大池化函数给出相邻矩形区域内的最大值。当然还有其他的池化函数,例如相邻区域内的平均值,2范数以及基于数据中心像素距离的加权平均函数。

    不管使用哪种函数,当输入进行少量的平移时,池化可以帮助输入的表示保持近似不变。这种平移不变形是指当我们对输入进行少量平移时,大多数输出并不会发生变化。这种性质主要用在:我们关心图像中的某个特征是否出现(例如,人脸图像中是否有眼睛),而不关心它在哪个位置。如下图所示:


    因为池化综合了全部邻居的反馈,因此可能使得池化单元少于探测单元,可以通过综合池化区域的k个像素的统计特征而不是单个像素来实现。这种方法可以提高网络的计算效率,因为在下一层中较少k倍的输入;也可以提高统计效率并且较少对于参数存储的需求。

    另外,池化还可以处理不同大小的输入。当我们想对不同大小的图片进行分类时,分类层的输入必须是固定大小,这通常可以通过调整池化区域的偏置大小来实现,这样分类层总是能接受到相同数量的统计特征而不管最初输入的大小。

    池化操作主要有以下三个作用:

  1. 特征不变:进行池化之后能够压缩去掉一些无关紧要的信息,保留最主要的特征。
  2. 特征降维:图像中往往包含大量的信息,有很多的特征,往往有些信息对于我们的任务并没有帮助或者有重复。我们需要把这种信息去除,而池化是使用紧邻的k个元素的特征,因此池化可以达到降维的作用。
  3. 可以在一定程度上避免过拟合。

参考文献

  1. 《Deep Learning》 Ian Goodfellow,Yoshua Bengio,Aaron Courville


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值