CNN学习笔记

1. **函数

用来限制神经元输出振幅。由于通过**函数将输出信号压制(限制)到允许范围之内的一定值,故而**函数也被称之为压制函数。

为什么引入非线性激励函数?

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。所以,我们引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。

CNN当中主要用到的三种常见**函数有1sigmoids形的) function 2tanh(双曲正切) function 3ReLU function整流线性单元在卷积神经网络当中最常见)

(1) 为何**函数使用sigmoid函数:

从数学意义来看,非线性的Sigmoid函数对*区的信号增益较大,对两侧区的信号增益小,在信号的特征空间映射上,有很好的效果。

从神经科学上来看,*区酷似神经元的兴奋态,两侧区酷似神经元的抑制态,因而在神经网络学习方面,可以将重点特征推向*区,将非重点特征推向两侧区。

 

(2) tanh函数,双曲正切函数

 

sigmoid 不同的是,tanh 0均值的。因此,实际应用中,tanh 会比 sigmoid 更好。

 

(3) ReLU函数(Rectified Linear Units)(整流线性单元)

 

很显然,从图左可以看出,输入信号<0时,输出都是0>0 的情况下,输出等于输入。w 是二维的情况下,使用ReLU之后的效果如下:

 

ReLU 的优点:

  使用 ReLU 得到的SGD(随机梯度下降)的收敛速度会sigmoid/tanh 快很多。相比于sigmoid/tanhReLU 只需要一个阈值就可以得到**值,而不用去算一大堆复杂的运算。

为什么引入Relu呢?

第一,采用sigmoid等函数,算**函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu**函数,整个过程的计算量节省很多。

第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失,从而无法完成深层网络的训练。

第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

ReLU 的缺点:

当在神经网络中学习速率很大的时候,很有可能网络中大部分神经元都会变成0

当然,如果设置一个合适而且较小的学习速率的话,此类问题发生的情况也不会太频繁。同时,为了解决这个问题,后面出现了各种ReLU的变种:Leaky-ReLUP-ReLUR-ReLU

 

2. 偏置 bk的作用

是根据其为正或为负,相应地增加或降低**函数的网络输入。

3. 什么是卷积

把它理解成一个滑动的窗口函数,就像是一个矩阵一样。(图片的模糊、锐化、边缘检测都可以用不同的卷积实现)

 

4. 什么是卷积神经网络

卷积神经网络(Convolutional Neural Networks, CNN)是多层感知机(MLP)的变种。简单说来,CNN就是用好几层使用非线性**函数(如,ReLutanh)的卷积得到答案的神经网络。

在训练阶段中,CNN能够通过训练集自动改善过滤器中的参数值。

(举个例子,在图像分类问题中,CNN能够在第一层时,用原始像素中识别出边界,然后在第二层用边缘去检测简单的形状,然后再用这些形状来识别高级的图像。)

5. CNN三大核心思想

卷积神经网络CNN的出现是为了解决MLP多层感知器全连接和梯度发散的问题。其引入三个核心思想:1.局部感知(local field)2.权值共享(Shared Weights)3.下采样(subsampling)。极大地提升了计算速度,减少了连接数量。

(1) 局部感知(即局部连接)

在卷积神经网络中,每个隐层节点只连接到图像某个足够小局部的像素点上,从而大大减少需要训练的权值参数。CNN中,图像局部感知区域被当做层次结构中的底层的输入数据,信息通过前向传播经过网络中的各个层,在每一层中都由过滤器构成,以便能够获得观测数据的一些显著特征。因为局部感知区域能够获得一些基础的特征,比如图像中的边界和角落等,这种方法能够提供一定程度对位移、拉伸和旋转的相对不变性。

如下图所示,左边是每个像素的全连接,右边是每行隔两个像素作为局部连接,因此在数量上,少了很多权值参数数量。因此 局部感知就是:
    通过卷积操作,把全连接变成局部连接 ,因为多层网络能够抽取高阶统计特性, 即使网络为局部连接,由于额外的突触连接和额外的神经交互作用,也可以使网络在不十分严格的意义下获得一个全局关系。

 

