卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。
图:卷积神经网络的概念示范:输入图像通过和三个可训练的滤波器和可加偏置进行卷积,滤波过程如图一,卷积后在C1层产生三个特征映射图,然后特征映射图中每组的四个像素再进行求和,加权值,加偏置,通过一个Sigmoid函数得到三个S2层的特征映射图。
这些映射图再进过滤波得到C3层。这个层级结构再和S2一样产生S4。最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。
一般地,C层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S层是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。
特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。
卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。
谷歌人工智能写作项目:神经网络伪原创
一维构筑、二维构筑、全卷积构筑写作猫。
卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(FeedforwardNeuralNetworks),是深度学习(deeplearning)的代表算法之一。
卷积神经网络具有表征学习(representationlearning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariantclassification),因此也被称为“平移不变人工神经网络(Shift-InvariantArtificialNeuralNetworks,SIANN)”。
卷积神经网络的连接性:卷积神经网络中卷积层间的连接被称为稀疏连接(sparseconnection),即相比于前馈神经网络中的全连接,卷积层中的神经元仅与其相邻层的部分,而非全部神经元相连。
具体地,卷积神经网络第l层特征图中的任意一个像素(神经元)都仅是l-1层中卷积核所定义的感受野内的像素的线性组合。
卷积神经网络的稀疏连接具有正则化的效果,提高了网络结构的稳定性和泛化能力,避免过度拟合,同时,稀疏连接减少了权重参数的总量,有利于神经网络的快速学习,和在计算时减少内存开销。
卷积神经网络中特征图同一通道内的所有像素共享一组卷积核权重系数,该性质被称为权重共享(weightsharing)。
权重共享将卷积神经网络和其它包含局部连接结构的神经网络相区分,后者虽然使用了稀疏连接,但不同连接的权重是不同的。权重共享和稀疏连接一样,减少了卷积神经网络的参数总量,并具有正则化的效果。
在全连接网络视角下,卷积神经网络的稀疏连接和权重共享可以被视为两个无限强的先验(pirior),即一个隐含层神经元在其感受野之外的所有权重系数恒为0(但感受野可以在空间移动);且在一个通道内,所有神经元的权重系数相同。
首先,卷积核相同,输入相同,输出的特征是一样的。只不过将输出的矩阵形式换成了列向量的形式。
实质上一般卷积运算与矩阵中的卷积运算并没有差异,唯一的差别仅仅体现在将矩阵元素重排成为了行向量或列向量核矩阵很多时候都是根据经验选取,或者由学习得到。
。
感受野计算时有下面的几个情况需要说明:(1)第一层卷积层的输出特征图像素的感受野的大小等于滤波器的大小(2)深层卷积层的感受野大小和它之前所有层的滤波器大小和步长有关系(3)计算感受野大小时,忽略了图像边缘的影响,即不考虑padding的大小,关于这个疑惑大家可以阅读一下参考文章2的解答进行理解这里的每一个卷积层还有一个strides的概念,这个strides是之前所有层stride的乘积。
即strides(i)=stride(1)*stride(2)*...*stride(i-1)关于感受野大小的计算采用toptodown的方式,即先计算最深层在前一层上的感受野,然后逐渐传递到第一层,使用的公式可以表示如下: RF=1#待计算的featuremap上的感受野大小forlayerin(toplayerTodownlayer):RF=((RF-1)*stride)+fsizestride表示卷积的步长;fsize表示卷积层滤波器的大小用python实现了计算Alexnetzf-5和VGG16网络每层输出featuremap的感受野大小,实现代码:#!/usr/bin/envpythonnet_struct={'alexnet':{'net':[[11,4,0],[3,2,0],[5,1,2],[3,2,0],[3,1,1],[3,1,1],[3,1,1],[3,2,0]],'name':['conv1','pool1','conv2','pool2','conv3','conv4','conv5','pool5']},'vgg16':{'net':[[3,1,1],[3,1,1],[2,2,0],[3,1,1],[3,1,1],[2,2,0],[3,1,1],[3,1,1],[3,1,1],[2,2,0],[3,1,1],[3,1,1],[3,1,1],[2,2,0],[3,1,1],[3,1,1],[3,1,1],[2,2,0]],'name':['conv1_1','conv1_2','pool1','conv2_1','conv2_2','pool2','conv3_1','conv3_2','conv3_3','pool3','conv4_1','conv4_2','conv4_3','pool4','conv5_1','conv5_2','conv5_3','pool5']},'zf-5':{'net':[[7,2,3],[3,2,1],[5,2,2],[3,2,1],[3,1,1],[3,1,1],[3,1,1]],'name':['conv1','pool1','conv2','pool2','conv3','conv4','conv5']}}imsize=224defoutFromIn(isz,net,layernum):totstride=1insize=iszforlayerinrange(layernum):fsize,stride,pad=net[layer]outsize=(insize-fsize+2*pad)/stride+1insize=outsizetotstride=totstride*stridereturnoutsize,totstridedefinFromOut(net,layernum):RF=1forlayerinreversed(range(layernum)):fsize,stride,pad=net[layer]RF=((RF-1)*stride)+fsizereturnRFif__name__=='__main__':print"layeroutputsizesgivenimage=%dx%d"%(imsize,imsize)fornetin():print'************netstructruenameis%s**************'%netforiinrange(len(net_struct[net]['net'])):p=outFromIn(imsize,net_struct[net]['net'],i+1)rf=inFromOut(net_struct[net]['net'],i+1)print"LayerName=%s,Outputsize=%3d,Stride=%3d,RFsize=%3d"%(net_struct[net]['name'][i],p[0],p[1],rf)。
。
卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(FeedforwardNeuralNetworks),是深度学习(deeplearning)的代表算法之一。
卷积神经网络具有表征学习(representationlearning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariantclassification),因此也被称为“平移不变人工神经网络。