精华内容
下载资源
问答
  • 2019-02-18 17:50:39

    转于:《入门PyTorch》

    卷积层是卷积神经网络的核心, 大多数计算都是在卷积层中进行的。

    1 卷积层


    1.1 概述


    首先介绍卷积神经网络的参数。 这些参数是由一些可学习的滤波器集合构成的, 每个滤波器在空间上( 宽度和高度) 都比较小, 但是深度和输入数据的深度保持一致。 举例来说, 卷积神经网络的第一层卷积一个典型的滤波器的尺寸可以是5×5×3( 宽和高都是5) , 或者是3×3×3( 宽和高都是3) , 这里的宽度和高度可以任意定义, 但是深度必须是3, 因为深度要和输入一致, 而输入的图片是3通道的。 在前向传播的时候, 让每个滤波器都在输入数据的宽度和高度上滑动( 卷积) , 然后计算整个滤波器和输入数据任意一处的内积。

    当滤波器沿着输入数据的宽度和高度滑动时, 会生成一个二维的激活图, 激活图上的每个空间位置表示了原图片对于该滤波器的反应。 直观来看, 网络会让滤波器学习到当它看到某些类型的视觉特征的时候就激活, 具体的视觉特征可以是边界、 颜色、 轮廓、 甚至可以是网络更高层上的蜂巢状或者车轮状图案。

    在每个卷积层上, 会有一整个集合的滤波器, 比如20个, 这样就会形成20张二维的、 不同的激活图, 将这些激活图在深度方向上层叠起来就形成了卷积层的输出。

    如果用大脑和生物神经元做比喻, 那么输出的3D数据中的每个数据都可以看成是神经元的一个输出, 而该神经元只是观察输入数据中的一种特征, 并且和空间上左右两边的所有神经元共享参数( 因为这些输出都是使用同一个滤波器得到的结果) 。 下面介绍卷积神经网络中的神经元连接, 它们在空间中的排列, 以及它们参数共享的模式。

     

    1.2 局部连接


    在处理图像这样高维度输入的时候, 让每个神经元都与它那一层中的所有神经元进行全连接是不现实的。 相反, 让每个神经元只与输入数据的一个局部区域连接是可行的, 为什么可以这样做呢? 其实这是因为图片特征的局部性, 所以只需要通过局部就能提取出相应的特征。

    与神经元连接的空间大小叫做神经元的感受野( receptive field) , 它的大小是一个人为设置的超参数, 这其实就是滤波器的宽和高。 在深度方向上, 其大小总是和输入的深度相等。 最后强调一下, 对待空间维度( 宽和高) 和深度维度是不同的, 连接在空间上是局部的, 但是在深度上总是和输入的数据深度保持一致。

    图4.6形象地展示了感受野在空间和深度上的大小, 左边表示输入的数据, 中间是感受野, 右边每个小圆点表示一个神经元。 下面举一个具体的例子来说明一下。 比如输入的数据尺寸为32×32×3, 如果感受野( 滤波器尺寸) 是5×5, 卷积层中每个神经元会有输入数据中5×5×3区域的权重, 一共5×5×3=75个权重。 这里再次强调感受野深度的大小必须是3, 和输入数据保持一致。 比如输入数据体尺寸是16×16×20, 感受野是3×3, 卷积层中每个神经元和输入数据体之间就有3×3×20=180个连接, 这里的深度必须是20, 和输入数据一致。

    1.3 空间排列


    前面介绍了每个神经元只需要与输入数据的局部区域相连接, 但是没有介绍卷积层中神经元的数量和它们的排列方式、 输出深度、 滑动步长, 以及边界填充控制着卷积层的空间排布。


    首先, 卷积层的输出深度是一个超参数, 它与使用的滤波器数量一致, 每种滤波器所做的就是在输入数据中寻找一种特征。 比如说输入一张原始图片, 卷积层输出的深度是20, 这说明有20个滤波器对数据进行处理, 每种滤波器寻找一种特征进行激活。


    其次, 在滑动滤波器的时候, 必须指定步长。 比如步长为1, 说明滤波器每次移动1个像素点。 当步长为2的时候, 滤波器会滑动2个像素点。 滑动的操作会使得输出的数据在空间上变得更小。

    最后介绍边界填充, 可以将输入数据用0在边界进行填充, 这里将0填充的尺寸作为一个超参数, 有一个好处就是, 可以控制输出数据在空间上的尺寸, 最常用来保证输入和输出在空间上尺寸一致。输出的尺寸到底是多少呢? 其实可以用一个公式来计算, 就是\frac{W-F+2P}{S}+1, 其中W 表示输入的数据大小, F 表示卷积层中神经元的感受野尺寸, S表示步长, P 表示边界填充0的数量。 比如输入是7×7, 滤波器是3×3, 步长是1, 填充的数量是0, 那么根据公式, 就能得到 , 即输出的空间大小是5×5, 如果步长是2,那么 , 输出的空间大小就是3×3。 可以用图4.7所示的这个一维的例子来具体说明。


    右上角表示神经网络的权重, 其中输入数据的大小为5, 感受野的大小为3; 左边表示滑动步长为1, 且填充也为1; 右边表示滑动步长为2, 填充为1。

    1.4 零填充的使用


    从上面的例子中, 我们看到输入的维度是5, 输出的维度也是5。之所以如此, 是因为感受野是3, 并且使用了1的零填充。 如果不使用零填充, 那么输出数据的维度也就只有3, 因为\frac{5-3+2*0}{1}+1=3 。 一般来说, 当步长S=1时, 零填充的值为P=P=\frac{F-1}{2} , 这样就能够保证输入的数据和输出的数据具有相同的空间尺寸。


    1.5 步长的限制


    通过上面的公式我们知道步长的选择是有所限制的, 举例来说,当输入尺寸W=10的时候, 如果不使用零填充, 即P=0, 滤波器尺寸F=3, 这样步长S=2就行不通, 因为\frac{10-3+0}{2}+1=4.5 , 结果不是一个整数, 这就说明神经元不能整齐对称地滑过输入数据体, 这样的超参数设置是无效的, 使用PyTorch的时候就会报错, 可以使用零填充让设置变得合理。 在后面卷积神经网络的结构设计中, 需要合理地设计网络的尺寸, 使得所有维度都能够正常工作, 这件事并没有看上去那么容易。


    1.6 参数共享


    在卷积层使用参数共享可以有效地减少参数的个数, 这样之所以能够行得通, 是因为之前介绍的特征的相同性, 也就是说相同的滤波器能够检测出不同位置的相同特征。 比如说一个卷积层的输出是20×20×32, 那么其中神经元的个数就是20×20×32=12800, 如果窗口大小是3×3, 而输入的数据体深度是10, 那么每个神经元就有3×3×10=900个参数, 这样合起来就有12800×900=11520000个参数,单单一层卷积就有这么多参数, 这样运算速度显然是特别慢的。

    根据之前介绍的, 一个滤波器检测出一个空间位置( x1, y1) 处的特征, 那么也能够有效检测出( x2, y2) 位置的特征, 所以就可以用相同的滤波器来检测相同的特征, 基于这个假设, 我们就能够有效减少参数个数。 比如上面这个例子, 一共有32个滤波器, 这使得输出体的厚度是32, 每个滤波器的参数为3×3×10=900, 总共的参数就有32×900=28800个, 极大减少了参数的个数。

    由参数共享我们知道输出体数据在深度切片上所有的权重都使用同一个权重向量, 那么卷积层在向前传播的过程中, 每个深度切片都可以看成是神经元的权重对输入数据体做卷积, 这也就是为什么要把这些3D的权重集合称为滤波器, 或者卷积核。

    需要注意的是, 参数共享之所以能够有效, 是因为一个特征在不同位置的表现是相同的, 比如一个滤波器检测到了水平边界这个特征, 那么这个特征具有平移不变性, 所以在其他位置也能够检测出
    来。 但是有时候这样的假设可能是没有意义的, 特别是当卷积神经网络的输入图像呈现的是一些明确的中心结构的时候, 希望在图片的不同位置学习到不同的特征。 一个具体的例子就是人脸识别, 人脸一般位于图片的中心, 我们希望不同的特征能够在不同的位置被学习到,比如眼睛特征或者头发特征, 正是由于这些特征在不同的地方, 才能够对人脸进行识别。

    2 池化层

    上一部分介绍完卷积神经网络中最核心的内容——卷积层, 下面来介绍一下第二种层结构——池化层。


    通常会在卷积层之间周期性插入一个池化层, 其作用是逐渐降低数据体的空间尺寸, 这样就能够减少网络中参数的数量, 减少计算资源耗费, 同时也能够有效地控制过拟合。


    下面先来介绍到底什么是池化层。 池化层和卷积层一样也有一个空间窗口, 通常采用的是取这些窗口中的最大值作为输出结果,然后不断滑动窗口, 对输入数据体每一个深度切片单独处理, 减少它的空间尺寸, 如图4.8所示。

    从图4.8能够看出池化层能够有效降低数据体空间的大小, 图4.9形象地说明了窗口大小是2, 滑动步长是2的最大值池化是如何计算
    的: 每次都从2×2的窗口中选择最大的数值, 同时每次滑动2个步长进入新的窗口。

    池化层之所以有效, 是因为之前介绍的图片特征具有不变性, 也就是通过下采样不会丢失图片拥有的特征, 由于这种特性, 我们可以将图片缩小再进行卷积处理, 这样能够大大降低卷积运算的时间。最常用的池化层形式是尺寸为2×2的窗口, 滑动步长为2, 对图像进行下采样, 将其中75%的激活信息都丢掉, 选择其中最大的保留下来, 这其实是因为我们希望能够更加激活里面的数值大的特征, 去除一些噪声信息。


    池化层有一些和卷积层类似的性质。
    ( 1) 输入数据体的尺寸是W1 ×H1 ×D1。
    ( 2) 有两个需要设置的超参数, 空间大小F 和滑动步长S。
    ( 3) 输出数据体的尺寸是W2×H2×D2, 其中W2=\frac{W1-F}{S}+1,H2=\frac{H1-F}{S}+1,D2=D1
    ( 4) 对输入进行固定函数的计算, 没有参数引入。
    ( 5) 池化层中很少引入零填充。
    在实际中, 有两种方式: 一种是F=3, S=2, 这种池化有重叠;另外更常用的一种是F=2, S=2, 一般来说应该谨慎使用比较大的池化窗口, 以免对网络有破坏性。

    除了最大值池化之外, 还有一些其他的池化函数, 比如平均池化, 或者L2范数池化。 在实际中证明, 在卷积层之间引入最大池化的效果是最好的, 而平均池化一般放在卷积神经网络的最后一层。

    3 全连接层

    全连接层 每个神经元与前一层所有的神经元全部连接, 而卷积神经网络只和输入数据中的一个局部区域连接, 并且输出的神经元每个深度切片共享参数。一般经过了一系列的卷积层和池化层之后, 提取出图片的特征图, 比如说特征图的大小是3×3×512, 这个时候, 将特征图中的所有神经元变成全连接层的样子, 直观上也就是将一个3D的立方体重新排列, 变成一个全连接层, 里面有3×3×512=4608个神经元, 再经过几个隐藏层, 最后输出结果。在这个过程中为了防止过拟合会引入Dropout。 最近的研究表明, 在进入全连接层之前, 使用全局平均池化能够有效地降低过拟合。

    更多相关内容
  • 卷积神经网络详解 - 卷积层逻辑篇

    千次阅读 2020-09-02 09:58:01
    对于图像识别来说,卷积神经网络的效果要好于全连接神经网络。我在首次接触卷积时,隐约记得在大一高数课程中曾经提及,但具体已经无法名状。何谓卷积,知乎的这个回答,"如何通俗易懂地解释卷积",解释得很详细,摘...

    卷积计算概述

    对于图像识别来说,卷积神经网络的效果要好于全连接神经网络。我在首次接触卷积时,隐约记得在大一高数课程中曾经提及,但具体已经无法名状。何谓卷积,知乎的这个回答,"如何通俗易懂地解释卷积" ,解释得很详细,摘出部分如下,以方便阅读。

    "从数学上看,卷积是一种运算。我们称(f*g)(n)为f,g的卷积,其连续的定义为

    (f\ast g)(n) = \int_{-\infty }^{\infty }f(\tau )g(n-\tau )d\tau

    其离散的定义为

    (f\ast g)(n) = \sum_{\tau =-\infty }^{\infty }f(\tau )g(n-\tau )"

    我对于以上定义的理解为,存在两个函数f(x)和g(x), 其卷积运算(f * g)(n)是指,对f(x)g(y)这样的乘积进行求和(连续为积分,离散为求和),其中x与y需要满足条件:只能落在二维坐标系形如y=n-x的直线上,这是一条斜率-1,与y轴、x轴交点均为n的直线。更加形象具体的解释,上面知乎相关的问答有很多不错的解释。

    在卷积神经网络中,卷积运算是对两个矩阵进行的。如下图,左侧为输入矩阵M,中间为过滤器F(也叫卷积核),F以一定步长在M上进行移动,进行点积运算,得到右侧的输出矩阵O。这个就是卷积神经网络中卷积层最基础的运算。在实际的操作中,还存在一些额外的操作,下面会详细叙述。

    该图出自:Convolutional Neural Networks - Basics

    输入层

    在使用卷积神经网络进行图像识别时,输入为进行过转换的图片数据,一张宽为w,高为h,深度为d的图片,表示为h*w*d。这里,深度为图像存储每个像素所用的位数,比如彩色图像,其一个像素有RGB三个分量,其深度为3。

    从数学的角度来看,h*w*d的图片即为d个h*w的矩阵。例如6x16x3的图片,其对应3个6x16的矩阵。在大部分运用中,输入图片的大小h和w,一般是相等的。

    过滤器(卷积核)

    在卷积运算时,会给定一个大小为F*F的方阵,称为过滤器,又叫做卷积核,该矩阵的大小又称为感受野。过滤器的深度d和输入层的深度d维持一致,因此可以得到大小为F*F*d的过滤器,从数学的角度出发,其为d个F*F的矩阵。在实际的操作中,不同的模型会确定不同数量的过滤器,其个数记为K,每一个K包含d个F*F的矩阵,并且计算生成一个输出矩阵。

    一定大小的输入和一定大小的过滤器,再加上一些额外参数,会生成确定大小的输出矩阵。以下先介绍这些参数。

    1)Padding。在进行卷积运算时,输入矩阵的边缘会比矩阵内部的元素计算次数少,且输出矩阵的大小会在卷积运算中相比较于输入变小。因此,可在输入矩阵的四周补零,称为padding,其大小为P。比如当P=1时,原5*5的矩阵如下,蓝色框中为原矩阵,周围使用0作为padding。

    2)进行卷积运算时,过滤器在输入矩阵上移动,进行点积运算。移动的步长stride,记为S。当S=2时,过滤器每次移动2个单元。如下图,红色框为第一步计算,蓝色框为S=2时的第二步运算。

    有了以上两个参数P和S,再加上参数W(输入矩阵的大小),过滤器的大小F,输出矩阵的大小为

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

    对于5x5的输入矩阵,过滤器大小F=3,P=1,S=1,其输出矩阵的大小为(5-3+2)/1+1=5。可见,在步长S为1,且进行了P=1的padding后,其输出矩阵的大小和输入一致。

    现在考虑当输入有多个深度时的情况。当输入为5x5x3,P=1,并且有K个过滤器时,每一个过滤器都为3x3x3。这里,我们把输入的3个7x7矩阵(5x5进行padding后得到7x7)命名为M1,M2,M3,第k个过滤器(0<k<K)的3个3x3矩阵命名为F1,F2,F3,输出的第k个矩阵(0<k<K)命名为Ok。卷积运算中,输入矩阵M1和过滤器F1,M2与F2,M3与F3进行卷积运算。卷积运算详细过程如下

    1. 在M1中,从最左上角,取感受野大小F*F的子矩阵,与F1进行点积运算,即对应位置元素相乘,再求和得到结果O11.

    2. M2和F2进行同样的运算,得到结果O22;M3和F3得到O33.

    3. O11+O22+O33相加,再加上偏移量b0,得到输出矩阵Ok左上角的第一个元素.

    4. 按照步长S,从M1,M2,M3中获取另外一个感受野大小的区域,对应F1,F2,F3进行步骤1~3的计算,最终得到完整的输出矩阵Ok

    5. 更换过滤器k+1,重复1~4的运算,得到K个输出矩阵。

    总结以上过程,输出矩阵的每一个元素,是由对应过滤器不同深度的矩阵,作用于相应深度输入矩阵的不同位置,进行点积运算,再加上偏移量bias所得。

    在斯坦福的卷积神经网络课程有,有一个很典型的例子如下。此处分析两个步骤,完整的例子见以下链接。

    http://cs231n.github.io/convolutional-networks/

    在这个例子中,输入矩阵为5*5*3,即W=5,填充P为1,过滤器有K=2个,每个过滤器的大小为3*3*3,即F=3,同时设定计算步长S=2。这样可得到输出中单个矩阵的大小为(5-3+2*1)/2+1=3,由于K=2,所以输出的3*3矩阵有2个。下面为具体的计算过程

    1. 首先从输入矩阵的最左边开始取得3*3的感受野,每一个深度的输入矩阵对应每一个深度的过滤器,进行点积运算,然后加上偏移Bias,得到第一个输出矩阵的第一个元素。详细过程为

    输入矩阵1:r1 = 0*0+0*1+0*1+0*(-1)+1*0+0*0+0*1+0*0+1*0=0

    输入矩阵2:r2 = 0*0+0*0+0*0+0*1+0*0+0*1+0*0+2*0+0*0 = 0

    输入矩阵3:r3 = 0*(-1)+0*(-1)+0*0+0*0+0*0+2*(-1)+0*(-1)+0*0+2*0 = -2

    输出矩阵元素(绿框中元素)O11 = r1+r2+r3+b0 = -1

    2) 然后将感受野在3个输入矩阵上同时移动2个步长,如蓝框所示,重复1)中描述的运算,得到O12=-1,计算过程此处不再赘述。

    3)将感受野在输入矩阵中依次移动,当完成第一个输出矩阵的计算后,使用第二个过滤器再重复一次,得到第二个输出矩阵。卷积计算完成。

    在上面的计算中,每一个深度上的输入矩阵,其每一个步长的计算都是用同一个过滤器矩阵,这个现象被称为参数共享(parameter sharing)。其实这是一种简化,在未简化的情况下,同一深度矩阵上每一个步长的卷积计算,都需要使用不同的过滤器,这样会造成神经网络中参数过多,所以在实际操作中,会采取如上所述的参数共享策略,减少参数个数。

    *********参数共享*****

    参考地址:https://www.cnblogs.com/zf-blog/p/6075286.html

     卷积层还有一个特性就是“权值共享”原则。如下图:

    如没有这个原则,则特征图由10个32*32*1的特征图组成,即每个特征图上有1024个神经元,每个神经元对应输入图像上一块5*5*3的区域,即一个神经元和输入图像的这块区域有75个连接,即75个权值参数,则共有75*1024*10=768000个权值参数,这是非常复杂的,因此卷积神经网络引入“权值”共享原则,即一个特征图上每个神经元对应的75个权值参数被每个神经元共享,这样则只需75*10=750个权值参数,而每个特征图的阈值也共享,即需要10个阈值,则总共需要750+10=760个参数。

    池化层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征,如下:

    池化操作一般有两种,一种是Avy Pooling,一种是max Pooling,如下:

    同样地采用一个2*2的filter,max pooling是在每一个区域中寻找最大值,这里的stride=2,最终在原特征图中提取主要特征得到右图。

    (Avy pooling现在不怎么用了(其实就是平均池化层),方法是对每一个2*2的区域元素求和,再除以4,得到主要特征),而一般的filter取2*2,最大取3*3,stride取2,压缩为原来的1/4.

    注意:这里的pooling操作是特征图缩小,有可能影响网络的准确度,因此可以通过增加特征图的深度来弥补(这里的深度变为原来的2倍)。

    补充:

    (1)对于多通道图像做1*1卷积,其实就是将输入图像的每个通道乘以系数后加在一起,即相当于将原图中本来各个独立的通道“联通”在了一起;

     (2)权值共享时,只是在每一个filter上的每一个channel中是共享的;

     

    参考文献:

    1. Convolutional Neural Networks (CNNs / ConvNets) 

    2. Convolutional Neural Networks - Basics

    3. 如何通俗易懂地解释卷积

    展开全文
  • 深入学习卷积神经网络卷积层和池化层的意义

    万次阅读 多人点赞 2018-09-22 22:11:09
    为什么要使用卷积呢?  在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成...这就是为什么在过去卷积神经网络一直被SVM等完虐的原因。 ...

     

    为什么要使用卷积呢?

      在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用,特征有时多了(需要PCA降维),特征有时少了(容易过拟合),有时选择的特征根本就不起作用(真正起作用的特征在浩瀚的未知里面)。这就是为什么在过去卷积神经网络一直被SVM等完虐的原因。

      如果,特征都是从图像中提取的,那如果把整副图像作为特征来训练神经网络不就行了,那肯定不会有任何信息丢失!那先不说一幅图像有多少冗余信息,单说着信息量就超级多。。。假如有一幅1000*1000的图像,如果把整幅图像作为向量,则向量的长度为1000000(10^6)。在假如隐含层神经元的个数和输入一样,也是1000000;那么,输入层到隐含层的参数数据量有10^12,妈呀,什么样的机器能训练这样的网络呢。所以,我们还得降低维数,同时得以整幅图像为输入(人类实在找不到好的特征了)。于是,牛逼的卷积来了

    CNN卷积神经网络层级结构

     

    CNN网络一共有5个层级结构:

      • 输入层
      • 卷积层
      • 激活层
      • 池化层
      • 全连接FC层

        =========第1部分=======以下按上面5部分简单讲解==================================

    1 输入层

    与传统神经网络/机器学习一样,模型需要输入的进行预处理操作,常见的输入层中预处理方式有

    • 去均值
    • 归一化
    • PCA/SVD降维等

    2  卷积层

           局部感知:人的大脑识别图片的过程中,并不是一下子整张图同时识别,而是对于图片中的每一个特征首先局部感知,然后更高层次对局部进行综合操作,从而得到全局信息。 (后面详解)

    输入图片为彩图(rgb三通道),经过四层卷积核卷积运算,每层卷积核都有自己的biase值。每层卷积核先单独对r,g,b通道进行计算,然后再累加  各自计算的r,g,b通道  的值,对应位置处合并为最终一层的卷积层。所以四层卷积层最后得到四层卷积后的层。如下图公式显示:

     

    3  激励(活)层

      所谓激励,实际上是对卷积层的输出结果做一次非线性映射。 
      如果不用激励函数(其实就相当于激励函数是f(x)=x),这种情况下,每一层的输出都是上一层输入的线性函数。容易得出,无论有多少神经网络层,输出都是输入的线性组合,与没有隐层的效果是一样的,这就是最原始的感知机了。 
    常用的激励函数有:

      • Sigmoid函数
      • Tanh函数
      • ReLU
      • Leaky ReLU
      • ELU
      • Maxout

      中间激励层建议:首先ReLU,因为迭代速度快,但是有可能效果不加。如果ReLU失效的情况下,考虑使用Leaky ReLU或者Maxout,此时一般情况都可以解决。Tanh函数在文本和音频处理有比较好的效果。分类网络的最后一层激活函数一般用(即预测函数):softmax函数,或者结合其他函数

    4  池化层

      池化(Pooling):也称为欠采样下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。主要有:

      • Max Pooling:最大池化
      • Average Pooling:平均池化 



        通过池化层,使得原本4*4的特征图压缩成了2*2,从而降低了特征维度。

      虽然人不太容易分辨出池化后的特征图,但是没关系,机器还是可以识别的。

    5  输出层(全连接层)

      经过前面若干次卷积+激励+池化后,终于来到了输出层,模型会将学到的一个高质量的特征图片全连接层。其实在全连接层之前,如果神经元数目过大,学习能力强,有可能出现过拟合。因此,可以引入dropout操作,来随机删除神经网络中的部分神经元,正则化等来解决此问题。还可以进行局部归一化(LRN)、数据增强,交叉验证,提前终止训练等操作,来增加鲁棒性。 
      当来到了全连接层之后,可以理解为一个简单的多分类神经网络(如:BP神经网络),通过softmax函数得到最终的输出。整个模型训练完毕。 
      两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的: 

     

    =========================第2部分===========================================

    CNN卷积神经网络卷积层和池化层详解

      卷积神经网络(Convolutional Neural Network,简称CNN),是一种前馈神经网络,人工神经元可以响应周围单元,可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 
           卷积神经网络是受到生物思考方式启发的MLPs(多层感知器),它有着不同的类别层次,并且各层的工作方式和作用也不同。这里提供一个较好的CNN教程(http://cs231n.github.io/convolutional-networks/)。文章中详细介绍了CNN的计算方式和数据的流动过程。

           卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。

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

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

    (1)卷积神经网络的历史

           1962年Hubel和Wiesel通过对猫视觉皮层细胞的研究,提出了感受野(receptive field)的概念,1984年日本学者Fukushima基于感受野概念提出的神经认知机(neocognitron)可以看作是卷积神经网络的第一个实现网络,也是感受野概念在人工神经网络领域的首次应用。神经认知机将一个视觉模式分解成许多子模式(特征),然后进入分层递阶式相连的特征平面进行处理,它试图将视觉系统模型化,使其能够在即使物体有位移或轻微变形的时候,也能完成识别。

           通常神经认知机包含两类神经元,即承担特征抽取的S-元和抗变形的C-元。S-元中涉及两个重要参数,即感受野与阈值参数,前者确定输入连接的数目,后者则控制对特征子模式的反应程度。许多学者一直致力于提高神经认知机的性能的研究:在传统的神经认知机中,每个S-元的感光区中由C-元带来的视觉模糊量呈正态分布。如果感光区的边缘所产生的模糊效果要比中央来得大,S-元将会接受这种非正态模糊所导致的更大的变形容忍性。我们希望得到的是,训练模式与变形刺激模式在感受野的边缘与其中心所产生的效果之间的差异变得越来越大。为了有效地形成这种非正态模糊,Fukushima提出了带双C-元层的改进型神经认知机。

           Van Ooyen和Niehuis为提高神经认知机的区别能力引入了一个新的参数。事实上,该参数作为一种抑制信号,抑制了神经元对重复激励特征的激励。多数神经网络在权值中记忆训练信息。根据Hebb学习规则,某种特征训练的次数越多,在以后的识别过程中就越容易被检测。也有学者将进化计算理论与神经认知机结合,通过减弱对重复性激励特征的训练学习,而使得网络注意那些不同的特征以助于提高区分能力。上述都是神经认知机的发展过程,而卷积神经网络可看作是神经认知机的推广形式,神经认知机是卷积神经网络的一种特例。

    (2)卷积神经网络的网络结构

     先介绍卷积层遇到的几个名词:

           • 深度/depth(解释见下图)
      • 步长/stride (窗口一次滑动的长度)
      • 填充值/zero-padding

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



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

          卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。

      如图所示,CNN网络工作时,会伴随着卷积并且不断转换着这些卷积。

           图1:卷积神经网络的概念示范

      输入图像通过和三个可训练的滤波器和可加偏置进行卷积,滤波过程如图一,卷积后在C1层产生三个特征映射图,然后特征映射图中每组的四个像素再进行求和,加权值,加偏置。通过一个Sigmoid函数得到三个S2层的特征映射图。这些映射图再进过滤波得到C3层。这个层级结构再和S2一样产生S4。最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。

           一般地,C层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S层是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。

           此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。

    (3)关于参数减少与权值共享

          上面聊到,好像CNN一个厉害的地方就在于通过感受野和权值共享减少了神经网络需要训练的参数的个数。那究竟是啥的呢?

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

    局部感知

           下图左:如果我们有1000x1000像素的图像,有1百万个隐层神经元,那么他们全连接的话(每个隐层神经元都连接图像的每一个像素点),就有1000x1000x1000000=10^12个连接,也就是10^12个权值参数。然而图像的空间联系是局部的,就像人是通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。这样,我们就可以减少连接的数目,也就是减少神经网络需要训练的权值参数的个数了。如下图右:假如局部感受野是10x10,隐层每个感受野只需要和这10x10的局部图像相连接,所以1百万个隐层神经元就只有一亿个连接,即10^8个参数。比原来减少了四个0(数量级),这样训练起来就没那么费力了,但还是感觉很多的啊,那还有啥办法没?

     

           我们知道,隐含层的每一个神经元都连接10x10个图像区域,也就是说每一个神经元存在10x10=100个连接权值参数。那如果我们每个神经元这100个参数是相同的呢?也就是说每个神经元用的是同一个卷积核去卷积图像。这样我们就只有多少个参数??只有100个参数啊!!!亲!不管你隐层的神经元个数有多少,两层间的连接我只有100个参数啊!亲!这就是权值共享啊!亲!这就是卷积神经网络的主打卖点啊!亲!(有点烦了,呵呵)也许你会问,这样做靠谱吗?为什么可行呢?这个……共同学习。

           好了,你就会想,这样提取特征也忒不靠谱吧,这样你只提取了一种特征啊?对了,真聪明,我们需要提取多种特征对不?假如一种滤波器(卷积核),也就是一种卷积核就是提出图像的一种特征,例如某个方向的边缘。那么我们需要提取不同的特征,怎么办,加多几种滤波器不就行了吗?对了。所以假设我们加到100种滤波器,每种滤波器的参数不一样,表示它提取输入图像的不同特征,例如不同的边缘。这样每种滤波器去卷积图像就得到对图像的不同特征的放映,我们称之为Feature Map。所以100种卷积核就有100个Feature Map。这100个Feature Map就组成了一层神经元。到这个时候明了了吧。我们这一层有多少个参数了?100种卷积核x每种卷积核共享100个参数=100x100=10K,也就是1万个参数。才1万个参数啊!亲!(又来了,受不了了!)见下图右:不同的颜色表达不同的滤波器

     

           嘿哟,遗漏一个问题了。刚才说隐层的参数个数和隐层的神经元个数无关,只和滤波器的大小和滤波器种类的多少有关。那么隐层的神经元个数怎么确定呢?它和原图像,也就是输入的大小(神经元个数)、滤波器的大小和滤波器在图像中的滑动步长都有关!例如,我的图像是1000x1000像素,而滤波器大小是10x10,假设滤波器没有重叠,也就是步长为10,这样隐层的神经元个数就是(1000x1000 )/ (10x10)=100x100个神经元了,假设步长是8,也就是卷积核会重叠两个像素,那么……我就不算了,思想懂了就好。注意了,这只是一种滤波器,也就是一个Feature Map的神经元个数哦,如果100个Feature Map就是100倍了。由此可见,图像越大,神经元个数和需要训练的权值参数个数的贫富差距就越大。

     

          需要注意的一点是,上面的讨论都没有考虑每个神经元的偏置部分。所以权值个数需要加1 。这个也是同一种滤波器共享的。

          总之,卷积网络的核心思想是将:局部感受野、权值共享(或者权值复制)以及时间或空间亚采样这三种结构思想结合起来获得了某种程度的位移、尺度、形变不变性。

    (4)一个典型的例子说明

           一种典型的用来识别数字的卷积网络是LeNet-5(效果和paper等见这)。当年美国大多数银行就是用它来识别支票上面的手写数字的。能够达到这种商用的地步,它的准确性可想而知。毕竟目前学术界和工业界的结合是最受争议的。

          那下面咱们也用这个例子来说明下。

            LeNet-5共有7层,不包含输入,每层都包含可训练参数(连接权重)。输入图像为32*32大小。这要比Mnist数据库(一个公认的手写数据库)中最大的字母还大。这样做的原因是希望潜在的明显特征如笔画断电或角点能够出现在最高层特征监测子感受野的中心。

            我们先要明确一点:每个层有多个Feature Map,每个Feature Map通过一种卷积滤波器提取输入的一种特征,然后每个Feature Map有多个神经元。

            C1层是一个卷积层(为什么是卷积?卷积运算一个重要的特点就是,通过卷积运算,可以使原信号特征增强,并且降低噪音),由6个特征图Feature Map构成。特征图中每个神经元与输入中5*5的邻域相连。特征图的大小为28*28,这样能防止输入的连接掉到边界之外(是为了BP反馈时的计算,不致梯度损失,个人见解)。C1有156个可训练参数(每个滤波器5*5=25个unit参数和一个bias参数,一共6个滤波器,共(5*5+1)*6=156个参数),共156*(28*28)=122,304个连接。

           S2层是一个下采样层(为什么是下采样?利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息),有6个14*14的特征图。特征图中的每个单元与C1中相对应特征图的2*2邻域相连接。S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid函数计算。可训练系数和偏置控制着sigmoid函数的非线性程度。如果系数比较小,那么运算近似于线性运算,亚采样相当于模糊图像。如果系数比较大,根据偏置的大小亚采样可以被看成是有噪声的“或”运算或者有噪声的“与”运算。每个单元的2*2感受野并不重叠,因此S2中每个特征图的大小是C1中特征图大小的1/4(行和列各1/2)。有6个14*14的特征图。特征图中的每个单元与C1中相对应特征图的2*2邻域相连接。S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。每个单元的2*2感受野并不重叠,因此S2中每个特征图的大小是C1中特征图大小的1/4(行和列各1/2)。S2层有12(6*(1+1)=12)个可训练参数和5880(14*14*(2*2+1)*6=5880)个连接。

      图:卷积和子采样过程:卷积过程包括:用一个可训练的滤波器fx去卷积一个输入的图像(第一阶段是输入的图像,后面的阶段就是卷积特征map了),然后加一个偏置bx,得到卷积层Cx。子采样过程包括:每邻域四个像素求和变为一个像素,然后通过标量Wx+1加权,再增加偏置bx+1,然后通过一个sigmoid激活函数,产生一个大概缩小四倍的特征映射图Sx+1。

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

           C3层也是一个卷积层,它同样通过5x5的卷积核去卷积层S2,然后得到的特征map就只有10x10个神经元,但是它有16种不同的卷积核,所以就存在16个特征map了。这里需要注意的一点是:C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合(这个做法也并不是唯一的)。(看到没有,这里是组合,就像之前聊到的人的视觉系统一样,底层的结构构成上层更抽象的结构,例如边缘构成形状或者目标的部分)。

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

          例如,存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。这样C3层有1516个可训练参数和151600个连接。

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

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

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

          最后,输出层由欧式径向基函数(Euclidean Radial Basis Function)单元组成,每类一个单元,每个有84个输入。换句话说,每个输出RBF单元计算输入向量和参数向量之间的欧式距离。输入离参数向量越远,RBF输出的越大。一个RBF输出可以被理解为衡量输入模式和与RBF相关联类的一个模型的匹配程度的惩罚项。用概率术语来说,RBF输出可以被理解为F6层配置空间的高斯分布的负log-likelihood。给定一个输入模式,损失函数应能使得F6的配置与RBF参数向量(即模式的期望分类)足够接近。这些单元的参数是人工选取并保持固定的(至少初始时候如此)。这些参数向量的成分被设为-1或1。虽然这些参数可以以-1和1等概率的方式任选,或者构成一个纠错码,但是被设计成一个相应字符类的7*12大小(即84)的格式化图片。这种表示对识别单独的数字不是很有用,但是对识别可打印ASCII集中的字符串很有用。

          使用这种分布编码而非更常用的“1 of N”编码用于产生输出的另一个原因是,当类别比较大的时候,非分布编码的效果比较差。原因是大多数时间非分布编码的输出必须为0。这使得用sigmoid单元很难实现。另一个原因是分类器不仅用于识别字母,也用于拒绝非字母。使用分布编码的RBF更适合该目标。因为与sigmoid不同,他们在输入空间的较好限制的区域内兴奋,而非典型模式更容易落到外边。

            RBF参数向量起着F6层目标向量的角色。需要指出这些向量的成分是+1或-1,这正好在F6 sigmoid的范围内,因此可以防止sigmoid函数饱和。实际上,+1和-1是sigmoid函数的最大弯曲的点处。这使得F6单元运行在最大非线性范围内。必须避免sigmoid函数的饱和,因为这将会导致损失函数较慢的收敛和病态问题。

    (5)训练过程

            神经网络用于模式识别的主流是有指导学习网络,无指导学习网络更多的是用于聚类分析。对于有指导的模式识别,由于任一样本的类别是已知的,样本在空间的分布不再是依据其自然分布倾向来划分,而是要根据同类样本在空间的分布及不同类样本之间的分离程度找一种适当的空间划分方法,或者找到一个分类边界,使得不同类样本分别位于不同的区域内。这就需要一个长时间且复杂的学习过程,不断调整用以划分样本空间的分类边界的位置,使尽可能少的样本被划分到非同类区域中。

           卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系(最终得到一个高度浓缩且唯一代表其输入样本本质特征的   特征向量),而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练(前向和反向传播调整权值),网络就具有输入输出对之间的映射能力。卷积网络执行的是有导师训练,所以其样本集是由形如:(输入向量(图片),理想输出向量(label))的向量对构成的。所有这些向量对,都应该是来源于网络即将模拟的系统的实际“运行”结果。它们可以是从实际运行系统中采集来的。在开始训练前,所有的权都应该用一些不同的小随机数进行初始化。“小随机数”用来保证网络不会因权值过大而进入饱和状态,从而导致训练失败;“不同”用来保证网络可以正常地学习。实际上,如果用相同的数去初始化权矩阵,则网络无能力学习。

           训练算法与传统的BP算法差不多。主要包括4步,这4步被分为两个阶段:

    第一阶段,向前传播阶段:

    a)从样本集中取一个样本(X,Yp),将X输入网络;

    b)计算相应的实际输出Op。

          在此阶段,信息从输入层经过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常运行时执行的过程。在此过程中,网络执行的是计算(实际上就是输入与每层的权值矩阵相点乘,得到最后的输出结果):

              Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))//一系列的非线性计算

    第二阶段,向后传播阶段

    a)算实际输出Op与相应的理想输出Yp的差;

    b)按极小化误差的方法反向传播调整权矩阵。

    (6)卷积神经网络的优点

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

            流的分类方式几乎都是基于统计特征的,这就意味着在进行分辨前必须提取某些特征。然而,显式的特征提取并不容易,在一些应用问题中也并非总是可靠的。卷积神经网络,它避免了显式的特征取样,隐式地从训练数据中进行学习。这使得卷积神经网络明显有别于其他基于神经网络的分类器,通过结构重组和减少权值将特征提取功能融合进多层感知器。它可以直接处理灰度图片,能够直接用于处理基于图像的分类。

           卷积网络较一般神经网络在图像处理方面有如下优点:

    • a)输入图像和网络的拓扑结构能很好的吻合;
    • b)特征提取和模式分类同时进行,并同时在训练中产生;
    • c)权重共享可以减少网络的训练参数,使神经网络结构变得更简单,适应性更强。

    (7)小结

           CNNs中这种层间联系和空域信息的紧密关系,使其适于图像处理和理解。而且,其在自动提取图像的显著特征方面还表现出了比较优的性能。在一些例子当中,Gabor滤波器已经被使用在一个初始化预处理的步骤中,以达到模拟人类视觉系统对视觉刺激的响应。在目前大部分的工作中,研究者将CNNs应用到了多种机器学习问题中,包括人脸识别,文档分析和语言检测等。为了达到寻找视频中帧与帧之间的相干性的目的,目前CNNs通过一个时间相干性去训练,但这个不是CNNs特有的。

    ====================第3部分============================================

    如何选择卷积核的大小?越大越好还是越小越好?

    答案是小而深,单独较小的卷积核也是不好的,只有堆叠很多小的卷积核,模型的性能才会提升。

    • CNN的卷积核对应一个感受野,这使得每一个神经元不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局信息。这样做的一个好处就是可以减少大量训练的参数。
    • VGG经常出现多个完全一样的3×3的卷积核堆叠在一起的情况,这些多个小型卷积核堆叠的设计其实是非常有效的。两个3×3的卷积层串联相当于1个5×5的卷积层,即一个像素会和周围5×5的像素产生关联,可以说感受野是5×5。同时,3个串联的3×3卷积层串联的效果相当于一个7×7的卷积层。除此之外,3个串联的3×3的卷积层拥有比一个7×7更少的参数量,只有后者的 (3×3×3) / (7×7) = 55%。最重要的是3个3×3的卷积层拥有比一个7×7的卷积层更多的非线性变换(前者可以使用三次ReLu激活,而后者只有一次)。

    卷积神经网络池化后的特征图大小计算

    卷积后的大小

    W:矩阵宽,H:矩阵高,F:卷积核宽和高,P:padding(需要填充的0的个数),N:卷积核的个数,S:步长

    width:卷积后输出矩阵的宽,height:卷积后输出矩阵的高

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

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

    当conv2d(), max_pool()中的padding=‘SAME’时,width=W,height=H,当padding=‘valid’时,P=0

    输出图像大小:(width,height,N)

    池化后的大小

    width = (W - F)/ S + 1

    height = (H - F) / S + 1

    边界填充问题

    卷积操作有两个问题: 

    1. 图像越来越小; 
    2. 图像边界信息丢失,即有些图像角落和边界的信息发挥作用较少。因此需要padding。

    卷积核大小通常为奇数 

    一方面是为了方便same卷积padding对称填充,左右两边对称补零; 
    n+2p-f+1=n 
    p=(f-1)/2 
    另一方面,奇数过滤器有中心像素,便于确定过滤器的位置。

    两种padding方式:"same"/"valid"

    “VALID”只会丢弃最右边无法扫描到的列(或者最底部无法扫描到的列)。

    “SAME”试图在左右添加padding,但如果列添加的数量是奇数,则将额外的添加到右侧(即保持双数时,左右padding相通,偶数时,右侧/底部 比 左侧/顶部 多1),在垂直方向同理)。

    此文是本人参考其他博主的笔记,如有侵权请联系,谢谢!

    参考:https://www.cnblogs.com/wj-1314/p/9593364.html#4064114

    展开全文
  • 为什么要使用卷积呢?  在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值...这就是为什么在过去卷积神经网络一直被SVM等完虐的原因。  如果,...

    为什么要使用卷积呢?

      在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用,特征有时多了(需要PCA降维),特征有时少了(容易过拟合),有时选择的特征根本就不起作用(真正起作用的特征在浩瀚的未知里面)。这就是为什么在过去卷积神经网络一直被SVM等完虐的原因。

      如果,特征都是从图像中提取的,那如果把整副图像作为特征来训练神经网络不就行了,那肯定不会有任何信息丢失!那先不说一幅图像有多少冗余信息,单说着信息量就超级多。。。假如有一幅1000*1000的图像,如果把整幅图像作为向量,则向量的长度为1000000(10^6)。在假如隐含层神经元的个数和输入一样,也是1000000;那么,输入层到隐含层的参数数据量有10^12,妈呀,什么样的机器能训练这样的网络呢。所以,我们还得降低维数,同时得以整幅图像为输入(人类实在找不到好的特征了)。于是,牛逼的卷积来了

    CNN卷积神经网络层级结构

     

    CNN网络一共有5个层级结构:

      • 输入层
      • 卷积层
      • 激活层
      • 池化层
      • 全连接FC层

        =========第1部分=======以下按上面5部分简单讲解==================================

    1 输入层

    与传统神经网络/机器学习一样,模型需要输入的进行预处理操作,常见的输入层中预处理方式有

    • 去均值
    • 归一化
    • PCA/SVD降维等

    2  卷积层

           局部感知:人的大脑识别图片的过程中,并不是一下子整张图同时识别,而是对于图片中的每一个特征首先局部感知,然后更高层次对局部进行综合操作,从而得到全局信息。 (后面详解)

    输入图片为彩图(rgb三通道),经过四层卷积核卷积运算,每层卷积核都有自己的biase值。每层卷积核先单独对r,g,b通道进行计算,然后再累加  各自计算的r,g,b通道  的值,对应位置处合并为最终一层的卷积层。所以四层卷积层最后得到四层卷积后的层。如下图公式显示:

     

    3  激励(活)层

      所谓激励,实际上是对卷积层的输出结果做一次非线性映射。 
      如果不用激励函数(其实就相当于激励函数是f(x)=x),这种情况下,每一层的输出都是上一层输入的线性函数。容易得出,无论有多少神经网络层,输出都是输入的线性组合,与没有隐层的效果是一样的,这就是最原始的感知机了。 
    常用的激励函数有:

      • Sigmoid函数
      • Tanh函数
      • ReLU
      • Leaky ReLU
      • ELU
      • Maxout

      中间激励层建议:首先ReLU,因为迭代速度快,但是有可能效果不加。如果ReLU失效的情况下,考虑使用Leaky ReLU或者Maxout,此时一般情况都可以解决。Tanh函数在文本和音频处理有比较好的效果。分类网络的最后一层激活函数一般用(即预测函数):softmax函数,或者结合其他函数

    4  池化层

      池化(Pooling):也称为欠采样下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。主要有:

      • Max Pooling:最大池化
      • Average Pooling:平均池化 



        通过池化层,使得原本4*4的特征图压缩成了2*2,从而降低了特征维度。

      虽然人不太容易分辨出池化后的特征图,但是没关系,机器还是可以识别的。

    5  输出层(全连接层)

      经过前面若干次卷积+激励+池化后,终于来到了输出层,模型会将学到的一个高质量的特征图片全连接层。其实在全连接层之前,如果神经元数目过大,学习能力强,有可能出现过拟合。因此,可以引入dropout操作,来随机删除神经网络中的部分神经元,正则化等来解决此问题。还可以进行局部归一化(LRN)、数据增强,交叉验证,提前终止训练等操作,来增加鲁棒性。 
      当来到了全连接层之后,可以理解为一个简单的多分类神经网络(如:BP神经网络),通过softmax函数得到最终的输出。整个模型训练完毕。 
      两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的: 

     

    =========================第2部分===========================================

    CNN卷积神经网络卷积层和池化层详解

      卷积神经网络(Convolutional Neural Network,简称CNN),是一种前馈神经网络,人工神经元可以响应周围单元,可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 
           卷积神经网络是受到生物思考方式启发的MLPs(多层感知器),它有着不同的类别层次,并且各层的工作方式和作用也不同。这里提供一个较好的CNN教程(http://cs231n.github.io/convolutional-networks/)。文章中详细介绍了CNN的计算方式和数据的流动过程。

           卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。

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

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

    (1)卷积神经网络的历史

           1962年Hubel和Wiesel通过对猫视觉皮层细胞的研究,提出了感受野(receptive field)的概念,1984年日本学者Fukushima基于感受野概念提出的神经认知机(neocognitron)可以看作是卷积神经网络的第一个实现网络,也是感受野概念在人工神经网络领域的首次应用。神经认知机将一个视觉模式分解成许多子模式(特征),然后进入分层递阶式相连的特征平面进行处理,它试图将视觉系统模型化,使其能够在即使物体有位移或轻微变形的时候,也能完成识别。

           通常神经认知机包含两类神经元,即承担特征抽取的S-元和抗变形的C-元。S-元中涉及两个重要参数,即感受野与阈值参数,前者确定输入连接的数目,后者则控制对特征子模式的反应程度。许多学者一直致力于提高神经认知机的性能的研究:在传统的神经认知机中,每个S-元的感光区中由C-元带来的视觉模糊量呈正态分布。如果感光区的边缘所产生的模糊效果要比中央来得大,S-元将会接受这种非正态模糊所导致的更大的变形容忍性。我们希望得到的是,训练模式与变形刺激模式在感受野的边缘与其中心所产生的效果之间的差异变得越来越大。为了有效地形成这种非正态模糊,Fukushima提出了带双C-元层的改进型神经认知机。

           Van Ooyen和Niehuis为提高神经认知机的区别能力引入了一个新的参数。事实上,该参数作为一种抑制信号,抑制了神经元对重复激励特征的激励。多数神经网络在权值中记忆训练信息。根据Hebb学习规则,某种特征训练的次数越多,在以后的识别过程中就越容易被检测。也有学者将进化计算理论与神经认知机结合,通过减弱对重复性激励特征的训练学习,而使得网络注意那些不同的特征以助于提高区分能力。上述都是神经认知机的发展过程,而卷积神经网络可看作是神经认知机的推广形式,神经认知机是卷积神经网络的一种特例。

    (2)卷积神经网络的网络结构

     先介绍卷积层遇到的几个名词:

           • 深度/depth(解释见下图)
      • 步长/stride (窗口一次滑动的长度)
      • 填充值/zero-padding

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



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

          卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。

      如图所示,CNN网络工作时,会伴随着卷积并且不断转换着这些卷积。

           图1:卷积神经网络的概念示范

      输入图像通过和三个可训练的滤波器和可加偏置进行卷积,滤波过程如图一,卷积后在C1层产生三个特征映射图,然后特征映射图中每组的四个像素再进行求和,加权值,加偏置。通过一个Sigmoid函数得到三个S2层的特征映射图。这些映射图再进过滤波得到C3层。这个层级结构再和S2一样产生S4。最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。

           一般地,C层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S层是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。

           此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。

    (3)关于参数减少与权值共享

          上面聊到,好像CNN一个厉害的地方就在于通过感受野和权值共享减少了神经网络需要训练的参数的个数。那究竟是啥的呢?

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

    局部感知

           下图左:如果我们有1000x1000像素的图像,有1百万个隐层神经元,那么他们全连接的话(每个隐层神经元都连接图像的每一个像素点),就有1000x1000x1000000=10^12个连接,也就是10^12个权值参数。然而图像的空间联系是局部的,就像人是通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。这样,我们就可以减少连接的数目,也就是减少神经网络需要训练的权值参数的个数了。如下图右:假如局部感受野是10x10,隐层每个感受野只需要和这10x10的局部图像相连接,所以1百万个隐层神经元就只有一亿个连接,即10^8个参数。比原来减少了四个0(数量级),这样训练起来就没那么费力了,但还是感觉很多的啊,那还有啥办法没?

     

           我们知道,隐含层的每一个神经元都连接10x10个图像区域,也就是说每一个神经元存在10x10=100个连接权值参数。那如果我们每个神经元这100个参数是相同的呢?也就是说每个神经元用的是同一个卷积核去卷积图像。这样我们就只有多少个参数??只有100个参数啊!!!亲!不管你隐层的神经元个数有多少,两层间的连接我只有100个参数啊!亲!这就是权值共享啊!亲!这就是卷积神经网络的主打卖点啊!亲!(有点烦了,呵呵)也许你会问,这样做靠谱吗?为什么可行呢?这个……共同学习。

           好了,你就会想,这样提取特征也忒不靠谱吧,这样你只提取了一种特征啊?对了,真聪明,我们需要提取多种特征对不?假如一种滤波器(卷积核),也就是一种卷积核就是提出图像的一种特征,例如某个方向的边缘。那么我们需要提取不同的特征,怎么办,加多几种滤波器不就行了吗?对了。所以假设我们加到100种滤波器,每种滤波器的参数不一样,表示它提取输入图像的不同特征,例如不同的边缘。这样每种滤波器去卷积图像就得到对图像的不同特征的放映,我们称之为Feature Map。所以100种卷积核就有100个Feature Map。这100个Feature Map就组成了一层神经元。到这个时候明了了吧。我们这一层有多少个参数了?100种卷积核x每种卷积核共享100个参数=100x100=10K,也就是1万个参数。才1万个参数啊!亲!(又来了,受不了了!)见下图右:不同的颜色表达不同的滤波器

     

           嘿哟,遗漏一个问题了。刚才说隐层的参数个数和隐层的神经元个数无关,只和滤波器的大小和滤波器种类的多少有关。那么隐层的神经元个数怎么确定呢?它和原图像,也就是输入的大小(神经元个数)、滤波器的大小和滤波器在图像中的滑动步长都有关!例如,我的图像是1000x1000像素,而滤波器大小是10x10,假设滤波器没有重叠,也就是步长为10,这样隐层的神经元个数就是(1000x1000 )/ (10x10)=100x100个神经元了,假设步长是8,也就是卷积核会重叠两个像素,那么……我就不算了,思想懂了就好。注意了,这只是一种滤波器,也就是一个Feature Map的神经元个数哦,如果100个Feature Map就是100倍了。由此可见,图像越大,神经元个数和需要训练的权值参数个数的贫富差距就越大。

     

          需要注意的一点是,上面的讨论都没有考虑每个神经元的偏置部分。所以权值个数需要加1 。这个也是同一种滤波器共享的。

          总之,卷积网络的核心思想是将:局部感受野、权值共享(或者权值复制)以及时间或空间亚采样这三种结构思想结合起来获得了某种程度的位移、尺度、形变不变性。

    (4)一个典型的例子说明

           一种典型的用来识别数字的卷积网络是LeNet-5(效果和paper等见这)。当年美国大多数银行就是用它来识别支票上面的手写数字的。能够达到这种商用的地步,它的准确性可想而知。毕竟目前学术界和工业界的结合是最受争议的。

          那下面咱们也用这个例子来说明下。

            LeNet-5共有7层,不包含输入,每层都包含可训练参数(连接权重)。输入图像为32*32大小。这要比Mnist数据库(一个公认的手写数据库)中最大的字母还大。这样做的原因是希望潜在的明显特征如笔画断电或角点能够出现在最高层特征监测子感受野的中心。

            我们先要明确一点:每个层有多个Feature Map,每个Feature Map通过一种卷积滤波器提取输入的一种特征,然后每个Feature Map有多个神经元。

            C1层是一个卷积层(为什么是卷积?卷积运算一个重要的特点就是,通过卷积运算,可以使原信号特征增强,并且降低噪音),由6个特征图Feature Map构成。特征图中每个神经元与输入中5*5的邻域相连。特征图的大小为28*28,这样能防止输入的连接掉到边界之外(是为了BP反馈时的计算,不致梯度损失,个人见解)。C1有156个可训练参数(每个滤波器5*5=25个unit参数和一个bias参数,一共6个滤波器,共(5*5+1)*6=156个参数),共156*(28*28)=122,304个连接。

           S2层是一个下采样层(为什么是下采样?利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息),有6个14*14的特征图。特征图中的每个单元与C1中相对应特征图的2*2邻域相连接。S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid函数计算。可训练系数和偏置控制着sigmoid函数的非线性程度。如果系数比较小,那么运算近似于线性运算,亚采样相当于模糊图像。如果系数比较大,根据偏置的大小亚采样可以被看成是有噪声的“或”运算或者有噪声的“与”运算。每个单元的2*2感受野并不重叠,因此S2中每个特征图的大小是C1中特征图大小的1/4(行和列各1/2)。有6个14*14的特征图。特征图中的每个单元与C1中相对应特征图的2*2邻域相连接。S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。每个单元的2*2感受野并不重叠,因此S2中每个特征图的大小是C1中特征图大小的1/4(行和列各1/2)。S2层有12(6*(1+1)=12)个可训练参数和5880(14*14*(2*2+1)*6=5880)个连接。

      图:卷积和子采样过程:卷积过程包括:用一个可训练的滤波器fx去卷积一个输入的图像(第一阶段是输入的图像,后面的阶段就是卷积特征map了),然后加一个偏置bx,得到卷积层Cx。子采样过程包括:每邻域四个像素求和变为一个像素,然后通过标量Wx+1加权,再增加偏置bx+1,然后通过一个sigmoid激活函数,产生一个大概缩小四倍的特征映射图Sx+1。

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

           C3层也是一个卷积层,它同样通过5x5的卷积核去卷积层S2,然后得到的特征map就只有10x10个神经元,但是它有16种不同的卷积核,所以就存在16个特征map了。这里需要注意的一点是:C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合(这个做法也并不是唯一的)。(看到没有,这里是组合,就像之前聊到的人的视觉系统一样,底层的结构构成上层更抽象的结构,例如边缘构成形状或者目标的部分)。

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

          例如,存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。这样C3层有1516个可训练参数和151600个连接。

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

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

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

          最后,输出层由欧式径向基函数(Euclidean Radial Basis Function)单元组成,每类一个单元,每个有84个输入。换句话说,每个输出RBF单元计算输入向量和参数向量之间的欧式距离。输入离参数向量越远,RBF输出的越大。一个RBF输出可以被理解为衡量输入模式和与RBF相关联类的一个模型的匹配程度的惩罚项。用概率术语来说,RBF输出可以被理解为F6层配置空间的高斯分布的负log-likelihood。给定一个输入模式,损失函数应能使得F6的配置与RBF参数向量(即模式的期望分类)足够接近。这些单元的参数是人工选取并保持固定的(至少初始时候如此)。这些参数向量的成分被设为-1或1。虽然这些参数可以以-1和1等概率的方式任选,或者构成一个纠错码,但是被设计成一个相应字符类的7*12大小(即84)的格式化图片。这种表示对识别单独的数字不是很有用,但是对识别可打印ASCII集中的字符串很有用。

          使用这种分布编码而非更常用的“1 of N”编码用于产生输出的另一个原因是,当类别比较大的时候,非分布编码的效果比较差。原因是大多数时间非分布编码的输出必须为0。这使得用sigmoid单元很难实现。另一个原因是分类器不仅用于识别字母,也用于拒绝非字母。使用分布编码的RBF更适合该目标。因为与sigmoid不同,他们在输入空间的较好限制的区域内兴奋,而非典型模式更容易落到外边。

            RBF参数向量起着F6层目标向量的角色。需要指出这些向量的成分是+1或-1,这正好在F6 sigmoid的范围内,因此可以防止sigmoid函数饱和。实际上,+1和-1是sigmoid函数的最大弯曲的点处。这使得F6单元运行在最大非线性范围内。必须避免sigmoid函数的饱和,因为这将会导致损失函数较慢的收敛和病态问题。

    (5)训练过程

            神经网络用于模式识别的主流是有指导学习网络,无指导学习网络更多的是用于聚类分析。对于有指导的模式识别,由于任一样本的类别是已知的,样本在空间的分布不再是依据其自然分布倾向来划分,而是要根据同类样本在空间的分布及不同类样本之间的分离程度找一种适当的空间划分方法,或者找到一个分类边界,使得不同类样本分别位于不同的区域内。这就需要一个长时间且复杂的学习过程,不断调整用以划分样本空间的分类边界的位置,使尽可能少的样本被划分到非同类区域中。

           卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系(最终得到一个高度浓缩且唯一代表其输入样本本质特征的   特征向量),而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练(前向和反向传播调整权值),网络就具有输入输出对之间的映射能力。卷积网络执行的是有导师训练,所以其样本集是由形如:(输入向量(图片),理想输出向量(label))的向量对构成的。所有这些向量对,都应该是来源于网络即将模拟的系统的实际“运行”结果。它们可以是从实际运行系统中采集来的。在开始训练前,所有的权都应该用一些不同的小随机数进行初始化。“小随机数”用来保证网络不会因权值过大而进入饱和状态,从而导致训练失败;“不同”用来保证网络可以正常地学习。实际上,如果用相同的数去初始化权矩阵,则网络无能力学习。

           训练算法与传统的BP算法差不多。主要包括4步,这4步被分为两个阶段:

    第一阶段,向前传播阶段:

    a)从样本集中取一个样本(X,Yp),将X输入网络;

    b)计算相应的实际输出Op。

          在此阶段,信息从输入层经过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常运行时执行的过程。在此过程中,网络执行的是计算(实际上就是输入与每层的权值矩阵相点乘,得到最后的输出结果):

              Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))//一系列的非线性计算

    第二阶段,向后传播阶段

    a)算实际输出Op与相应的理想输出Yp的差;

    b)按极小化误差的方法反向传播调整权矩阵。

    (6)卷积神经网络的优点

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

            流的分类方式几乎都是基于统计特征的,这就意味着在进行分辨前必须提取某些特征。然而,显式的特征提取并不容易,在一些应用问题中也并非总是可靠的。卷积神经网络,它避免了显式的特征取样,隐式地从训练数据中进行学习。这使得卷积神经网络明显有别于其他基于神经网络的分类器,通过结构重组和减少权值将特征提取功能融合进多层感知器。它可以直接处理灰度图片,能够直接用于处理基于图像的分类。

           卷积网络较一般神经网络在图像处理方面有如下优点:

    • a)输入图像和网络的拓扑结构能很好的吻合;
    • b)特征提取和模式分类同时进行,并同时在训练中产生;
    • c)权重共享可以减少网络的训练参数,使神经网络结构变得更简单,适应性更强。

    (7)小结

           CNNs中这种层间联系和空域信息的紧密关系,使其适于图像处理和理解。而且,其在自动提取图像的显著特征方面还表现出了比较优的性能。在一些例子当中,Gabor滤波器已经被使用在一个初始化预处理的步骤中,以达到模拟人类视觉系统对视觉刺激的响应。在目前大部分的工作中,研究者将CNNs应用到了多种机器学习问题中,包括人脸识别,文档分析和语言检测等。为了达到寻找视频中帧与帧之间的相干性的目的,目前CNNs通过一个时间相干性去训练,但这个不是CNNs特有的。

    ====================第3部分============================================

    如何选择卷积核的大小?越大越好还是越小越好?

    答案是小而深,单独较小的卷积核也是不好的,只有堆叠很多小的卷积核,模型的性能才会提升。

    • CNN的卷积核对应一个感受野,这使得每一个神经元不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局信息。这样做的一个好处就是可以减少大量训练的参数。
    • VGG经常出现多个完全一样的3×3的卷积核堆叠在一起的情况,这些多个小型卷积核堆叠的设计其实是非常有效的。两个3×3的卷积层串联相当于1个5×5的卷积层,即一个像素会和周围5×5的像素产生关联,可以说感受野是5×5。同时,3个串联的3×3卷积层串联的效果相当于一个7×7的卷积层。除此之外,3个串联的3×3的卷积层拥有比一个7×7更少的参数量,只有后者的 (3×3×3) / (7×7) = 55%。最重要的是3个3×3的卷积层拥有比一个7×7的卷积层更多的非线性变换(前者可以使用三次ReLu激活,而后者只有一次)。

    卷积神经网络池化后的特征图大小计算

    卷积后的大小

    W:矩阵宽,H:矩阵高,F:卷积核宽和高,P:padding(需要填充的0的个数),N:卷积核的个数,S:步长

    width:卷积后输出矩阵的宽,height:卷积后输出矩阵的高

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

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

    当conv2d(), max_pool()中的padding=‘SAME’时,width=W,height=H,当padding=‘valid’时,P=0

    输出图像大小:(width,height,N)

    池化后的大小

    width = (W - F)/ S + 1

    height = (H - F) / S + 1

    边界填充问题

    卷积操作有两个问题: 

    1. 图像越来越小; 
    2. 图像边界信息丢失,即有些图像角落和边界的信息发挥作用较少。因此需要padding。

    卷积核大小通常为奇数 

    一方面是为了方便same卷积padding对称填充,左右两边对称补零; 
    n+2p-f+1=n 
    p=(f-1)/2 
    另一方面,奇数过滤器有中心像素,便于确定过滤器的位置。

    两种padding方式:"same"/"valid"

    “VALID”只会丢弃最右边无法扫描到的列(或者最底部无法扫描到的列)。

    “SAME”试图在左右添加padding,但如果列添加的数量是奇数,则将额外的添加到右侧(即保持双数时,左右padding相通,偶数时,右侧/底部 比 左侧/顶部 多1),在垂直方向同理)。

    此文是本人参考其他博主的笔记,如有侵权请联系,谢谢!

    参考:https://www.cnblogs.com/wj-1314/p/9593364.html#4064114

    展开全文
  • 典型卷积神经网络由卷积层、池化层、全连接层构成。 卷积层 卷积:在原始的输入上进行特征的提取。特征提取简言之就是,在原始输入上一个小区域一个小区域进行特征的提取。 直观的理解卷积 以上图为例: 第一次...
  • 卷积神经网络的研究产生了各种各样优秀的网络模型,还提出了各种卷积层的变种,本节将重点介绍书中典型卷积层变种。 1. 空洞卷积  普通的卷积层为了减少为了的参数量,卷积核的设计通常选择较小的1×11×11×1和...
  • 卷积神经网络

    2021-06-14 09:35:41
    卷积神经网络5.1 卷积5.2 卷积神经网络5.2.1 卷积层5.2.2 汇聚层5.2.3 卷积网络的整体结构5.3 几种典型卷积神经网络5.3.1 LeNet-55.3.2 AlexNet5.3.3 Inception 网络5.3.4 残差网络5.4 其他卷积方式5.4.1 转置卷积...
  • 卷积神经网络 [卷积层可视化]

    千次阅读 2019-01-19 10:27:37
    卷积网络设计的初衷是通过卷积层和池化层逐级提取图像在各个不同抽象层次的特征,我们会有这样的疑问:现实结果真的是这样的吗? 先看图像卷积之后的结果。下面是一张卡车的图像: 卡车图像 用AlexNet网络处理...
  • 卷积神经网络(CNN)输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT(输入层)-CONV(卷积层)-RELU(激活函数)-POOL(池化层)-FC(全连接层) 卷积层 用它来进行特征提取,如下: 输入图像是32...
  • 几种常见卷积神经网络结构

    万次阅读 多人点赞 2020-08-25 17:03:56
    作为神经网络领域的一个重要研究分支,卷积神经网络的特点在于其每一层的特征都上一层的局部区域通过共享权值的卷积核激励得到。这一特点使得卷积神经网络相比于其他神经网络方法更适合应用于图像特征的.
  • 卷积层是构建卷积神经网络的核心层,它产生了网络中大部分的计算量。 首先讨论的是,在没有大脑和生物意义上的神经元之类的比喻下,卷积层到底在计算什么呢? 卷积层的参数是有一些可学习(不是固定值,而是W,B...
  • 学习笔记11--卷积神经网络基本结构

    千次阅读 2021-12-09 18:35:15
    本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与...卷积神经网络由卷积层、池化层、全连接层(配合
  • 卷积神经网络的几种典型架构

    千次阅读 多人点赞 2020-05-06 17:47:49
    LeNet-5 介绍 卷积神经网络算法是199年前就有的算法,是卷积神经网络的开山始祖。 原理 在这里插入图片描述 C1层是一个卷积层6个特征图Feature Map构成。特征图中每个神经元与输入为 5 ∗ 5 5*5 5∗5的邻域相连...
  • 卷积神经网络(CNN)输入层、卷积层、激活函数、池化层、全连接层组成。过拟合是训练数据过小网络会出现的问题,dropout用于全连接层,可以防止过拟合。 卷积神经网络(CNN)输入层、卷积层、激活函数、池化层...
  • CNN卷积神经网络详解

    千次阅读 2021-05-25 10:28:21
    1、cnn卷积神经网络的概念 卷积神经网络(CNN),这是...卷积层:卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层
  • 使用 Python 实现的卷积神经网络初学者指南

    千次阅读 多人点赞 2021-10-20 00:49:41
    目录卷积神经网络简介其组成部分输入层卷积层池化层全连接层CNN 在数据集上的实际实现CNN简介卷积神经网络是一种专为处理图像和视频而设计的深度学习算法。它以图像为输入,提取和学习图像的特征...
  • 卷积神经网络结构优化综述

    千次阅读 2022-02-14 11:10:27
    卷积神经网络结构优化综述 人工智能技术与咨询 来源:《自动化学报》,作者林景栋等 摘 要近年来,卷积神经网络(Convolutional neural network,CNNs)在计算机视觉、自然语言处理、语音识别等领域取得了突飞猛进...
  • 今天我们要讲的是如何构建卷积神经网络卷积层,下面来看个例子。 上节课,我们已经讲了如何通过两个过滤器卷积处理一个三维图像,并输出两个不同的4×4矩阵。假设使用第一个过滤器进行卷积,得到第一个4×4矩阵...
  • 第一个典型卷积神经网络(Convolutional Neural Network, 以下简称CNN)是LeCun等人于1998年提出LeNet网络,是一种用于手写体字符识别的非常高效的卷积神经网络,是CNN的开山之作;但真正让CNN大放异彩的是AlexNet...
  • 图神经网络GNN学习笔记:卷积神经网络卷积神经网络1. 卷积与池化1.1 信号处理中的卷积 卷积神经网络 卷积神经网络(Convolutional Neural Network, CNN或ConvNet)是一种具有局部连接、权值共享等特点的深层前馈神经...
  • 卷积神经网络(CNN)

    千次阅读 2021-03-27 20:45:38
    1、什么是卷积神经网络(CNN)? 2、卷积神经网络与普通网络有何区别? 3、卷积的工作原理? 4、卷积神经网络的神经元结构是怎么样的? 5、卷积神经网络的网络一共包含几层? 6、样本数据是以怎么样的方式喂入卷积神经...
  • 卷积神经网络CNN以及几种经典模型

    千次阅读 2020-02-19 11:06:22
    卷积神经网络一个或多个卷积层和顶端的全连通层(也可以使用1x1的卷积层作为最终的输出)组成的一种前馈神经网络 基本概念 局部感受野(Local Receptive Fields) 一般的神经网络往往会把图像的每一个像素点连接到...
  • 第二、三章 卷积神经网络原理及典型结构 1.1卷积神经网络概述 1.1.1 卷积神经网络的发展 卷积神经网络的发展大体上经历了三个阶段,即: 理论提出阶段:卷积神经网络的发展最早可追溯到20世纪60年代。 模型实现阶段...
  • 卷积神经网络CNN的组成卷积层池化层zero padding全连接层LENET神经网络ALEXNET神经网络较流行的神经网络注意 卷积神经网络(Convolutional Neural Network)是一种前馈神经网络。常用于图像领域。 CNN的组成 CNN由卷...
  • 卷积神经网络详解

    千次阅读 2021-03-10 16:37:50
    卷积神经网络(Convolutional Neural Networks, CNN)是应用最多、研究最广的一种神经网络,卷积神经网络(以下简称CNN)主要用于图片分类,自动标注以及产品推荐系统中。以CNN实现图片分类为例,图像经过多个卷积层、...
  • 卷积神经网络介绍

    2021-04-10 14:23:27
    卷积神经网络(Convolutional Neural Networks,CNN)是纽约大学的Yann Lecun于1998年提出的,其本质是一个多层感知机,它是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,105
精华内容 3,642
关键字:

典型的卷积神经网络由卷积层