下面我们来详细看一下到底局部感知如何使 全连接变成局部连接,按照人工神经网络的方法,把输入图像的像素一字排开之后,每一个像素值就是一个神经元输入,需要对隐层或者输出层做全连接,如上图左侧所示。卷积神经网络引入卷积概念后,卷积核通过原图像,然后卷积核对原图像上符合卷积核大小的像素进行加权求和,每一次只是对符合卷积核的图像像素做卷积,这就是局部感知的概念,使 全连接变成局部连接。

 

(2) 权值共享

不同的图像或者同一张图像共用一个卷积核,减少重复的卷积核。同一张图像当中可能会出现相同的特征,共享卷积核能够进一步减少权值参数,降低了网络模型的复杂度,使得网络易于优化。降低了过拟合的风险。

举个例子,在局部连接中隐藏层的每一个神经元连接的是一个 1010 的局部图像,因此有 1010 个权值参数,将这 1010 个权值参数共享给剩下的神经元,也就是说隐藏层中 106 个神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 1010 个权值参数(也就是卷积核(也称滤波器)的大小。

但是,这样仅提取了图像的一种特征,如果要多提取出一些特征,需要增加多个卷积核,不同的卷积核能够得到图像的不同映射下的特征,称之为 Feature Map。如果有100个卷积核,最终的权值参数也仅为 100100=104 个而已。另外,偏置参数b也是共享的,同一种滤波器共享一个。

(3) 池化(即下采样)

在卷积神经网络中,没有必要一定就要对原图像做处理,而是可以使用某种“压缩”方法,这就是池化,也就是每次将原图像卷积后,都通过一个下采样的过程,来减小图像的规模。目的是减小特征图。

 

pooling的好处有什么?

Ø  这些统计特征能够有更低的维度,减少计算量。

Ø  不容易过拟合,当参数过多的时候很容易造成过度拟合。

Ø  缩小图像的规模,提升计算速度。

 

池化规模一般为2×2。常用的池化方法有:

最大池化(Max Pooling)。取4个点的最大值。这是最常用的池化方法。

最大池采样在计算机视觉中的价值体现在两个方面:(1)、它减小了来自上层隐藏层的计算复杂度;(2)、这些池化单元具有平移不变性,即使图像有小的位移,提取到的特征依然会保持不变。由于增强了对位移的鲁棒性,最大池采样方法是一个高效的降低数据维度的采样方法。

均值池化(Mean Pooling)。取4个点的均值。

可训练池化。训练函数 f ,接受4个点为输入,出入1个点。

 

由于特征图的变长不一定是2的倍数,所以在边缘处理上也有两种方案:

保留边缘。将特征图的变长用0填充为2的倍数,然后再池化。

n 忽略边缘。将多出来的边缘直接省去。

6. 卷积神经网络结构

卷积神经网络整体架构:卷积神经网络是一种多层的监督学习神经网络,隐含层的卷积层和池采样层是实现卷积神经网络特征提取功能的核心模块该网络模型通过采用梯度下降法最小化损失函数对网络中的权重参数逐层反向调节,通过频繁的迭代训练提高网络的精度。卷积神经网络的低隐层是由卷积层和最大池采样层交替组成,高层是全连接层对应传统多层感知器的隐含层和逻辑回归分类器。第一个全连接层的输入是由卷积层和子采样层进行特征提取得到的特征图像。最后一层输出层是一个分类器,可以采用逻辑回归,Softmax回归甚至是支持向量机对输入图像进行分类。Softmax回归:它是在逻辑回归的基础上扩张而来,它的目的是为了解决多分类问题。在这类问题中,训练样本的种类一般在两个以上。Softmax回归是有监督学习算法,它也可以与深度学习或无监督学习方法结合使用。)

 

卷积神经网络结构包括:卷积层,降采样层,全链接层

卷积层:使用卷积层的原因是卷积运算的一个重要特点是,通过卷积运算,可以使原信号特征增强,并且降低噪音。

降采样层:使用降采样的原因是,根据图像局部相关性的原理,对图像进行子采样可以减少计算量,同时保持图像旋转不变性。

