DNN结构演进History—CNN

来源:互联网 发布:巨人网络有哪些游戏 编辑:程序博客网 时间:2024/06/07 15:27

         转自于维基:基于深度学习的图像识别进展百度的若干实践

    从没有感知域(receptive field) 的深度神经网络,到固定感知域的卷积神经网络,再到可变感知域的递归神经网络,深度学习模型在各种图像识别问题中不断演进。

    曾经爆炸式增长的参数规模逐步得到有效控制,人们将关于图像的先验知识逐渐用于深度学习,大规模并行化计算平台愈加成熟,这些使我们能够从容应对大数据条件下的图像识别问题。

 

一、用于ImageRecognition的CNN:

      参考链接:http://blog.csdn.net/zouxy09/article/details/8781543/

       维基解释:卷积神经网络(Convolutional Neural Network)由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。

       与其他深度学习结构相比,卷积神经网络在图像和语音识别方面能够给出更优的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网络,卷积神经网络需要估计的参数更少,使之成为一种颇具吸引力的深度学习结构[2]

       卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。

       特点:它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。

   CNNs是受早期的延时神经网络(TDNN)的影响。延时神经网络通过在时间维度上共享权值降低学习复杂度,适用于语音和时间序列信号的处理,而CNNs在空间维度上使用权值共享降低学习复杂度。

       但CNNs是第一个真正成功训练多层网络结构的学习算法。它利用空间关系减少需要学习的参数数目以提高一般前向BP算法的训练性能。CNNs作为一个深度学习架构提出是为了最小化数据的预处理要求。在CNN中,图像的一小部分(局部感受区域)作为层级结构的最低层的输入,信息再依次传输到不同的层,每层通过一个数字滤波器去 获得观测数据的最显著的特征 。这个方法能够获取对平移、缩放和旋转不变的观测数据的显著特征,因为图像的局部感受区域允许神经元或者处理单元可以访问到最基础的特征,例如定向边缘或者角点。


二、CNN用于特征学习

       参考链接:http://www.open-open.com/lib/view/open1425626861103.html

       在图像处理中,往往把图像表示为像素的向量,比如一个1000×1000的图像,可以表示为一个1000000的向量。在一般神经网络 中,如果隐含层神经元数目与输入层一样,即也是1000000时,那么输入层到隐含层的参数数据为1000000×1000000=10^12,这样就太多了, 基本没法训练。所以图像处理要想练成神经网络大法,必先减少参数加快速度。

       当然,图像的输入尺度一般不会达到1000分辨率,而达到较好的训练效果,却实在需要更多层的网络,这样仍会产生更多的参数。此外,对CNN也有识别图像旋转和尺度不变性的要求。

       卷积神经网络有两种神器可以降低参数数目,第一种神器叫做局部感知野,第二种为权值共享,此外还有图像下采样。

      


1.局部感受野 Local Receptive Area / Fiileds

      一般感知信息的联系为局部到全局,而图像的空间联系也是局部像素 联系较为紧密,而距离较远的像素相关性较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起 来就得到全局信息。网络部分连通的思想,也是受启发于生物学里面的视觉系统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区 域的刺激),也就是所谓的局部感受野

       如下图所示:左图为全连接,右图为局部连接。

     一文读懂卷积神经网络

 多层网络实现局部关联

       在上右图中,假如每个神经元只和10×10个像素值相连,那么权值数据为1000000×100个参数,减少为原来的千分之一。而那10×10个像素值对应的10×10个参数,其实就相当于卷积操作,因此为卷积神经网络。


       其对应结构为

       卷积层:卷积神经网络中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征(这也是深度的要求)。

  

2.参数共享 shared Weights

    但其实这样的话参数仍然过多,那么就启动第二级参数降低方法,即权值共享。

    怎么理解权值共享呢?网络中每个神经元都链接10*10的图像区域,我们可以这100个参数(也就是卷积操作)看成是提取特征的方式,该方式与位置无关。

    CNN在在上面的局部连接中,一共1000000个神经元,每个神经元都链接10*10 的图像区域,即对应100个参数。但对于这1000000个神经元,若每个神经元的这100个参数都是相等的,即是每个神经元用同一个卷积核去卷积图像局部,那么参数数目就变为100了。

       不管隐层的神经元个数有多少,两层间的连接只有100个参数,这就是CNNs的主要卖点。直接对应了特征选择中的稀疏编码,降低特征空间。

    这其中隐含原理则是:图像的一部分的统计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征,则表现为权值是共享的

   

