如何计算CNN的参数量?image.png

根据图中的顺序分析计算:

  • 输入层(input):input层没有引进变量
  • 卷积(convolution):卷积层则引入了”卷积核/filter”,假设卷积核大小为nm,图片有l个通道(channels),而选用的”卷积核filter”有 k个,再加上bias,可以得到引进的参数有:* ( n ∗ m ∗ l + 1 ) ∗ k
  • 激活(activation):仅对原来的矩阵做了一个变换,不会引进新的参数
  • 池化(pooling):与激活层同理,仅对原来的矩阵做了一个变换,不会引进新的参数
  • 拉平(Flatten):拉平操作仅仅对矩阵进行了reshape,也不会引进新的变量
  • 全连接(Fully Connected):全连接层就是对前后神经元做了仿射变换CNN - 图3,引进的参数有权重和偏置,假设n个神经元连接m个神经元,则引入的参数有 ( n + 1 ) ∗ m
  • 计算分类概率(Softmax):仅对原来的矩阵做了一个变换,不会引进新的参数

原文链接

CNN中的权值共享和局部连接

局部连接保证学习后的过滤器对局部的输入特征有最强的响应,减少参数数量,使运算变得简洁、高效能够在超大规模数据集上运算。
当局部特征之间有较强的相关性,适合用全连接,在不同区域有不同的特征分布时,适合用局部连接(比如人脸识别,希望在不同的部分得到不同的特征提取,比如眼睛、嘴巴、鼻子…)

  1. 权值共享

权值共享是指,给定一张图片用filter去扫描这个图片,filter即为权重,这张图片每个位置是被相同的filter扫描的,所以为共享
图片.png
一个mm的卷积核在图片上进行特征提取,若图片的channels=k,则参数量为mmk。
图片.png
若不进行权值共享,当strides=3时,参数量为W(width)
H(height)*K(chanels)。

  1. 局部连接

    每个神经元只与输入神经元的一部分区域进行连接,只感知局部,而不是整幅图像。卷积网络中神经元只在空间维度上局部连接,在深度上是全部连接(随着卷积堆积加深,在更深的层次上可以得到全部信息)。
    图片.png
    如果不进行局部连接,即每个元素单元与隐层的神经原进行全连接。此时参数量为WHN(隐藏层节点数),当像素矩阵很大时,参数数目会非常多,导致网络难以训练。

    多通道卷积

    多通道卷积1

    以彩色图像为例,包含三个通道,分别表示RGB三原色的像素值,输入为(3,5,5),分别表示3个通道,每个通道的宽为5,高为5。假设卷积核只有1个,卷积核通道为3,每个通道的卷积核大小仍为3x3,padding=0,stride=1。
    卷积过程如下,每一个通道的像素值与对应的卷积核通道的数值进行卷积,因此每一个通道会对应一个输出卷积结果,三个卷积结果对应位置累加求和,得到最终的卷积结果(这里卷积输出结果通道只有1个,因为卷积核只有1个。卷积多输出通道下面会继续讲到)。
    可以这么理解:最终得到的卷积结果是原始图像各个通道上的综合信息结果。
    image.png
    上述过程中,每一个卷积核的通道数量,必须要求与输入通道数量一致,因为要对每一个通道的像素值要进行卷积运算,所以每一个卷积核的通道数量必须要与输入通道数量保持一致
    我们把上述图像通道如果放在一块,计算原理过程还是与上面一样,堆叠后的表示如下:
    image.png

    多通道卷积2

    在上面的多通道卷积1中,输出的卷积结果只有1个通道,把整个卷积的整个过程抽象表示,过程如下:
    image.png
    即:由于只有一个卷积核,因此卷积后只输出单通道的卷积结果(黄色的块状部分表示一个卷积核,黄色块状是由三个通道堆叠在一起表示的,每一个黄色通道与输入卷积通道分别进行卷积,也就是channel数量要保持一致,图片组这里只是堆叠放在一起表示而已)。
    那么,如果要卷积后也输出多通道,增加卷积核(filers)的数量即可,示意图如下:
    image.png
    备注:上面的feature map的颜色,只是为了表示不同的卷积核对应的输出通道结果,不是表示对应的输出颜色

    1*1卷积核作用

    (1)降维或升维(增加或者减少深度)。图左为2个11的卷积核降维,图右为4个11卷积核升维。
    image.png
    (2)保证feature map不变的情况下通过激活函数增加非线性

pooling层作用

  1. 1)整合特征,减少计算复杂度<br /> 2)对不同位置的特征进行聚合统计<br /> 3)卷积窗口有重叠,因此得到的结果有大量冗余,用pooling可以消除冗余(pooling会导致微小的局部变形),权重共享可以带来平移不变性。<br /> 参考:<br /> [https://blog.csdn.net/kele_imon/article/details/79532286](https://blog.csdn.net/kele_imon/article/details/79532286)

池化层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征

卷积层作用

  1. 1)相当于一个特征提取器来提取特征<br /> 2)提供了位置信息<br /> 3)减少了参数个数

pooling层的反向传播

  1. 参考:[https://blog.csdn.net/qq_21190081/article/details/72871704](https://blog.csdn.net/qq_21190081/article/details/72871704)(看图即可)

relu函数优点

  1. 1)防止梯度弥散(导数为1)<br /> 2)稀疏激活性(负半轴导数为0,不会更新梯度)<br /> 3)加快计算(导数好计算)<br /> 参考:[https://blog.csdn.net/qq_21190081/article/details/64127103](https://blog.csdn.net/qq_21190081/article/details/64127103)

NLP中的CNN

在NLP领域,一个矩阵的每一行表示一个词的向量。 使用filter滑过整个矩阵的整个行(words)。因此,NLP中filter的宽度通常是与输入矩阵的宽度(每个词的维度)相同。filter的高度是可以变动的,与矩阵的高度相关(一句话的单词数)。下图采用多尺度的filter:
image.png