采样的目的主要是混淆特征的具体位置,因为某个特征找出来后,它的具体位置已经不重要了,我们只需要这个特征与其他的相对位置,比如一个8”,当我们得到了上面一个"o"时,我们不需要知道它在图像的具体位置,只需要知道它下面又是一个“o”我们就可以知道是一个'8'了,因为图片中"8"在图片中偏左或者偏右都不影响我们认识它,这种混淆具体位置的策略能对变形和扭曲的图片进行识别。

全连接层:采用softmax全连接,得到的**值即卷积神经网络提取到的图片特征。

7. 卷积神经网络求解(卷积神经网络LeNet-5结构分析

 

CNN通常至少有两个非线性可训练的卷积层,两个非线性的固定卷积层(又叫Pooling Layer或降采样层)和一个全连接层,一共至少5个隐含层。

LeNet-5手写数字识别结构(上图)分析:

1. 输入层:N32*32的训练样本

输入图像为32*32大小。

2. C1层:

输入图片大小: 32*32

卷积窗大小: 5*5

卷积窗种类: 6

输出特征图数量: 6

输出特征图大小: 28*28 (32-5+1)

神经元数量: 4707 (28*28)*6)

连接数: 122304 (28*28*5*5*6)+(28*28*6)

可训练参数: 156 5*5*6+6

65×5的过滤器进行卷积,结果是在卷积层C1中,得到6张特征图,特征图的每个神经元与输入图片中的5×5的邻域相连,即用5×5的卷积核去卷积输入层,由卷积运算可得C1层输出的特征图大小为(32-5+1)×(32-5+1)=28×28

3. S2层:

输入图片大小: (28*28)*6

卷积窗大小: 2*2

卷积窗种类: 6

输出下采样图数量:6

输出下采样图大小:14*14 (28/2)*(28/2)

神经元数量: 1176 (14*14)*6

连接数: 5880 2*2*14*14*6+14*14*6

可训练参数: 12 1*6+6

卷积和下采样过程:

(1)、卷积过程包括:用一个可训练的滤波器fx去卷积一个输入的图像(第一阶段是输入的图像,后面的阶段就是卷积特征map了),然后加一个偏置bx,得到卷积层Cx

卷积运算一个重要的特点就是,通过卷积运算,可以使原信号特征增强,并且降低噪音

(2)、下采样过程包括:每邻域四个像素求和变为一个像素,然后通过标量Wx+1加权,再增加偏置bx+1然后通过一个sigmoid**函数,产生一个大概缩小四倍的特征映射图Sx+1

利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息。

卷积之后进行子抽样的思想是受到动物视觉系统中的“简单的”细胞后面跟着“复杂的”细胞的想法的启发而产生的。

降采样后,降采样层S2的输出特征图大小为(28÷2)×(28÷2=14×14

S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid函数计算。可训练系数和偏置控制着sigmoid函数的非线性程度。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的**函数,使得特征映射具有位移不变性。如果系数比较小,那么运算近似于线性运算,下采样相当于模糊图像。如果系数比较大,根据偏置的大小下采样可以被看成是有噪声的“或”运算或者有噪声的“与”运算。每个单元的2*2感受野并不重叠,因此S2中每个特征图的大小是C1中特征图大小的1/4(行和列各1/2)。

从一个平面到下一个平面的映射可以看作是作卷积运算,S-层可看作是模糊滤波器,起到二次特征提取的作用。隐层与隐层之间空间分辨率递减,而每层所含的平面数递增,这样可用于检测更多的特征信息。

4. C3层:

输入图片大小: (14*14)*6

卷积窗大小: 5*5

卷积窗种类: 16

输出特征图数量: 16

输出特征图大小: 10*10 (14-5+1)

神经元数量: 1600 (10*10)*16)

连接数: 151600 1516*10*10

可训练参数: 1516 6*(3*25+1)+6*(4*25+1)+3*(4*25+1)+1*(6*25+1)

C3层也是一个卷积层,它同样通过5x5的卷积核去卷积S2层,然后得到的特征map就只有10x10个神经元,但是它有16种不同的卷积核,所以就存在16个特征map了。这里需要注意的一点是C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合(这个做法也并不是唯一的)。

