卷积神经网络详解_python

注:看本文之前最好能构理解前馈圣经网络以及BP(后向传播)算法,可以看之前发的相关文章或者看知乎、简书、博客园等相关博客。

卷积神经网络(Convolutional Neural Networks,CNN)是一种前馈神经网络。卷积神经网络是受生物学上感受野(Receptive Field)的机制而提出的。感受野主要是指听觉系统、本体感觉系统和视觉系统中神经元的一些性质。比如在视觉神经系统中,一个神经元的感受野是指视网膜上的特定区域,只有这个区域内的刺激才能够激活该神经元[Hubel and Wiesel, 1968]。

卷积神经网络有三个结构上的特性:局部连接,权重共享以及空间或时间上的次采。这些特性使得卷积神经网络具有一定程度上的平移、缩放和扭曲不变性.


1、关于卷积的简要描述----具体的可以查看相关博文

卷积操作是分析数学中一种重要的运算。我们这里只考虑离散序列的情况。

1.1 一维场合

一维卷积经常用在信号处理中。给定一个输入信号序列xt, t = 1, · · · , n,和滤波器ft, t = 1, · · · ,m,一般情况下滤波器的长度m远小于信号序列长度n。

卷积的输出为:

卷积神经网络详解_python_02

当滤波器ft = 1/n 时,卷积相当于信号序列的移动平均。

卷积的结果按输出长度不同可以分为两类:一类是宽卷积,输出长 n+m−1,对于 不在[1, n] 范围之外的xt 用零补齐(zero-padding)。一类是窄卷积,输出长度n −m+ 1,不补零。在这里除了特别声明,我们一般说的卷积默认为窄卷积。

1.2 两维场合

一维卷积经常用在图像处理中。给定一个图像xij , 1 <= i <= M, 1 <= j  <=N,和滤波器fij , 1  <= i  <=m, 1 <= j <= n,一般m << M, n << N。

卷积的输出为:

卷积神经网络详解_python_03

在图像处理中,常用的均值滤波(mean filter)就是当前位置的像素值设为滤波器窗口中所有像素的平均值,也就是fuv = 1/mn.


2  卷积层:用卷积来代替全连接

卷积神经网络详解_python_04

图2.1 全连接层

卷积神经网络详解_python_05

图2.2 卷积层

在全连接前馈神经网络中,如果第l 层有nl 个神经元,第l − 1 层有n(l−1) 个神经元,连接边有n(l)×n(l−1) 个,也就是权重矩阵有n(l)×n(l−1) 个参数。当m和n都很大时,权重矩阵的参数非常多,训练的效率会非常低。

如果采用卷积来代替全连接,第l 层的每一个神经元都只和第l − 1 层的一个局部窗口内的神经元相连,构成一个局部连接网络。第l 层的第i 个神经元的输入定义为:

卷积神经网络详解_python_06

其中卷积神经网络详解_python_07为m维的滤波器,卷积神经网络详解_python_08
,这里卷积神经网络详解_python_09的下标从序号1开市。我们这里的卷积公式和原始的公式中a 的下标有所不同。

上述公式也可以写为:

卷积神经网络详解_python_10

其中卷积神经网络详解_python_11表示卷积运算。

从上面公式可以看出,w(l) 对于所有的神经元都是相同的。这也是卷积层的另外一个特性是权值共享。这样,在卷积层里,我们只需要m + 1 个参数。另外,第l + 1 层的神经元个数不是任意选择的,而是满足卷积神经网络详解_python_12

上面是一维的卷积层,下面我们来看下两维的情况。在图像处理中,图像是以二维矩阵的形式输入到神经网络中,因此我们需要二维卷积。假设卷积神经网络详解_python_13 为R(wl−1×hl−1) 分别是第l 层和第l − 1 层的神经元活性。X(l) 的每一个元素为:

卷积神经网络详解_python_14

其中卷积神经网络详解_python_15为两位的滤波器,B 为偏置矩阵。第l-1成的神经元个数为卷积神经网络详解_python_16卷积神经网络详解_python_17


也可以谢伟:

卷积神经网络详解_python_18

为了增强卷积层的表示能力,我们可以使用K 个不同的滤波器来得到K 组输出。每一组输出都共享一个滤波器。如果我们把滤波器看成一个特征提取器,每一组输出都可以看成是输入图像经过一个特征抽取后得到的特征。因此,在卷积神经网络中每一组输出也叫作一组特征映射(Feature Map)。

不失一般性,我们假设第l − 1 层的特征映射组数为nl−1,每组特征映射的大小为 ml−1 = wl−1 × hl−1。第l − 1 层的总神经元数:nl−1 × ml−1。第l 层的特征映射组数为 nl。如果假设第l 层的每一组特征映射X(l,k) 的输入为第l − 1 层的所有组特征映射。

卷积神经网络详解_python_19
图2.3: 两维卷积层的映射关系

第l 层的第k 组特征映射X(l,k) 为:

卷积神经网络详解_python_20

其中卷积神经网络详解_python_21表示第l-1层第P组特征向量到第l 层的第k 组特征映射所需的滤波器。

第l层的每一层特征映射都需要n(l-1)个滤波器以及一个偏执b。假设每个滤波器的大小为u × v,那么共需要nl × nl−1 × (u × v) + nl。

