全连接

如果我们有一张28*28的图片,我们想要使用神经网络来进行识别或分类,那么如果展开输入层有28*28=784个输入节点,与之相连的隐含层,每个神经元如果与输入层全连接,那么参数就有784个,如果图片更大,参数就会多的难以接受,因此实现全连接的神经网络是不现实的,我们需要一些手段来处理。
卷积层

1.局部连接

我们输入的数据是图片,而图片有一个性质就是局部相关,因此我们可以让隐含层的神经元与输入层的局部输入相连接,连接的空间叫感受视野。
卷积层
例如,感受视野大小是3*3,那么隐含层的每个神经元只与输入层的3*3=9个神经元连接,权值就只有9个,还有一个偏置值,隐含层每个神经元的权值共有3*3+1=10个.
如果我们将权值排列成的矩阵147258369 ,图片像素写成矩阵111111111
单个神经元的输出等于di=1xiwi=11+21+...+81+91
卷积层
可以看到输入层只有局部和隐含层的神经元相连。

2.权值共享

隐含层每个神经元都有10个权值,如果隐含层神经元比较多,例如有1000个神经元,权值就有10000个,还是让人难以接受。我们可以使用权值共享来进一步减少权值的个数。权值共享是指隐含层每个神经元都公用同一组权值。
可以看到连接到同一个隐含层神经元的权值都相同。
例如,不共享时,一个神经元的权值矩阵是147258369另一个是101010101,很明显这两个神经元拥有不同的权值,当共享时,只会有一个权值矩阵,任何隐含层的神经元都使用同一组权值。瞬间权值由10000变成了10,因为隐含层的权值个数不再与隐含层神经元个数相关,只与权值矩阵的大小相关。各个神经元的计算就相当于一个模板(权值矩阵)在图片上(神经元输入)卷积移动,所以这一层可以称之为卷积层。这个时候共用的权值矩阵可以称之为滤波器。
卷积层
那么,为什么可以使用权值共享呢?我们可以将权值矩阵看作是某个特征模板,图片上的特征与特征在图片的位置无关,这个模板就像筛子一样在图像上四处滑动,将那些符合条件的部分取出来,不同的模板看作提取不同的特征。

隐含层神经元个数

局部感知和权值共享使权值个数骤减,但是我们还是不知道隐含层神经元的个数,卷积层的神经元个数是个超参数,我们可以任意设置,但其实还是要符合一些条件的。我们根据上面的动态图其实还是很好想出如何计算神经元个数的。如果图片的尺寸是W(这里都假设是正方形),感知视野是F,步长是S,零填充数量P,输出是(W-F +2P)/S+1。例如上图W=5,F=3,P=0,S=1输出为3.如果无法整除步数S,那么就通过补零P来让其整除。

**

**函数有很多种,但是通常使用ReLU函数,f(x)=max(0,x),在ReLU之前还有很多其他**函数,例如非常著名的Sigmoid函数,相比其它函数来说,ReLU函数更受青睐,这是因为它可以将神经网络的训练速度提升数倍,而并不会对模型的泛化准确度造成产生显著影响。

pooling Layer

我们通过卷积得到了一个新的矩阵,这个叫做特征图,例如我们用100个卷积模板得到100个特征图,得到这个特征图之后其实我们进行分类了,但我们通常都会周期性的加池化层,其中常用的就是最大池化,它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效地原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。池化层通常会分别作用于每个输入的特征并减小其大小。目前最常用形式的池化层是每隔2个元素从图像划分出2*2的区块,然后对每个区块中的4个数取最大值。这将会减少75%的数据量。
卷积层


总结:
1.隐含层神经元的个数就是卷积后的特征图大小

2.隐含层单个神经元权值个数就是卷积模板的大小加上偏置

3.池化层神经元的个数就是池化后的图的大小

4.池化层单个神经元权值的个数是2,一个权值(最大值池化,只取最大的那个值,所以只有一个权值)和一个偏置


CS231n课程笔记翻译:卷积神经网络笔记
技术向:一文读懂卷积神经网络CNN
卷积神经网络

相关文章:

  • 2021-05-08
  • 2021-10-17
  • 2021-08-11
  • 2021-11-20
  • 2021-09-18
  • 2021-12-19
  • 2021-06-26
  • 2021-11-25
猜你喜欢
  • 2022-01-02
  • 2021-10-24
相关资源
相似解决方案