作者:彩之乐 | 来源:互联网 | 2023-10-13 05:09
CNN中减少网络的参数的三个思想:
1) 局部连接(Local Connectivity)
2) 权值共享(Shared Weights)
3) 池化(Pooling)
局部连接
局部连接是相对于全连接来说的。全连接示意图如下:
比如说,输入图像为1000*1000大小,即输入层有1000*1000=10^6维,若隐含层与输入层的数目一样,也有10^6个,则输入层到隐含层的全连接参数个数为10^6 * 10^6=10^12,数目非常之大,基本很难训练。
一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。网络部分连通的思想,也是受启发于生物学里面的视觉系统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激)。如下图所示:左图为全连接,右图为局部连接。
在上右图中,假如每个神经元只和10*10个像素值相连,那么权值数据为10^6*100=10^8个参数(在有padding=same,stride=1,即输出输出尺寸相同,相邻两个卷积核距离1个像素的情况下计算得到),减少为原来的千分之一。而那10*10个像素值对应的10*10个参数,其实就相当于卷积操作。
注:感受野(receptive field),其大小等同于卷积核的大小(比如说5×5)。
权值共享
通过局部连接处理后,神经元之间的连接个数已经有所减少。可是实际上并没有减少很多,参数数量还是很大。而权值共享就是来解决这个问题的,它能显著降低参数的数量。该如何理解权值共享呢?首先从生物学意义上来看,相邻神经元的活性相似,从而它们可以共享相同的连接权值。其次单从数据特征上来看,我们可以把每个卷积核当作一种特征提取方式,而这种方式与图像等数据的位置无关。这就意味着,对于同一个卷积核,它在一个区域提取到的特征,也能适用于于其他区域。
在上面的局部连接中,每个神经元都对应100个参数,一共10^6个神经元,如果这10^6个神经元的100个参数都是相等的,那么参数数目就变为100了。由此可见,权值共享可以大大减少网络的参数。
注:上面说明均是在一个卷积核的情况下。
池化
池化一般分为max pooling和average pooling。我们定义池化窗口的大小为sizeX,即下图中红色正方形的边长,定义两个相邻池化窗口的水平位移/竖直位移为stride。一般池化由于每一池化窗口都是不重复的,所以sizeX=stride。最大池化为取窗口中最大的那个值,平均池化为取窗口中所有数的平均值。
如上图所示,为最大池化,其中sizeX=stride=2。
经过池化层之后,模型参数会减少很多。
参考文献:
https://yq.aliyun.com/articles/161164
http://www.cnblogs.com/zf-blog/p/6075286.html
一文读懂卷积神经网络CNN