这样,我们在第l+1 层就得到nl 组特征映射,每一组特征映射的大小为ml = wl−1−u+1×hl−1 −v +1,总的神经元个数为nl × ml。图2.3给出了s上面公式的可视化映射关系。

连接表上面公式中,第l − 1 层的所有特征映射都经过滤波器得到一个第l 层的一组特征映射X(l,k)。也就是说,第l 层的每一组特征映射都依赖于第l 层的所有特征映射,相当于不同层的特征映射之间是全连接的关系。实际上,这种全连接关系不是必须的。我们可以让第l 层的每一组特征映射都依赖于前一层的少数几组特征映射。这样,我们定义一个连接表T 来描述不同层的特征映射之间的连接关系。如果第l 层的第k 组特征映射依赖于前一层的第p 组特征映射,则T(p,k) = 1,否则为0。

卷积神经网络详解_python_22
卷积神经网络详解_python_23

图2.4 两维卷积层

这样,假如连接表T 的非零个数为K,每个滤波器的大小为u × v,那么共需要K ×(u × v) + nl 参数。卷积层的作用是提取一个局部区域的特征,每一个滤波器相当于一个特征提取器。图2.4给出了两维卷积层示例。


3 子采样层

卷积层虽然可以显著减少连接的个数,但是每一个特征映射的神经元个数并没有显著减少。这样,如果后面接一个分类器,分类器的输入维数依然很高,很容易出现过拟合。为了解决这个问题,在卷积神经网络一般会在卷积层之后再加上一个池化(Pooling)操作,也就是子采样(Subsampling),构成一个子采样层。子采样层可以来大大降低特征的维数,避免过拟合。

对于卷积层得到的一个特征映射X(l),我们可以将X(l) 划分为很多区域Rk, k = 1, · · · ,K,这些区域可以重叠,也可以不重叠。一个子采样函数down(· · · ) 定义为:

卷积神经网络详解_python_24

其中卷积神经网络详解_python_25分别为可训练的权重和偏置参数。

卷积神经网络详解_python_26

其中 卷积神经网络详解_python_27为紫菜洋之后的特征映射。

子采样函数down(·) 一般是取区域内所有神经元的最大值(Maximum Pooling)或平均值(Average Pooling)。

卷积神经网络详解_python_28

卷积神经网络详解_python_29

图3.1 LeNet-5 网络结构。图片来源:[LeCun et al., 1998]

卷积神经网络详解_python_30


子采样的作用还在于可以使得下一层的神经元对一些小的形态改变保持不变性,并拥有更大的感受野。


4 梯度计算

在全连接前馈神经网络中,目标函数关于第l 层的神经元z(l) 的梯度为:

卷积神经网络详解_python_31

在卷积神经网络中,每一个卷积层后都接着一个子采样层,然后不断重复。因为我们需要分别来看下卷积层和子采样层的梯度。


4.1 卷集层的梯度

我们假定卷积层为l 层,子采样层为l + 1 层。因为子采样层是下采样操作,l + 1 层的一个神经元的误差项 对应于卷积层(上一层)的相应特征映射的一个区域。l 层的第k 个特征映射中的每个神经元都有一条边和l + 1 层的第k 个特征映射中的一个神经元相连。根据链式法则,第l 层的一个特征映射的误差项(l,k),只需要将l + 1 层对应特征映射的误差项d(l+1,k) 进行上采样操作(和第l 层的大小一样),再和l 层特征映射的激活值偏导数逐元素相乘,再乘上权重w(l+1,k)),就得到了(l,k)。第l 层的第k 个特征映射的误差项(l,k) 的具体推导过程如下:

卷积神经网络详解_python_32

其中Up为上采样函数。

在得到的第l层的第k个特征映射的误差项d(l,k), 目标函数关于第l 层的第k 个特征映蛇神经元滤波器卷积神经网络详解_python_33的梯度为:

卷积神经网络详解_python_34

上式也刚好是卷积形式,因此目标函数关于第l 层的第k 个特征映射神经元滤波器W(l,k,p) 的梯度可以写为:

卷积神经网络详解_python_35

目标函数关于第l 层的第k 个特征映射的偏置b(l) 的梯度可以写为:

卷积神经网络详解_python_36


4.2 子采样层梯度

我们假定子采样层为l 层,l +1 层为卷积层。因为子采样层是下采样操作,l +1 层的一个神经元的误差项 对应于卷积层(上一层)的相应特征映射的一个区域。

卷积神经网络详解_python_37

第l 层的第k 个特征映射的误差项(l,k) 的具体推导过程如下:

卷积神经网络详解_python_38

上式正好也是卷积形式,因此目标函数关于第l层的第k 个特征映射神经元滤波器卷积神经网络详解_python_39的梯度可以表述为:

卷积神经网络详解_python_40

目标函数关于第l层的第k 个特征映射的偏置b(l) 的梯度可以写为:

卷积神经网络详解_python_41


继续了解可以阅读博客:http://blog.csdn.net/zouxy09/article/details/9993371/

或者 http://www.36dsj.com/archives/24006

(本公众号已经开通留言功能,欢迎大家在交流区互动交流)

卷积神经网络详解_python_42
欢迎分享

转载请标明

(机器学习算法与Python学习)