您好,欢迎访问三七文档
CNN基本问题基本理解CNN降低训练参数的2大法宝?局部感受野、权值共享局部感受野:就是输出图像某个节点(像素点)的响应所对应的最初的输入图像的区域就是感受野。权值共享:比如步长为1,如果每移动一个像素就有一个新的权值对应,那么太夸张了,需要训练的参数爆炸似增长,比如从32x32的原图到28x28经过convolve的图,如果后者的每一个像素对应前面的一个参数,那参数实在是多。权值共享就是将每次覆盖区域的图像所赋给的权值都是卷积核对应的权值。就是说用了这个卷积核,则不管这个卷积核移到图像的哪个位置上,图像的被覆盖区域的所赋给的权值都是该卷积核的参数。啥叫featuremap啊?同一种滤波器卷积得到的向量组合。一种滤波器提取一种特征,下图使用了6种滤波器,进行卷积操作,故有6层featuremap.C1层用了6个5x5的卷积核,这里的步长为1,因此每个featuremap是(32-5+1)x(32-5+1)=28x28.CNN训练的参数是啥啊?其实就是卷积核!!!当然还有偏置。比如上面的6个5x5的卷积核的训练参数是6x(5x5+1),当然咯,每个卷积核对应的偏置自然是不同的。某篇论文的卷积网络表示:Fw(?I)=Wn?Fn?1(?I)+bn,n=3Fn(?I)=σ(Wn?Fn?1(?I)+bn),n=1,2F0(?I)=?I,n=0可以看出啊,总共三层卷积网络,然后第一层第二层都是直接将输入的进行卷积,这里的Wn就是权值参数,也就是卷积核。外加一个偏置bn.当然每传入下一层要一个激活函数,这里选用的是双曲正切。如何计算训练的参数和连接?参数:从图可以看出,这个是用了6个filter,每个filter是5x5,所以这一层的参数是6x(5*5+1),其实在大部分的代码实现中,都是直接去掉bias的,因为这个对结果没啥影响。但是本文还是加上了bias。连接:经过convolve的图变成了(32-5+1)x(32-5+1)=28*28,有:(5*5+1)*(28*28)*6=122,304个连接。因为6个featuremap,每个map有28*28个像素,而每个像素是通过5*5大小的filter经过卷积再加上偏置得到的。因此有这么多连接。Pooling就是将一块区域直接变成一个像素,不经过卷积核。一般有2种,maxpooling和averagepooling.主要是为了防止过拟合,减少训练参数。通过卷积后得到图像的特征,这是因为图像具有一种“静态性”的属性,这也意味着一个图像区域有用的特征极有可能在另一个区域同样适用。因此对于大图像,可以用聚合统计,通过average或是maxpooling,可以得到低得多的维度,同事不容易过拟合。这种聚合操作就是pooling(池化)如何计算感受野大小无padding情况:如果输入是a?a,filter是b?b,那么不加padding情况下,就会卷积后图像变小,变成(a?b+1)?(a?b+1),当计算感受野,就是计算这一层的输出的图像的像素点所对应的原图的像素点的个数。因此,如果我们走极端思想,我们假设经过N层的卷积,然后只输出一个像素点。那么就计算这个像素点的感受野。假设感受野是X2大小,然后根据公式,第一层是(X?f1+1)?(X?f1+1),因此有:X?(f1+f2+?+fN)+N=1,解出X即可。如:ImageSuper-ResolutionUsingDeepConvolutionNetworks,就是SRCNN,SRCNN没有加入padding,它使用了三层,分别是9x9,1x1和5x5,X?(9+5+1)+3=1,得出X=13,因此原文说Onthewhole,theestimationofahighresolutionpixelutilizestheinformationof(9+5?1)2=169pixels.有padding:额,其实有没有padding都是一样的,不会影响感受野大小。。着不用想也知道啊,用的方法同上。因为padding只是增加了边缘区域的像素点,可是filter利用的点的个数还是一样的,只不过经过padding后,利用了一些特殊的像素点(比如zerospadding)罢了。比如在AccurateImageSuper-ResolutionUsingVeryDeepConvolutionNetworks,也就是VDSR中,它有20层的weightlayers,每层都是用3x3的filters,并且有padding的。第一层的感受野就是3x3,第二层就是5x5,第D层就是(2D+1)×(2D+1)。从下面可以推出:X?(3+3+?+3)D个+D=1stride的含义这个就是下采样参数,当然了conv层,则stride=1;如果是pooling层,该pooling层的大小是2x2,那么就stride=2了。其他一些东西带μ的权值更新方式一般来说,标准的BP更新是:W(t)=W(t?1)?η?E?W但是有一种Momentum的更新方式:Δw(t+1)=η?Et+1?w+μΔw(t)这里的μ就是momentum参数。η就是学习率。这里的λ就是正规化项regularizationterm,也称为权重衰减项(weightdecay),这个主要是防止过拟合的,就是很多权重变成0,增加稀疏性。附带:三种激活函数的对比图,我觉得我画的还是挺漂亮的,所以拿过来-_-//,不会有什么意见吧。。x=[-3:0.01:3];plot(x,tanh(x),'r',x,1./(1+exp(-x)),'c--',x,max(0,x),'m-.');legend('Tanh','Sigmoid','ReLu');gridon;12341234
本文标题:CNN基本问题
链接地址:https://www.777doc.com/doc-4209455 .html