图2.1  权值共享

    更直观一些,当从一个大尺寸图像中随机选取一小块,比如说 8×8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个 8×8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。特别是,我们可以用从 8×8 样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。

    如下图所示,展示了一个33的卷积核在55的图像上做卷积的过程。每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。

        

图2.2  权值共享/特征共享

3. 空间降采样

      在通过卷积获得了特征 (features) 之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取得到的特征去训练分类器,例如 softmax 分类器,但这样做面临计算量的挑战。例如:对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 892 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,需要训练相当多的参数,并且容易出现过拟合 (over-fitting)。

       为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极 有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定 特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),参数减少,同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。

     其对应结构为

       线性整流层:

   池化层:

    

   图3.1 特征池化层(空间降采样)


4.   终止层:终止层用于防止过拟合。

    随机丢失:

        Dropout "layer":

       Since a fully connected layer occupies most of the parameters, it is prone tooverfitting. The dropout method[19] is introduced to prevent overfitting. Dropout also significantly improves the speed of training. This makes model combination practical, even for deep neural nets. Dropout is performed randomly. In the input layer, the probability of dropping a neuron is between 0.5 and 1, while in the hidden layers, a probability of 0.5 is used. The neurons that are dropped out, will not contribute to the forward pass and back propagation. This is equivalent to decreasing the number of neurons. This will create neural networks with different architectures, but all of those networks will share the same weights.

      The biggest contribution of the dropout method is that, although it effectively generates 2^n neural nets, with different architectures (n=number of "droppable" neurons), and as such, allows for model combination, at test time, only a single network needs to be tested. This is accomplished by performing the test with the un-thinned network, while multiplying the output weights of each neuron with the probability of that neuron being retained (i.e. not dropped out).

    损失层:

        Loss layer:损失函数的确定是重点......

        It can use different loss functions for different tasks. Softmax loss is used for predicting a single class of K mutually exclusive classes. Sigmoid cross-entropy loss is used for predicting K independent probability values in [0,1]. Euclidean loss is used for regressing to real-valued labels [-inf,inf]



二、CNN普遍应用形式


       基于其三个特点:

       • Local connectivity: 局部特征的响应
       • Parameter sharing: 减小参数个数——对局部特征的平移不变性
       • pooling/subsampling hidden units: 减小参数的个数——对局部特征的旋转不变性


三、CNN的不断改进:


• 输入    数据:  data distortion,   generating additional examples,   trasfer learning,  big data...
• 隐层节点输入:  Dopconnect,   Maxout...
• 隐层    节点:  sigmoid,   tanh,   linear,   ReLU...
• 隐层节点输出:  Dropout...
• 卷        积:  receptive field size,    overlap or not...
• 池        化:  mean-pooling,   max-pooling,    Stochastic pooling,    3D pooling,   linear or not...
• 网络    结构:  layer’s connect way,   #hidden units, #layers(deep learning)...
• 优化    方法:  pre-training,  fine-tunning,   learning rate,   moment,  mini-batch,   sgd,  hessin free...
• 规则项、大脑皮层、理论研究...


四、微调(fine-tuning)

     可用包

  • Caffe:  Caffe 包含了CNN使用最广泛的库。它由伯克利视觉和学习中心(BVLC)研发,拥有比一般实现更好的结构和更快的速度,分离的设定和执行。同时支持CPU和GPU计算,底层由C++实现,并封装了Python和MATLAB的接口。
  • Torch7 (www.torch.ch)
  • OverFeat
  • Cuda-convnet
  • MatConvnet
  • Theano: 用Python实现的神经网络包[3]


五、CNN示例


1. LeNet5网络:http://yann.lecun.com/exdb/lenet/index.html

        


参考:http://en.wikipedia.org/wiki/Convolutional_neural_network#Dropout_.22layer.22

0 0
原创粉丝点击