精华内容
下载资源
问答
  • 卷积神经网络架构

    万次阅读 多人点赞 2018-11-20 17:14:48
    卷积神经网络(conv)架构 卷积神经网络在图像分类数据集上有非常突出的表现,由于一般正常的图像信息过大,如果使用全连接神经网络,需要设置大量的权值w和basic值,这样会导致运算效率较低,还容易导致过分拟合的...

    卷积神经网络(conv)架构

    卷积神经网络在图像分类数据集上有非常突出的表现,由于一般正常的图像信息过大,如果使用全连接神经网络,需要设置大量的权值w和basic值,这样会导致运算效率较低,还容易导致过分拟合的问题。

    1.全连接神经网络和卷积神经网络的区别

    全连接神经网络:
    在这里插入图片描述
    卷积神经网络图:
    在这里插入图片描述
    共同点: 图中每一个节点都代表一个神经元,没相邻两层之间的节点都有边相;输入输出的流程基本一致。
    不同点: 卷积神经网络相邻两层之间只有部分的节点相连,所以一般会将每一层的卷积层组织成一个三维矩阵。
    卷积神经网络的优点: 在图像处理方面,对于MNIST数据,每一张图片的大小是28281,其中28*28为图片的大小,1表示只有一个彩色通道,并且这里的图像的颜色为黑白。假设第一层隐藏层的节点数位500个,那么一个全连接层的神经网络将有28 * 28 * 500+500=392500个参数。其中**+500**表示的是basic值。而当图片更大的时候,通道数增加的的时候,所需要的参数的数量会更大,会达到百万级,甚至千万级。随着参数的增多,计算速度会随之减慢,还容易导致过度拟合问题。

    2.卷积神经网络

    卷积神经网络构架图:
    在这里插入图片描述

    1.输入层

    在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵。通常为(length * width *channel)。 三维矩阵的深度代表了图像的彩色通道(channel)。比如黑白图片的深度为1,而在RGB色彩模式下,图像的深度为3。从输入层开始,卷积神经网络通过不同的神经网络结构将上一层的三维矩阵转化为下一层的三维矩阵,直到最后的全连接层。

    2.卷积层

    是卷积网络中最为重要的部分。和传统全连接层不同,卷积层中每一个节点的输入只是上一层神经网络的一小块,这个小快常用的大小有3 * 3或者5 * 5,卷积层会增加原始节点的深度。通常卷积层这部分被称为过滤器(filetr) 或者 内核(kernel)
    过滤器: 将当前的神经网络上的一个子节点矩阵转化为下一层神经网络上的一个单位节点矩阵,但深度不限的节点矩阵。
    过滤器示意图:
    在这里插入图片描述
    过滤器的尺寸: 过滤器的所处理的节点矩阵的长和宽就是这个过滤器的长和宽的尺寸。而过滤器的深度则是有需要人工指定设置和处理的。
    卷积层例子: 过滤器将一个 2 * 2 * 3 的节点矩阵变化为一个1 * 1 * 5的单位节点矩阵。那么该卷积层的需要**2 * 2 * 2 3 5 + 5 = 65 个参数。其中最后的+5为偏置项的个数。假设用wi来表示第i个权重,bi表示偏置项的参数。上述所示的公式为:
    在这里插入图片描述
    传播的过程: 卷积层的前向传播过程是将一个过滤器从神经网络当前层的 左上角移动到右下角,并且在移动过程中计算每一个对应的单位矩阵。移动的例图 (步长为1)在这里插入图片描述
    全0填充(zero-padding)–改变结果矩阵的大小(1): 为了 避免尺寸的变化,可以在当前层矩阵的边界加入全0填充。这样可以使得卷积层前向传播结果的矩阵大小和当前层矩阵保持一致。示意图:
    在这里插入图片描述
    **改变移动步长–改变结果矩阵的大小(2):**当改变过滤器的移动步长,可以改变结果矩阵的尺寸大小,示意图:
    在这里插入图片描述
    计算结果矩阵的大小的尺寸:
    1.使用全0填充时:
    在这里插入图片描述
    2.不使用全0填充:
    在这里插入图片描述
    in_length:输入节点的长度,in_width:输入节点的宽度,side_length:移动的步长,filter_length过滤器的长度,filter_width表示过滤器的宽度。

    3.池化层(Pooling)

    池化层神经网络不会改变三维矩阵的深度,但是它可以缩小矩阵的大小。池化操作可以认为是将一张分辨率较高的图片转化为分辨率较低的图片。通过池化层,可以进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络中的参数的目的。
    效果: 使用池化层既可以加快计算速度也可以防止过度拟合
    使用: 同样类似卷积层,但是并不是计算节点的加权和,而是采用更加简单的最大值或者平均值运算最大池化层(max pooling) 使用最大值操作,是被使用得最多的池化层结构。平均池化层(average pooling) 使用平均值操作。注意: 池化层不仅需要在长和宽的维度上移动,它还需要在深度的维度上移动,且每次的过滤器可能是 不同的 。如图:
    在这里插入图片描述

    4.全连接层

    在经过几轮的卷积层和池化层的处理之后,可以认为图像中的信息已经被抽象成了信息含量更高的特征。我们可以将卷积层和池化层看成自动图像特征提出的过程。在此之后,我们仍需使用全连接层来完成分类任务。

    5.Softmax层。

    Softmax层主要用于分类问题,我们可以得到当前样例属于不同种类的概率分布情况。

    以上所有内容均为小编在看书后做的一些笔记总结。

    展开全文
  • 如何设计卷积神经网络架构和卷积、池化后图片大小的计算(一)卷积神经网络及卷积层或池化层大小的设置 (1)如何设计卷积神经网络架构 下面的正则化公式总结了一些经典的用于图片分类问题的卷积神经网络架构: ...

    如何设计卷积神经网络架构和卷积、池化后图片大小的计算

    (一)卷积神经网络及卷积层或池化层大小的设置

     (1如何设计卷积神经网络架构

       下面的正则化公式总结了一些经典的用于图片分类问题的卷积神经网络架构: 


                         输入层(卷积层+→池化层?)+→全连接层+

     

        “+”表示一层或多层,“?”表示有或者没有 

        除了LeNet-5模型,2012年ImageNet ILSVRC图像分类挑战的第一名AlexNet模型、2013年ILSVRC第一名ZF Net模型已 经 2014年第二名VGGNet模型的架构都满足上面的正则表达式。

      (2如何设置卷积层或池化层配置

        ·   过滤器的尺寸:135,有些网络中有过7甚至11

        ·   过滤器的深度:逐层递增。每经过一次池化层之后,卷积层深度*2

        ·    卷积层的步长:一般为1,有些也会使用2甚至3

        ·    池化层:最多的是max_pooling,过滤器边长一般为2或者3,步长一般为23

    (二)卷积和池化后图片大小及个数的计算

      (1)卷积后图片输出大小几个数

        W:图像宽,H:图像高,D:图像深度(通道数)

        F:卷积核宽高,N:卷积核(过滤器)个数S:步长,P:用零填充个数

        卷积后输出图像大小:

                                       Width=(W-F+2P)/S+1

                                       Height=(H-F+2P)/S+1

        卷积后输出图像深度:

                                        N=D

        输出图像大小:     widthheightN

        weight个数:          F*F*D*N

        bias个数:               N

        总结:卷积输出大小=[(输入大小-卷积核(过滤器)大小+2*P)/步长]+1

    2)池化层

        通用的卷积时padding 的选择:

        1.    如卷积核宽高为3 padding 选择1

        2.  如卷积核宽高为5 padding 选择2

        3.  如卷积核宽高为7 padding 选择3

        池化后图片输出大小及个数

        W:图像宽,H:图像高,D:图像深度(通道数)

        F:卷积核宽高,S:步长

        池化后输出图像大小:

                                      W=(W-F)/S+1

                                      H=(H-F)/S+1

        池化后输出图像深度:    

                                      N=D

        总结:池化输出大小=[(输入大小-卷积核(过滤器)大小)/步长]+1

     


    展开全文
  • 机器视角--揭秘图像处理和卷积神经网络架构 近日Dishashree?Gupta?在?Analyticsvidhya?上发表了一篇题为Architecture?of?Convolutional?Neural?Networks(CNNs?demystified的文章对用于图像识别和分类的卷积神经网络...
  • 卷积神经网络架构理解

    千次阅读 2018-03-28 18:09:11
    神经网络基础 神经网络属于优化类的数学模型。每个神经元接收到输入后,经过一些计算操作后输出一个特定的数值。这个数值经过一个激活函数(非线性的),产生这个神经元的最后输出。有很多激活函数,且绝大数已经在...

    神经网络基础

    神经网络属于优化类的数学模型。每个神经元接收到输入后,经过一些计算操作后输出一个特定的数值。这个数值经过一个激活函数(非线性的),产生这个神经元的最后输出。有很多激活函数,且绝大数已经在Tensorflow中集成了,最流行的是 S i g m o i d Sigmoid Sigmoid函数:
    y = 1 1 + e − z z = w T x + b y=\frac{1}{1+e^{-z}}\\ z=w^Tx+b y=1+ez1z=wTx+b
    z z z是线性计算结果, w w w是权重向量, x x x是输入向量, b b b是偏置项。公式中,不过是把图中的累加更改成了向量的内积形式,这在机器学习中很常见,向量化计算可以节约大量时间。
    单个神经元模型:
    这里写图片描述
    整体全连接神经网络模型:
    这里写图片描述
    每一层添加一个偏置项。具体的数学推导,参见这篇博客
    #卷积神经网络
    ##常用的操作与名词:
    这一部分,总结了看论文或者有关博客时,遇到的专用名词:

    Input/Output Volumes:

    CNN把输入的图片视为矩阵,当然,这是在灰度图片的情况下的。加入我们有一张256色图片作为输入,那么图片的矩阵的每个像素点取值为[0,255]。然而,彩色的图片进行灰度处理会丢失很多信息,于是就多了一层输入。一般RGB三原色图像,可以分解成红、绿、蓝三个颜色层这里写图片描述
    每一个颜色层相当于一个channel
    ###Filters:
    过滤器。相当于一次信息过滤操作,也可以看成一次像素的编码操作的标准。一个过滤器的大小一般小于图片,之后对过过滤器范围内的像素进行一次内积,然后累加。比如参照Kernel Operations的图片,红色矩阵中的黑框就相当于一个过滤器。过滤器的作用可以看成一次局部感知,同时减少权重参数的数量,减少计算量,防止过拟合。

    Kernel Operations:

    在过滤器的基础上,控制过滤器移动的步长和范围,两者结合实现局部感知。

    Receptive Field

    感知域。由于隐藏层不是与输入层进行的全链接,因此进行了卷积操作。经过卷积后,每个神经元相当于只与前一层的部分神经元进行链接。链接的这一部分就是该神经元的感知域。左侧每个神经元的感知域是整个图片,而右侧每个神经元仅仅是感知局部。
    这里写图片描述

    Zero-Padding

    在图像的边界添加0边。最常用的情景是我们需要卷积前和卷积后的图片尺寸相同。
    这里写图片描述

    卷积神经网络隐藏层的种类

    卷积层(Convolutional Layer):

    为什么使用卷积层:

    前面的描述中,我们知道CNN的一个重大的突破就是某些神经元只观测图片的局部,那么卷积就是实现这个作用。

    卷积层的一般介绍:

    卷积在数学上用于过滤信号,并识别信号中的模式。在卷积层中,所有的神经源使用卷积操作输入数据。对于卷积层来说,最重要的参数是过滤尺寸。假设我们有553的卷积层应用在输入尺寸为32323的尺寸的输入上,见下图。
    现在让我们应用一个553的过滤器在一副图片上,并且计算卷积结果。这个卷积操作会产生一个数字作为输出,我们会在输出结果上增加一个偏置项。

    卷积的实际操作相当于一个矩阵的点积操作。同时,过滤器每次会移动一个像素的距离,有些情况下,移动的距离会多于1个像素。这个移动距离称为“stride”。
    只有一个Filter的简单情况下:

    如果使用多个Filter和多个volume的话,会是这种情况,注意添加了0。

    可以看到,Filter的权重是不同的,经过不同的卷积核对应的卷积后,把输入的蓝色的每一个卷积后结果再次累加,得到绿色的输出结果。
    如果我们串联上述所有的输出在2D平面上,我们会得到一个2828的激活图。一般来说,我们在一个卷积层中使用不止一个过滤器。比如,如果我们使用6个过滤器,我们得到一个28286的输出。也就是说,可以添加多个过滤器,获取多个不同的卷积输出层。

    正如我们看到的,在每次卷积之后,输出的尺寸会减少。在一个有多个中间层的深神经网络中,输出会变得非常小,这可能使网络的效果不太好。因此,一个标准的操作是在输出层的边界添加0元素,这样操作后,会让输出的尺寸和输入的尺寸相等。在上面的例子中年,如果我们把32
    323的图片的每条边上添加2排0元素,那么或会输出32326的尺寸。假设我们的输入尺寸是 N × N N\times N N×N(仅从二维上看)的,过滤器的尺寸是 F × F F\times F F×F(仅从二维上看),使用 S S S的步长(stride),输入的层添加0边的尺寸是 P P P,那么输出尺寸是:
    N − F + 2 P S + 1 \frac{N-F+2P}{S}+1 SNF+2P+1
    上述例子中:(32-5+2
    2)/1+1=32

    Tensorflow中关于卷积层的函数:

    官方文档说明

    tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)
    

    把4维的输入计算出2维的卷积。

    1. input:格式为[batch, in_height, in_width, in_channels]batch是一个批次训练输入的图片的个数;in_heightin_width分别是高度和宽度;in_channels是上面提到的channel
    2. filter:滤波器,格式为:[filter_height, filter_width, in_channels, out_channels]filter_heightfilter_width分别是高度和宽度,in_channels是输入图片的channelout_channels是自定义输出层的channel。 关于out_channels的解释,根据个人理解与这篇博客这篇博客,可以视为输出out_channels的个数,也可以理解成前边的Filter的个数。比如下图中,Layer1中Conv到Maxpoling中,由32channel到32channel;Layer1到Layer2时,由32变成64。在这期间,相当于后面的一层与前面一层根据channel数进行一次连接操作。(下图有一个错误,全连接第一层应该是3136个神经元)
      对应上面的动图,输入的channel数就是红色卷积核的行数,也是输入矩阵的个数;而输出channel个数就是红色卷积列数,也是输出矩阵的个数。
    3. strides:控制卷积操作的步长,是4维的(至于为什么4维,参照官方文档)。基本格式为:[1, stride, stride, 1],两个1不能改,stride表示移动的步长,一般是1或者2.
    4. padding: 添加0边。取值是"SAME"和"VALID"字符值,具体算法的区别参照官网
    5. use_cudnn_on_gpu:使用GPU加速,默认是True,需要安装CUDNN和 CUDA
    6. data_format:控制数据输出格式,参照官方文档
    7. name:可选的,表示操作名字

    池化层(Pooling Layer):

    为什么使用池化层:

    因为一张图片,如果我们抽取出部分像素,那么一般不会影响对图片的识别。比如10001000的图片变成500500的图片,只是分辨率下降了,但是一般不影响我们对图片的观测;但是对计算机来说,却能极大减少运算量。

    池化层的简介:

    池化层的大多数情况下在卷积层后面使用,用来减少图片的空间尺寸(只是在宽和高上,不在深度上)。这减少了参数的数量,因此计算量得到了降低;同时,更少的参数会躲避“过拟合”。一般来说,最常用的是Max Pooling,即使用 F × F F\times F F×F的过滤器,并且选取过滤器内部最大的数字。如下图:

    还有一种操作是Average Pooling,对过滤器内部的数字取平均值,但是这个操作不是很流行。
    假设我们的输入尺寸是: w 1 × h 1 × d 1 w_1\times h_1\times d_1 w1×h1×d1,过滤器的尺寸是 f × f f\times f f×f,步长stride是 S S S,那么输出的尺寸 w 2 × h 2 × d 2 w_2\times h_2\times d_2 w2×h2×d2将会是:
    w 2 = ( w 1 − f ) / S + 1 h 2 = ( h 2 − f ) / S + 1 h 2 = ( h 1 − f ) / S + 1 d 2 = d 1 w_2=(w_1-f)/S+1\\h_2=(h_2-f)/S+1\\h_2=(h_1-f)/S+1\\d_2=d_1 w2=(w1f)/S+1h2=(h2f)/S+1h2=(h1f)/S+1d2=d1
    最常用的池化操作是使用2*2的过滤器和步长为2的stride。正如上述公式看到的,这会使图像尺寸减少一半。比如:

    Tensorflow中池化层处理函数:

    tf.nn.max_pool(
        value,  # 输入卷积层
        ksize,   
        strides, # 与卷积层类似
        padding, # 与卷积层类似
        data_format='NHWC',
        name=None
    )
    

    特别说明下ksize:一般是[1,ksize,ksie,1]ksize表示池化窗口的大小,第一个1表示仅仅在每个输入上进行池化,第二个表示仅在每个输出的channel进行池化,不交叉进行。
    ###全连接层(Fully Connected Layer):
    如果某一层的每个神经元收到了前一层的所有神经元的输入,那么这一层称为全连接层。全连接层通过矩阵乘法进行计算,计算完成后要添加偏置项。Tensorflow中没有集成全连接的函数,需要我们自己实现。

    实现全连接层,需要把最后一层的多维张量进行一次flatten操作,舒展成向量的形式。Tensorflow中,借助于函数:

    tf.reshape(
        tensor,  # 输入的张量
        shape,   # 输出的形状,是一个Tensor,数据类型必须是int32或者int64
        name=None # 名字
    )
    

    实现。在卷积层函数说明那一节,图片上有全连接的介绍。

    理解训练过程

    卷积神经网络的数学模型相当于模拟一个微型的大脑,我们需要两件事情来完善这个模型:

    1. 构建神经网络的架构

    设计神经网络的架构是很复杂的,而且需要很高的技巧,在这方面有很多研究。这里有很多的标准架构,它们在处理一般性问题上有很好的效果,比如说:AlexNet、GoogleNet、InceptionResnet、VGG等。在初学阶段,我们只需要使用标准的网络结构即可,当我们积累了足够多的经验后,再去设计自己的结构

    2. 正确处理网络权重和参数

    调整最优权重一般使用梯度下降算法(Back Propagation(BP)算法和其他的一些优化方法结合),这其中涉及到梯度下降求导计算问题。对于卷积神经网络来说,这是非常复杂的,不过Tensorflow已经实现了自动化求导的过程,我们只需要调用有关的函数即可。

    在训练过程中,我们需要给出梯度下降的步长(学习速率),也需要给出自己定义或者Tensorflow中集成的损失函数,算法的最终的目的是尽量减少损失函数的数值。一个最简单的损失函数是:
    c o s t = 1 2 ( y a c t u a l − y p r e d i c t i o n ) T ( y a c t u a l − y p r e d i c t i o n ) cost= \frac{1}{2}(\bf{y_{actual}-y_{prediction}})^T(\bf{y_{actual}-y_{prediction}}) cost=21(yactualyprediction)T(yactualyprediction)
    注意使用了向量化计算方式。

    在训练结束后,我们需要把有关的参数存储在一个二进制文件中,该文件称为模型。我们可以使用相同架构的神经网络来加载这个模型,用于图像识别。

    为了计算简单,我们不会把所有的数据一次性加载到模型中进行训练。相反的,假设我们有1600张图片,并把这1600张图片分解成每批次16或者32张,那么16或32称为batch-size; 整个训练过程需要100或者50次,每次称为一个迭代(Iteration);当所有图片都被训练过后,称为一次Epoch

    展开全文
  • 经典架构回顾聊一聊这些架构有哪些优缺点架构设计思考什么是最美的卷积神经网络? 深度学习是近几年迅速发展起来的学科,其在物体识别、检测、跟踪等任务中获得了突破性进展。卷积神经网络(Convolutional Neural ...
    今天迎来了我家两公子周岁生日,在这美好的日子里我用“美”为主题分享一下目前非常火非常火的CNN卷积神经网络。


    本文目录
    最美的是什么?
    经典架构回顾
    聊一聊这些架构有哪些优缺点
    架构设计思考
    什么是最美的卷积神经网络?

    深度学习是近几年迅速发展起来的学科,其在物体识别、检测、跟踪等任务中获得了突破性进展。卷积神经网络(Convolutional Neural Network,CNN)是深度学习中最为重要的分支之一,被大量用于检测、分割、物体识别以及图像的各个领域。
    本文先回顾最近几年各种经典的CNN卷积神经网络架构,来领略一下各路大神高超的智慧,聊一聊这些架构有哪些优缺点,从中提炼出一些想法来设计最强最美的卷积神经网络架构。

    一、最美的是什么?

    在数学中我认为最美的符号是:

    在数学中我认为最美的公式是:

    这时候我想问自己一个问题,那在深度学习, 计算机视觉中,最美的卷积神经网络是什么?
    先不着急,请细读下文,我会给出答案。

    二、经典架构回顾
    为了不让本文的遍幅过长,本节 只聊重点, 只聊重点 ,各经典架构的详细介绍就烦请读者自行查阅。


    上图是ILSVRC历年的Top-5错误率,我们就按照上图中经典架构出现的时间顺序对他们进行简单的总结。
    • LeNet (1998年)

    成绩:
    LeNet是卷积神经网络的祖师爷LeCun在1998年提出,用于解决手写数字识别的视觉任务。自从那时起,CNN的最基本的架构就定下来了:卷积层、池化层、全连接层。
    贡献点:
    • 定义了CNN的基本组件
    基本组件包括:卷积层、池化层、全连接层。
    • 层之间连接顺序
    卷积层后接池化层,最后接全连接层。

    • AlexNet (2012年)

    成绩:
    AlexNet在2012年ImageNet竞赛中以超过第二名10.9个百分点的绝对优势一举夺冠,从此深度学习和卷积神经网络名声鹊起,深度学习的研究如雨后春笋般出现,AlexNet的出现可谓是卷积神经网络的王者归来。
    贡献点:
    • 更深的网络
    比LeNet的5层多了3层。
    • 数据增广
    增强模型的泛化能力,避免过拟合,使用了随机裁剪的思路对原来256×256的图像进行随机裁剪。
    • ReLU
    用ReLU代替Sigmoid来加快收敛。
    • 多GPU支持
    利用多GPU加速训练。
    • Dropout
    有效缓解过拟合。

    • ZFNet (2013年)
    下图为AlexNet与ZFNet的比较:




    成绩:
    ZFNet是2013年ImageNet分类任务的冠军,其网络结构没什么改进,只是调了参数,性能较AlexNet提升了不少。
    贡献点:
    • 使用更小的卷积核,更小的滑动步长
    将AlexNet第一层卷积核由11变成7,滑动步长由4变为2。

    • VGGNet(2014年)

    成绩:
    VGGNet是2014年ImageNet竞赛定位任务的第一名和分类任务的第二名中的基础网络。
    贡献点:
    • 使用多个小的卷积核代替大的卷积核


    上图为两个3X3的卷积核代替一个5X5大的卷积核,在降低参数的同时并建立了更多的非线性变换,使得网络对特征的学习能力更强。
    • 有规则的卷积-卷积-池化操作
    VGGNet包含多个conv->conv->max pool这样的结构。

    • GoogLeNet(2014年)

    成绩:
    GoogLeNet在2014年的ImageNet分类任务上击败了VGGNet夺得冠军,它在加深网络的同时(22层),也在网络结构上做了创新,引入Inception结构代替了单纯的卷积+激活的传统操作。
    GoogLeNet包括多个版本,如下所示:
    Inception V1贡献点:
    • 引入Inception结构


    该Inception结构中卷积核的滑动步长为1,通过3×3池化、以及1×1、3×3和5×5这三种不同尺度的卷积核,一共4种方式对输入做特征提取。
    • 中间层的辅助loss单元
    GoogLeNet网络结构中有3个loss单元,这样的网络设计是为了帮助网络的收敛,在中间层加入辅助计算的loss单元,目的是计算损失时让低层的特征也有很好的区分能力,从而让网络更好地被训练。
    • 全连接层替换为简单的全局平均pooling
    减少参数,提高计算效率。
    Inception V2贡献点:
    • 引入BN层,减少Internal Covariate Shift问题
    Batch Normalization:批标准化,对每一个 mini-batch 数据进行标准化处理,使输出规范化到 N(0,1) 的正态分布,减少了 Internal Covariate Shift (内部神经元分布改变)。
    • 引用了VGGNet中使用多个小的卷积核代替大的卷积核的特性
    Inception V3贡献点:
    • Factorization into small convolutions
    将一个较大的二维卷积拆成两个较小的一维卷积,如下图所示:


    上图为3X3卷积拆成1X3卷积和3X1卷积,也可以将7X7卷积拆成1X7卷积和7X1卷积。
    Inception V4,Inception-ResNet-V1,Inception-ResNet-V2贡献点:
    什么?这么多? 这些都是Inception结合了 ResNet 中的Residual Connection,或结合 ResNet 可以极大地加速训练,同时极大提升性能,是不是觉得Residual Connection, ResNet很强大,那我们就继续往下看神奇的ResNet吧。

    • ResNet(2015年)


    成绩:
    2015年何恺明推出的ResNet在ISLVRC和COCO上横扫所有选手,获得冠军。
    贡献点:
    • 网络非常深,已经超过百层,甚至千层
    设计了一种残差模块让我们可以训练更深的网络。
    残差模块结构如下图所示:


    上图可以看出,数据经过了两条路线,一条是常规路线,另一条则是捷径(shortcut),直接实现单位映射的路线。


    上图展示了两种形态的残差模块,左图是常规残差模块,有两个3×3卷积核组成,但是随着网络进一步加深,这种残差结构在实践中并不是十分有效。针对这问题,右图的“瓶颈残差模块”(bottleneck residual block)可以有更好的效果,它依次由1×1、3×3、1×1这三个卷积层堆积而成,这里的1×1的卷积能够起降维或升维的作用,3×3的卷积可以在相对较低维度的输入上进行,以降低参数从而达到提高计算效率的目的。
    • 引入残差模块来解决退化问题
    网络深度增加的一个问题在于这些增加的层是参数更新的信号,因为梯度是从后向前传播的,增加网络深度后,比较靠前的层梯度会很小。这意味着这些层基本上学习停滞了,这就是梯度消失问题。
    深度网络的第二个问题在于训练,当网络更深时意味着参数空间更大,优化问题变得更难,因此简单地去增加网络深度反而出现更高的训练误差,深层网络虽然收敛了,但网络却开始退化了,即增加网络层数却导致更大的误差。
    • DenseNet(2017年)


    其中Dense Block的结构图如下:


    成绩:
    2017最佳论文。
    贡献点:
    • 密集连接:加强特征传播,鼓励特征复用
    DenseNet是一种具有密集连接的卷积神经网络。在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有层输出的并集,而该层所学习的特征图也会被直接传给其后面所有层作为输入。
    • 密集连接:缓解梯度消失问题
    这种Dense Connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深的网络不是问题。
    • 极大的减少了参数量,提高计算效率
    由于每一层都包含之前所有层的输出信息,因此它不需要再重新学习多余的特征图,仅学习少量的几层特征图就可以了。

    三、聊一聊这些架构有哪些优缺点
    在上面回顾部分,对经典架构中的各种优点(贡献点)简单的做了说明,那这些架构是不是也有一些没有解决或没有考虑到的问题,下面我们简单的来聊一聊。
    1.AlexNetZFNetVGGNet
    性能比GoogLeNet、ResNet、DenseNet要差一些,所以重点来聊GoogLeNet、ResNet、DenseNet。
    2.GoogLeNet
    • GoogLeNet以及 Inception的结构复杂吗?
    我认为当时没有Residual Connection/Dense Connection这样神奇的设计,在网络深度很难增加时,就在网络宽度上做了创新(即引入了Inception结构),并设计各种规格来提高性能,导致网络过于复杂。
    3.ResNet
    • 引入了Residual Connection训练很深的网络,是否会导致有些层没有作用?
    实验表明:丢掉某些层对网络没有影响,即存在没有作用的层。
    问题1:没有作用的层带来的存储及计算是浪费的?
    问题2:没有作用的层如何量化?即有多少?
    • Block数量怎样的配置为最好?
    ResNet50中Block数量分别是(3, 4, 6, 3)
    ResNet101中Block数量分别是(3, 4, 23, 3)
    问题1:手动配置很难是最好的,那是否有更优的方案?
    4.DenseNet
    • 引入了Dense Connection每一层的输入为前面所有层输出特征图的堆叠,这些输入的特征图都全部利用上了吗?
    实验表明:存在某些层没有全部利用输入的所有特征图。
    问题1:没有利用上的特征图带来的计算是浪费的?
    问题2:没有利用上的特征图如何量化?即有多少?
    • Dense Connection的设计只能在Dense Block内吗?
    问题1:Block与Block之间的特征图没有得到很好复用?
    • Block数量怎样的配置为最好吗?
    DenseNet121中Block数量分别是(6, 12, 24, 16)
    DenseNet169中Block数量分别是(6, 12, 32, 32)
    问题1:手动配置很难是最好的,那是否有更优的方案?
    5.共存的问题
    • 简单/一般/复杂的任务都要经过这么复杂的网络吗?
    问题1:很明显,简单的任务几层的网络就可以做到,那是否有更优的方案?
    问题2:某个场景只有一些简单的任务,但由于内存等原因不能加载这么复杂的网络,是否可以通过卸载该网络某些能力,就可以使用?
    问题3:如果有更复杂的任务,该网络是否有通过扩展使它的能力更强?

    四、架构设计思考
    从AlexNet到ZFNet到VGGNet、GoogLeNet再到ResNet和DenseNet,网络越来越深、越来越宽、越来越复杂、性能也越来越高、解决反向传播时梯度消失的方法也越来越巧妙,但如果让我们来设计强大的网络我们会采用什么样的方法呢?当然最快最好的方法就是把各路大神的成果直接拿来使用:
    • 数据增广
    • BN
    • ReLU
    • 全连接层替换为简单的全局平均pooling
    • 引入Residual Connection
    • 引入Dense Connection
    • 引入Inception相似结构
    这里不完全采用GoogLeNet中的Inception结构,而是做了简化,如今网络在深度方面已不是问题,再加上已通过大量实验表明,多个小的卷积替换大的卷积是可行的,并且多个小的卷积增加了更多的非线性变换,使得网络对特征的学习能力更强,因此我认为网络在深度/宽度上堆叠如下简单结构可以达到各种神奇的效果:


    想降低参数或想升维/降维就可以在前面增加一个Conv 1X1如下图所示:


    还缺什么?
    现已经在网络深度、网络宽度都得到很好的解决,想一想还缺什么?
    也许你想到了,还缺 网络广度
    网络广度? 网络广度是什么?请继续看下面的内容。

    五、SmartNet
    SmartNet是什么?是一个新的网络架构,从网络深度、网络宽度、网络广度等方面来提高网络的性能,并来解决上面所提到的问题。
    1.SmartNet架构


    • 该架构怎么看上去很像DenseNet,但又多了许多连接?
    对,很像DenseNet,其实图中的Smart Block就跟Dense Block几乎差不多,只是把Connection连接也引用到Block与Block之间,使得特征图最大化复用。同时把Dense Connection改名为Smart Connection,把Dense Block改名为Smart Block。
    • 为什么把Dense Connection改名为Smart Connection?
    这里利用Smart Connection连接,来解决(“没有利用上的特征图带来的计算是浪费的?”)的问题,即通过Smart Connection连接表示没有利用上的特征图不参与计算,细心的读者可能已看到了箭头线是虚线。
    • 该架构中只看到第一层与后面的层有Smart Connection连接?
    其实每一个Smart Block的输入与前面所有的Smart Block的输出都有Smart Connection连接,图中只是省略了,画太多连线就不好看了(给自己找一个借口,其实就是画不好嘛!)。
    • 为什么把Dense Block改名为Smart Block?
    先不着急,下面会有详细的解释。
    • 架构中还有许多方向路标?DenseNet只有一个前进方向,SmartNet怎么有两个方向?
    嗯,细心的读者可能已发现,图中上面的行所画的特征图比下面的行所画的特征图多,即想表达的意思让该网格在图中向右方向,表示的是网络的深度越来越深,性能也越来越高,在图中向下方向,表示的是只要能达到目标就找最近的出口出来,如下图所示:


    这也是本文所指的网络广度(网络需要自己学习根据任务的难易程度自动选择最优的路径)。
    举例子可能更容易理解,架构图中第一行Smart Block学习4个特征图(这里4是虚似值,实际可能是8,16,32,64,128等),下面我们假设Smart Block学习的特征图数写在特征图右上角,并假设这个值为每个Smart Block运行时间单位数(可以这样理解,学习1个特征图需要1个时间单位,学习8个特征图就需要8个时间单位),如下图所示:


    2.特征图上三角矩阵


    什么?特征图上三角矩阵?之前只知道特征金字塔。
    嗯,FPN就是近些年其中一种特别火也特别有用的特征金字塔网络,但与这个特征图上三角矩阵可不是同一个东西。该特征图上三角矩阵是统一存储(网络学习出来的)特征图的地方并共享给后面所有Block来使用。

    3.网络中几个关键点
    • 最优的路径?
    网络需要自己学习选择最优的路径。(这个可以考虑使用Condition GAN来训练生成一些隐信息来控制或使用强化学习)。
    • Smart Connection?
    网络需要自己学习选择对Block有用的特征图。
    • Smart Block?
    为了更加智能,Block中的层数最强的网络应该是自己学习得到的,这也就是为什么把Dense Block改名为Smart Block的原因。
    • 每组Block输出的特征图尺寸不一样?
    可以采用不同大小的pooling或采用Fast/Faster RCNN中的ROI Pooling对不同大小的特征图映射到固定的大小。
    • 网络的参数?
    这个同DenseNet一样,由于每一层都包含之前所有层的输出信息,因此它不需要再重新学习多余的特征图,仅学习少量的几层特征图就可以了。
    • 多个出口?
    后一个出口是对前一个出口的增强。
    即input4>input3>input2>input1。
    • 增减衣服最简易操作原则?
    该网络符合我们从小都懂的一个增减衣服最简易操作原则,即天热时,减去最外层的衣服,天冷时,在最外层基础上增加一层衣服。
    这样的网络优势很多,网络可以按出口存储,按出口加载。
    对于一般的任务,只加载前几个出口相关的参数即可,甚至以后网络还有类似GC功能(垃圾回收器),动态加载与回收出口相关的参数来提高运行效率。
    • 如何训练?
    一个出口一个出口训练。
    题外话:众所都知目前的人工神经网络只学习W与b参数,可能还存在另外的参数需要学习,来使得我们的网络更强。

    4.总结
    为了我们的人工智能更加智能,最强的网络应该是在我们给定的目标下(如:内存、计算时间、正确率等),网络会自动初化化如上面所说的特征图上三角矩阵大小,甚至通过学习来调整特征图上三角矩阵的大小,并学习选择最优的路径。这个时候我们好像只需要给定几个超参数,其余的一切网络都会自己学习到。
    在这里我们把这最强的网络赋能给原始的CNN。
    有了这样的网络我们是不是不用关心AlexNet、VGGNet、GoogLeNet、ResNet、DenseNet、SmartNet、甚至是已在路上的XXXNet或未来的YYYNet,只需要关心的是我们使用CNN卷积神经网络就可以了。

    多管齐下、化繁为简、岂不美哉!!!

    是时候给出开头问题的答案了。
    最美的卷积神经网络是什么?

    我认为最美的卷积神经网络是:

    在CNN中我认为最美的卷积是:

    以上网络还有很多问题值得去思考,这里只是抛出想法,本人在这方面资历尚浅,可能有许多不准确或不正确的地方,欢迎指正及提出您们宝贵的意见与建议。

    此文章是原创,若是转载,请标明出处。

    我知乎上连接 https://zhuanlan.zhihu.com/p/39120334

    展开全文
  • LeNet5LeNet5诞生于1994年,是最早的卷积神经网络之一, 并且推动了深度学习领域的发展。自从1988年开始,在许多次成功的迭代后,这项由Yann LeCun完成的开拓性成果被命名为LeNet5(参见:Gradient-Based Learning ...
  • 从基本组件到结构创新,67页论文解读深度卷积神经网络架构.pdf
  • 本文将系统地整理目前出现的一些经典的卷积神经网络架构,包括最早的LeNet-5网络结构,到最新的CSPNet(跨阶段局部网络),并对比其在ImageNet数据集上的分类效果。 LeNet-5 LeNet-5最早由Lecun在1998年提出(LeNet-...
  • 对用于图像识别和分类的卷积神经网络架构作了深度揭秘
  • 但是,关于如何才能设计出最优的卷积神经网络架构这个问题仍在处于探索阶段。 其中一大部分原因是因为当前那些取得成功的神经网络的架构设计原理仍然是一个黑盒。虽然我们有着关于改进神经网络表现的丰富心得,但...
  • 经过一个pooling后,某些信息会丢失,为了做出某些补偿,我需要提取出更多的特征(每一个卷积核就表示一个特征) (5×5-2×3×3)/25=0.28 ...
  • 近年来,卷积神经网络在图像分类领域取得了巨大进展,主要表现在ILSVRC竞赛中优胜冠军从经典的机器学习算法转向深度学习算法,尤其是卷积神经网络结构。在卷积神经网络发展的历史过程中,ILSVRC竞赛功不可没,从2012...
  • FixRes是一种简单方法用于修复训练 - 测试分辨率差异,可以提高任何卷积神经网络架构的性能。
  • 图像处理和卷积神经网络架构

    千次阅读 2017-10-14 14:33:15
    近日,Dishashree Gupta 在 Analyticsvidhya 上发表了一篇题为《Architecture of Convolutional Neural Networks (CNNs) demystified》的文章,对用于图像识别和分类的卷积神经网络架构作了深度揭秘;...
  • 本文档详细介绍了卷积神经网络的工作机理,然后介绍了常用的AlexNet、VGG、GoogLet、ResNet网络架构以及论文中介绍的一些核心trick,非常值得深度学习爱好者作为入门材料来研究。
  • 图像识别和卷积神经网络架构原理

    千次阅读 2017-10-24 16:21:04
    我尝试去理解神经网络及其变体,但依然感到困难。 接着有一天,我决定一步一步,从基础开始。我把技术操作的步骤分解开来,并手动执行这些步骤(和计算),直到我理解它们如何工作。这相当费时,且令人紧张...
  •  卷积神经网络在当年也算是异军突起,一出现便将各个天梯榜屠的面目全非,今天我们就来聊一下有哪些常见的卷积神经网络结构。至于什么是卷积神经网络,你可以参考知乎大神的回答,能否对卷积神经网络工作原理做一个...
  • 该存储库进一步体现了我对一些著名的复杂卷积神经网络架构的实现。 这些模型是使用Tensorflow的Keras功能API从零开始开发的,这是一种创建比tf.keras.Sequential API更灵活的模型的方法。 功能性API可以处理具有非...
  • 摘要:本文提出一种基于局部特征保留的图卷积网络架构,与最新的对比算法相比,该方法在多个数据集上的图分类性能得到大幅度提升,泛化性能也得到了改善。
  • 卷积神经网络超详细介绍

    万次阅读 多人点赞 2018-09-19 10:16:59
    1、卷积神经网络的概念 2、 发展过程 3、如何利用CNN实现图像识别的任务 4、CNN的特征 5、CNN的求解 6、卷积神经网络注意事项 7、CNN发展综合介绍 8、LeNet-5结构分析 9、AlexNet 10、ZFNet 10.1 意义 ...
  • 卷积神经网络在图像识别方面应用广泛,在实际应用在中,识别的准确率不仅仅与数据量有关,还与模型的架构有很大的关联。从首个成功应用于数字识别的卷积神经网络LeNet,到卷积神经网络崛起点AlexNet,以及陆陆续续的...
  • 基于FPGA动态重构的卷积神经网络硬件架构设计.pdf
  • 近期一篇CNN综述文章《A Survey of the Recent Architectures of Deep Convolutional Neural Networks 》发布,受到了大家的关注,今天作者对论文中的内容做了中文的解读,帮助大家全面了解CNN架构进展。论文地址:...
  • [4] 卷积神经网络CNN架构分析 - LeNet

    千次阅读 2016-10-19 00:34:22
    背景之前在网上搜索了好多好多关于CNN...于是在这里记录下所学到的知识,关于CNN 卷积神经网络,需要总结深入的知识有很多: 人工神经网络 ANN 卷积神经网络 CNN 卷积神经网络 CNN - BP算法 卷积神经网络 CNN - caffe
  • 面向卷积神经网络的FPGA加速器架构设计
  • 发明名称:一种基于FPGA的卷积神经网络硬件加速架构 摘要 本发明公开一种基于FPGA的卷积神经网络硬件加速架构,包括:通用AXI4总线接口;用于缓存输入特征图,输出特征图和权重的缓存区;用于引导运算结果缓存的...
  • 详解CNN卷积神经网络

    万次阅读 多人点赞 2018-01-11 09:55:14
    详解卷积神经网络(CNN) 详解卷积神经网络CNN概揽Layers used to build ConvNets 卷积层Convolutional layer池化层...卷积神经网络架构 Layer PatternsLayer Sizing PatternsCase Studies 参考 卷

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,044
精华内容 14,817
关键字:

卷积神经网架构