???C3中每个特征图由S2中所有6个或者几个特征map组合而成。为什么不把S2中的每个特征图连接到每个C3的特征图呢?原因有2点。第一,不完全的连接机制将连接的数量保持在合理的范围内。第二,也是最重要的,其破坏了网络的对称性。由于不同的特征图有不同的输入,所以迫使他们抽取不同的特征。

5. S4层:

输入图片大小: (10*10)*16

卷积窗大小: 2*2

卷积窗种类: 16

输出下采样图数量: 16

输出下采样图大小: (5*5)*16

神经元数量: 400 (5*5)*16

连接数: 2000 (2*2*5*5*16)+(5*5*16)

可训练参数: 32 (1+1)*16

S4层是一个下采样层,由165*5大小的特征图构成。特征图中的每个单元与C3中相应特征图的2*2邻域相连接,跟C1S2之间的连接一样。S4层有32个可训练参数(每个特征图1个因子和一个偏置)和2000个连接。

6. C5层:

输入图片大小: (5*5)*16

卷积窗大小: 5*5

卷积窗种类: 120

输出特征图数量: 120

输出特征图大小: 1*1 (5-5+1)

神经元数量: 120 (1*120)

连接数: 48120 5*5*16*120*1+120*1

可训练参数: 48120 5*5*16*120+120

C5层是一个卷积层,有120个特征图。每个单元与S4层的全部16个单元的5*5邻域相连。由于S4层特征图的大小也为5*5(同滤波器一样),故C5特征图的大小为1*1,这构成了S4C5之间的全连接。之所以仍将C5标示为卷积层而非全相联层,是因为如果LeNet-5的输入变大,而其他的保持不变,那么此时特征图的维数就会比1*1大。C5层有48120个可训练连接。

 

(光栅化(Rasterization):为了与传统的多层感知器MLP全连接,把上一层的所有Feature Map的每个像素依次展开,排成一列。)

7. F6层:

输入图片大小: (1*1)*120

卷积窗大小: 1*1

卷积窗种类: 84

输出特征图数量: 1

输出特征图大小: 84

神经元数量: 84

连接数: 10164 120*84+84

可训练参数: 10164 120*84+84

F6层有84个单元(之所以选这个数字的原因来自于输出层的设计),与C5层全相连。有10164个可训练参数。如同经典神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置。然后将其传递给sigmoid函数产生单元i的一个状态。

(多层感知器(MLP):最后一层为分类器,一般使用Softmax,如果是二分类,当然也可以使用线性回归Logistic RegressionSVMRBM。)

8. OUTPUT层:

输入图片大小: 1*84

输出特征图数量: 1*10

 

 

 

注意:数据集中的65%用于训练,25%用于测试,剩余的10%用于验证。

超参数:滤波器尺寸(卷积层、局部连接)、滤波器的数量、步长 Padding、深度

1、首先,输出数据体的深度是一个超参数:它和使用的滤波器的数量一致,而每个滤波器在输入数据中寻找一些不同的东西。举例来说,如果第一个卷积层的输入是原始图像,那么在深度维度上的不同神经元将可能被不同方向的边界,或者是颜色斑点**。我们将这些沿着深度方向排列、接受区域相同的神经元集合称为深度列(depth column)。

2、其次,在滑动滤波器的时候,必须指定步长。当步长为1,滤波器每次移动1个像素。当步长为2,滤波器滑动时每次移动2个像素。这个操作会让输出数据体在空间上变小。

3、在下文可以看到,有时候将输入数据体用0在边缘处进行填充是很方便的。这个零填充(zero-padding)的尺寸是一个超参数。零填充有一个良好性质,即可以控制输出数据体的空间尺寸(最常用的是用来保持输入数据体在空间上的尺寸,这样输入和输出的宽高都相等)。

输出数据体在空间上的尺寸可以通过输入数据体尺寸(W),卷积层中神经元的感知域(F),步长(S)和零填充的数量(P)的函数来计算。输出数据体的空间尺寸为 (WF+2P)/S+1。比如输入是7×7,滤波器是3×3,步长为1,填充为0,那么就能得到一个 5×5的输出。如果步长为2,输出就是3×3

