原理
步骤1:第一层3x3卷积
当第一个3x3的卷积核(假设步长为1,没有边缘填充)应用于输入时,它覆盖了输入数据的一个3x3的区域。
此时,输出特征图中的每个元素代表了输入中一个3x3区域的信息。
步骤2:第二层3x3卷积
接下来,第二个3x3的卷积核同样应用于第一层的输出特征图。
因为第一层的输出特征图中的每个元素已经包含了原始输入中一个3x3区域的信息,所以当第二个卷积核应用于这些元素时,它实际上是在一个更大的区域内累积信息。
特别是,第二层的输出特征图中的每个元素将包含输入数据中5x5区域的信息。这是因为第二个3x3卷积核覆盖了第一层输出特征图上连续三个元素,而这些连续的三个元素各自对应于输入数据上的三个重叠的3x3区域(最主要是理解这句话),也就是说第二次运用33卷积时每一行覆盖的连续三个元素是在第一层的同一行的连续五个元素上滑动得到的,列也是如此,而每一个33窗口对应于输出特征图中的一个元素,即第二层输出特征图中的一个元素看到了原始数据的5*5区域。
通过上面的解释,我们可以看到,连续应用两个3x3卷积层可以覆盖与一个5x5卷积核相同的感受野。这意味着它可以收集来自输入数据同样大小区域的信息。但是,与一个5x5卷积层相比,使用两个3x3卷积层可以减少参数数量,增加网络深度,以及引入更多的非线性激活函数,这可以帮助网络学习更复杂的特征。
如果你不太了解卷积操作,让我们通过一个例子来可视化单层3x3卷积操作。假设我们有以下的输入数据(一个7x7的矩阵)和一个3x3的卷积核:
输入数据:
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 0 0 0 0
1 1 1 0 0 0 0
1 1 1 0 0 0 0
1 1 1 0 0 0 0
3x3卷积核 (简单起见,我们这里用全1):
1 1 1
1 1 1
1 1 1
在卷积操作中,卷积核会覆盖输入数据的3x3区域,并且对应元素相乘后求和。我们从输入数据的左上角开始,卷积核逐步向右和向下滑动。在每个位置,执行相乘和求和操作。例如,在最开始的位置,卷积核覆盖输入矩阵的左上角3x3区域:
[1 1 1]
[1 1 1]
[1 1 1]
对应元素相乘的和为9。卷积核向右滑动一个单位,再次进行相乘和求和,得到的结果也是9,依此类推。当卷积核滑动到包含0的区域时,结果会发生变化。例如,如果卷积核覆盖如下区域:
[1 1 0]
[1 1 0]
[1 1 0]
对应元素相乘的和为6。
通过这样的操作,我们得到了一个新的特征图,其大小取决于步长和边缘填充的使用。没有填充的情况下,执行这个3x3卷积的结果将是一个5x5的特征图,因为卷积核不能超过输入数据的边界。
让我们实际进行这个卷积操作并可视化输出特征图。
在这个可视化中,您可以看到:
- 输入数据:这是我们进行卷积的原始7x7矩阵,其中左上角是1,右下角是0。
- 3x3卷积核:这是我们用来扫描输入数据的滤波器,这里简化为全部元素为1的矩阵。
- 输出特征图:这是应用卷积核于输入数据后得到的结果。您可以看到,左上角的区域(纯1区域)的值最高,因为卷积核与全1相乘的结果是9(因为3x3卷积核所有元素的和是9)。当卷积核移动到包含0的区域时,输出值减小,这是因为1和0相乘的结果会比1和1相乘的结果小。
优点
这种替代的原因和好处包括:
1.参数数量的减少:一个 5x5 的卷积核包含 25 个独立的参数,而两个 3x3 的卷积核总共有 18 个参数(每个 3x3 卷积核有 9 个参数)。这减少了模型的参数数量,降低了过拟合的风险,并减少了计算需求。
2。增加的非线性:当您将两个 3x3 的卷积层叠加时,中间层通常会有一个非线性激活函数,如 ReLU。这增加了网络的非线性,允许它学习更复杂的特征。
3.有效的感受野大小:两个 3x3 的卷积层连续使用时,其有效感受野等于一个 5x5 的卷积层。换句话说,它们可以覆盖相同大小的输入区域。感受野是指网络中一个神经元能“看到”的输入数据的区域大小。
4.深度的增加:使用更多的卷积层(即使它们更小)可以增加网络的深度,这通常有助于提高网络的性能和特征提取能力,因为更深的网络可以学习更复杂的特征表示。