全连接
如果我们有一张28*28的图片,我们想要使用神经网络来进行识别或分类,那么如果展开输入层有28*28=784个输入节点,与之相连的隐含层,每个神经元如果与输入层全连接,那么参数就有784个,如果图片更大,参数就会多的难以接受,因此实现全连接的神经网络是不现实的,我们需要一些手段来处理。
1.局部连接
我们输入的数据是图片,而图片有一个性质就是局部相关,因此我们可以让隐含层的神经元与输入层的局部输入相连接,连接的空间叫感受视野。
例如,感受视野大小是3*3,那么隐含层的每个神经元只与输入层的3*3=9个神经元连接,权值就只有9个,还有一个偏置值,隐含层每个神经元的权值共有3*3+1=10个.
如果我们将权值排列成的矩阵
单个神经元的输出等于
可以看到输入层只有局部和隐含层的神经元相连。
2.权值共享
隐含层每个神经元都有10个权值,如果隐含层神经元比较多,例如有1000个神经元,权值就有10000个,还是让人难以接受。我们可以使用权值共享来进一步减少权值的个数。权值共享是指隐含层每个神经元都公用同一组权值。
可以看到连接到同一个隐含层神经元的权值都相同。
例如,不共享时,一个神经元的权值矩阵是
那么,为什么可以使用权值共享呢?我们可以将权值矩阵看作是某个特征模板,图片上的特征与特征在图片的位置无关,这个模板就像筛子一样在图像上四处滑动,将那些符合条件的部分取出来,不同的模板看作提取不同的特征。
隐含层神经元个数
局部感知和权值共享使权值个数骤减,但是我们还是不知道隐含层神经元的个数,卷积层的神经元个数是个超参数,我们可以任意设置,但其实还是要符合一些条件的。我们根据上面的动态图其实还是很好想出如何计算神经元个数的。如果图片的尺寸是W(这里都假设是正方形),感知视野是F,步长是S,零填充数量P,输出是(W-F +2P)/S+1。例如上图W=5,F=3,P=0,S=1输出为3.如果无法整除步数S,那么就通过补零P来让其整除。
**
**函数有很多种,但是通常使用ReLU函数,
pooling Layer
我们通过卷积得到了一个新的矩阵,这个叫做特征图,例如我们用100个卷积模板得到100个特征图,得到这个特征图之后其实我们进行分类了,但我们通常都会周期性的加池化层,其中常用的就是最大池化,它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效地原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。池化层通常会分别作用于每个输入的特征并减小其大小。目前最常用形式的池化层是每隔2个元素从图像划分出2*2的区块,然后对每个区块中的4个数取最大值。这将会减少75%的数据量。
总结:
1.隐含层神经元的个数就是卷积后的特征图大小
2.隐含层单个神经元权值个数就是卷积模板的大小加上偏置
3.池化层神经元的个数就是池化后的图的大小
4.池化层单个神经元权值的个数是2,一个权值(最大值池化,只取最大的那个值,所以只有一个权值)和一个偏置
CS231n课程笔记翻译:卷积神经网络笔记
技术向:一文读懂卷积神经网络CNN
卷积神经网络