使用零填充:在上面左边例子中,注意输入维度是5,输出维度也是5。之所以如此,是因为接受区域是3并且使用了1的零填充。如果不使用零填充,则输出数据体的空间维度就只有3,因为这就是滤波器整齐滑过并覆盖原始数据需要的数目。一般说来,当步长S=1时,零填充的值是P=(F-1)/2,这样就能保证输入和输出数据体有相同的空间尺寸

步长的限制:注意这些空间排列的超参数之间是相互限制的。举例说来,当输入尺寸W=10,不使用零填充则P=0,滤波器尺寸F=3,这样步长S=2就行不通,因为 (WF+2P)/S+1=(103+0)/2+1=4.5,结果不是整数,这就是说神经元不能整齐对称地滑过输入数据体。

注意 有时候参数共享假设可能没有意义,特别是当卷积神经网络的输入图像是一些明确的中心结构时候。这时候我们就应该期望在图片的不同位置学习到完全不同的特征。一个具体的例子就是输入图像是人脸,人脸一般都处于图片中心。你可能期望不同的特征,比如眼睛特征或者头发特征可能(也应该)会在图片的不同位置被学习。在这个例子中,通常就放松参数共享的限制,将层称为局部连接层(Locally-Connected Layer)。

 ————————————————————————————————————————————————————

从神经网络到卷积神经网络(CNN)
我们知道神经网络的结构是这样的:
CNN学习笔记

那卷积神经网络跟它是什么关系呢?
其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进。比如下图中就多了许多传统神经网络没有的层次。

 CNN学习笔记


卷积神经网络的层级结构
      • 数据输入层/ Input layer
  • 卷积计算层/ CONV layer
  • ReLU激励层 / ReLU layer
  • 池化层 / Pooling layer
  • 全连接层 / FC layer

 

1.数据输入层
该层要做的处理主要是对原始图像数据进行预处理,其中包括:
  • 去均值:把输入数据各个维度都中心化为0,如下图所示,其目的就是把样本的中心拉回到坐标系原点上。
  • 归一化:幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
  • PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化

 

去均值与归一化效果图:

CNN学习笔记

 

去相关与白化效果图:

CNN学习笔记

 

 

2.卷积计算层
这一层就是卷积神经网络最重要的一个层次,也是“卷积神经网络”的名字来源。
在这个卷积层,有两个关键操作:
  • 局部关联。每个神经元看做一个滤波器(filter)
  • 窗口(receptive field)滑动, filter对局部数据计算

 

先介绍卷积层遇到的几个名词:
  • 深度/depth(解释见下图)
  • 步长/stride (窗口一次滑动的长度)
  • 填充值/zero-padding

CNN学习笔记

 

填充值是什么呢?以下图为例子,比如有这么一个5*5的图片(一个格子一个像素),我们滑动窗口取2*2,步长取2,那么我们发现还剩下1个像素没法滑完,那怎么办呢?

CNN学习笔记

那我们在原先的矩阵加了一层填充值,使得变成6*6的矩阵,那么窗口就可以刚好把所有像素遍历完。这就是填充值的作用。

CNN学习笔记

卷积的计算(注意,下面蓝色矩阵周围有一圈灰色的框,那些就是上面所说到的填充值)

CNN学习笔记
这里的蓝色矩阵就是输入的图像,粉色矩阵就是卷积层的神经元,这里表示了有两个神经元(w0,w1)。绿色矩阵就是经过卷积运算后的输出矩阵,这里的步长设置为2。

 CNN学习笔记

蓝色的矩阵(输入图像)对粉色的矩阵(filter)进行矩阵内积计算并将三个内积运算的结果与偏置值b相加(比如上面图的计算:2+(-2+1-2)+(1-2-2) + 1= 2 - 3 - 3 + 1 = -3),计算后的值就是绿框矩阵的一个元素。

CNN学习笔记

 

下面的动态图形象地展示了卷积层的计算过程:

 CNN学习笔记


参数共享机制
  • 在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元只关注一个特性。神经元就是图像处理中的滤波器,比如边缘检测专用的Sobel滤波器,即卷积层的每个滤波器都会有自己所关注一个图像特征,比如垂直边缘,水平边缘,颜色,纹理等等,这些所有神经元加起来就好比就是整张图像的特征提取器集合。
  • 需要估算的权重个数减少: AlexNet 1亿 => 3.5w
  • 一组固定的权重和不同窗口内数据做内积: 卷积

 CNN学习笔记


3.激励层
把卷积层输出结果做非线性映射。
CNN学习笔记
CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱,图像如下。

CNN学习笔记

 

激励层的实践经验:
  ①不要用sigmoid!不要用sigmoid!不要用sigmoid!
  ② 首先试RELU,因为快,但要小心点
  ③ 如果2失效,请用Leaky ReLU或者Maxout
  ④ 某些情况下tanh倒是有不错的结果,但是很少


4.池化层
池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。
简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。

 

这里再展开叙述池化层的具体作用。

1. 特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。

2. 特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。

3. 在一定程度上防止过拟合,更方便优化。

CNN学习笔记
池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是Max pooling。

这里就说一下Max pooling,其实思想非常简单。
CNN学习笔记
对于每个2*2的窗口选出最大的数作为输出矩阵的相应元素的值,比如输入矩阵第一个2*2窗口中最大的数是6,那么输出矩阵的第一个元素就是6,如此类推。


5.全连接层
两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:

CNN学习笔记
一般CNN结构依次为
  1. INPUT
  2. [[CONV -> RELU]*N -> POOL?]*M 
  3. [FC -> RELU]*K
  4. FC


卷积神经网络之训练算法
  1. 同一般机器学习算法,先定义Loss function,衡量和实际结果之间差距。
  2. 找到最小化损失函数的W和b, CNN中用的算法是SGD(随机梯度下降)。


卷积神经网络之优缺点
优点
  • 共享卷积核,对高维数据处理无压力
  • 无需手动选取特征,训练好权重,即得特征分类效果好
缺点
  • 需要调参,需要大样本量,训练最好要GPU
  • 物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)


卷积神经网络之典型CNN
  • LeNet,这是最早用于数字识别的CNN
  • AlexNet, 2012 ILSVRC比赛远超第2名的CNN,比
  • LeNet更深,用多层小卷积层叠加替换单大卷积层。
  • ZF Net, 2013 ILSVRC比赛冠军
  • GoogLeNet, 2014 ILSVRC比赛冠军
  • VGGNet, 2014 ILSVRC比赛中的模型,图像识别略差于GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好


卷积神经网络之 fine-tuning
何谓fine-tuning?
fine-tuning就是使用已用于其他目标、预训练好模型的权重或者部分权重,作为初始值开始训练。

那为什么我们不用随机选取选几个数作为权重初始值?原因很简单,第一,自己从头训练卷积神经网络容易出现问题;第二,fine-tuning能很快收敛到一个较理想的状态,省时又省心。

那fine-tuning的具体做法是?
  • 复用相同层的权重,新定义层取随机权重初始值
  • 调大新定义层的的学习率,调小复用层学习率


卷积神经网络的常用框架

Caffe
  • 源于Berkeley的主流CV工具包,支持C++,python,matlab
  • Model Zoo中有大量预训练好的模型供使用
Torch
  • Facebook用的卷积神经网络工具包
  • 通过时域卷积的本地接口,使用非常直观
  • 定义新网络层简单
TensorFlow
  • Google的深度学习框架
  • TensorBoard可视化很方便
  • 数据和模型并行化好,速度快

 

总结
卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。

CNN一个非常重要的特点就是头重脚轻(越往输入权值越小,越往输出权值越多),呈现出一个倒三角的形态,这就很好地避免了BP神经网络中反向传播的时候梯度损失得太快。

卷积神经网络CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。

 



为什么不用BP神经网络去做呢?
1.全连接,权值太多,需要很多样本去训练,计算困难
  • 应对之道:减少权值的尝试,局部连接,权值共享

  卷积神经网络有两种神器可以降低参数数目。
  第一种神器叫做局部感知野,一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。
  第二级神器,即权值共享。

 CNN学习笔记


2.边缘过渡不平滑
  • 应对之道:采样窗口彼此重叠

 CNN学习笔记