您的位置  > 互联网

卷积神经网络被用于图像识别、语音识别等各种场合

1、全连接层 1.1 全连接层网络结构

前面介绍的神经网络中,相邻层的所有神经元之间都存在连接,称为全连接。 此外,我们使用层实现全连接层。 如果使用这一层,可以通过图7-1所示的网络结构实现5层全连接神经网络。

该层后面是激活函数 ReLU 层(或多个层)。 这里堆叠了4层——ReLU组合,然后第5层是本层,最后本层输出最终结果(概率)。

全连接层的主要功能是对输入图像经过卷积和池化操作后提取的特征进行压缩,并根据压缩后的特征完成模型的分类功能。 图4-6展示了全连接层的简化流程。

事实上,全连接层的计算比卷积层和池化层更简单。 图4-6所示的输入是我们通过卷积层和池化层提取的输入图像的核心特征,与全连接层中定义的相同。 权重参数相乘,最终压缩为仅 10 个输出参数。 这10个输出参数实际上是一个分类的结果。 经过激活函数的进一步处理,我们的分类预测结果可以变得更加明显。 输入10个参数到激活函数中,激活函数的输出就是模型预测的输入图像各类别的似然值。

1.2 全连接层缺陷

在全连接层中,相邻层的神经元全部连接在一起,输出的数量可以任意确定。

全连接层存在哪些问题? 也就是说,数据的形状被“忽略”。 例如,当输入数据是图像时,图像通常在高度、长度和通道方向上是3维形状。 然而,当输入到全连接层时,需要将3维数据展平为1维数据。 事实上,在上面提到的使用 MNIST 数据集的例子中,输入图像是一个具有 1 个通道、28 个像素高、28 个像素长的 (1, 28, 28) 形状,但它排列在 1 列中,有 784 个数据形式输入到初始层。

图像是一个3维的形状,这个形状应该包含重要的空间信息。 例如,空间上相邻的像素具有相似的值,RBG的每个通道具有紧密的相关性,而相距较远的像素之间则没有相关性。 3D 形状中可能隐藏着一些值得提取的基本模式。

然而,由于全连接层忽略形状并将所有输入数据作为相同神经元(相同维度的神经元)处理,因此它无法利用与形状相关的信息。

2. 卷积神经网络

卷积层(Layer)的主要功能是从输入数据中提取特征,而完成这一功能的是卷积层中的卷积核()。

我们可以将卷积核视为具有指定窗口大小的扫描仪。 扫描仪通过一次又一次扫描输入数据来提取数据中的特征。 如果我们输入图像数据,那么经过卷积核的处理,我们就可以识别出图像中的重要特征。

那么,这个卷积核在卷积层中是如何定义的呢? 卷积层如何工作? 下面通过一个例子进行说明。

假设有一张32×32×3的输入图像,其中32×32指的是图像的高×宽,3指的是具有R、G、B三个颜色通道的图像,即红、绿、蓝。蓝色的。 (蓝色),我们定义一个窗口大小为5×5×3的卷积核,其中5×5指的是卷积核的高×宽,3指的是卷积核的深度,对应于R 、G 和 B 三个颜色通道。 这样做的目的是当卷积核窗口在输入图像上滑动时,立即对其三个颜色通道进行卷积运算。

注意,如果我们的原始输入数据都是图像,那么我们定义的卷积核窗口的宽度和高度要小于输入图像的宽度和高度。 比较常用的卷积核窗口的宽度和高度是3×3和5×5。

定义卷积核的深度时,只需保证与输入图像的颜色通道一致即可。 如果输入图像有3个颜色通道,则卷积核的深度为3; 如果输入图像具有单一颜色通道,则卷积核的深度为1,依此类推。 图 4-1 显示了具有单一颜色通道的输入图像的卷积过程。

如图7-2所示,CNN中添加了新的(卷积层)和(池化层)层。 CNN各层的连接顺序为-ReLU-()(有时会省略层)。 这可以理解为之前的-ReLU连接已经被-ReLU-()连接替代了。

还需要注意的是,在图7-2的CNN中,在靠近输出的层中使用了之前的-ReLU组合。 此外,在最终输出层中使用了先前的 - 的组合。 这些是一般 CNN 中的常见结构。

2.1 卷积相对于全连接层的优点

卷积层可以保持形状。 当输入数据是图像时,卷积层接收3维数据形式的输入数据,并以相同的3维数据形式输出到下一层。

因此,在CNN中,有可能(可能)正确理解图像等具有形状的数据。

2.2 卷积运算

卷积层所进行的处理就是卷积运算。 卷积运算相当于图像处理中的“滤波器运算”。

该滤波器在一些文献中也被称为“卷积核”。

计算过程如下:

1 * 2 + 2 * 0 + 3 * 1 + 0 * 0 + 1 * 1 + 2 * 2 + 3 * 1 + 0 * 0 + 1 * 2 = 15
2 * 2 + 3 * 0 + 0 * 1 + 1 * 0 + 2 * 1 + 3 * 2 + 0 * 1 + 1 * 0 + 2 * 2 = 16

卷积运算的计算顺序如图7-4所示。 对于输入数据,卷积运算滑动滤波器的窗口并每隔一段时间应用它。 这里所说的窗口是指图7-4中灰色的3×3部分。 如图7-4所示,滤波器每个位置的元素与输入的相应元素相乘,然后求和(有时这种计算称为乘法累加运算)。 然后,将此结果保存到输出的相应位置。 在所有位置重复这个过程,得到卷积运算的输出。

在CNN中,滤波器的参数对应于之前的权重。 此外,CNN也存在偏见。 包含偏置的卷积运算的处理流程如图7-5所示。

如图 7-5 所示,对应用过滤器的数据添加了偏差。 通常只有 1 个偏移量 (1 × 1)(在本例中,与应用滤波器的 4 个数据点相比,偏移量为 1 个),并且该值会添加到应用滤波器的所有元素。

2.3 灌装

在对卷积层进行处理之前,有时需要在输入数据的周围填充固定的数据(如0等)。 这称为(),是卷积运算中经常使用的过程。

例如,在图 7-6 的示例中,大小为 1 的填充应用于大小为 (4, 4) 的输入数据。 “填充宽度1”表示用0填充周围区域,宽度为1像素。

如图7-6所示,通过,大小为(4, 4)的输入数据变成了(6, 6)的形状。 然后,应用大小为 (3, 3) 的滤波器,产生大小为 (4, 4) 的输出数据。 在本示例中,填充设置为 1,但填充值也可以设置为任何整数,例如 2、3 等。

填充主要用于调整输出大小。 例如,当将过滤器 (3, 3) 应用于大小为 (4, 4) 的输入数据时,输出大小变为 (2, 2),相当于输出大小与输入大小相比减少了 2 个元素。 这可能成为重复执行多个卷积运算的深度网络中的一个问题。

为什么? 因为如果每次进行卷积运算时都减少空间,那么在某个时刻输出大小可能会变成1,使得卷积运算不再可能。 为了避免这种情况,使用了填充。

在刚才的示例中,如果填充宽度设置为 1,则输出大小相对于输入大小 (4, 4) 将保持相同 (4, 4)。 因此,卷积运算可以在保持空间大小不变的情况下将数据传递到下一层。

2.4 跨步

应用滤波器的位置间隔称为 ()。 在前面的示例中,步幅均为 1。如果将步幅设置为 2,如图 7-7 所示,则应用滤波器的窗口间隔变为 2 个元素。

在图 7-7 的示例中,对输入大小 (7, 7) 的数据应用了步幅为 2 的过滤器。 通过将步幅设置为 2,输出大小变为 (3, 3)。 像这样, 可以指定应用过滤器的间隔。

综上所述,增大后,输出尺寸会变小。 增加后,输出尺寸会变大。

如果将这种关系写成方程式会发生什么? 接下来,我们看看如何计算填充和步幅的输出大小。

这里,假设输入大小为(H,W),滤波器大小为(FH,FW),输出大小为(OH,OW),为P,为S。此时,输出大小可以通过公式(7.1)计算。

计算示例如下:

如果公式 7.1 中的输出大小无法整除(结果为小数时),则必须采取报告错误等对策。 顺便说一句,根据深度学习框架,当一个值无法整除时,它可能会四舍五入到最接近的整数,并且操作将继续而不报告错误。

2.5 三维数据的卷积运算

图7-8是卷积运算的例子,图7-9是计算序列。 这里,我们以3通道数据为例来展示卷积运算的结果。 与2维数据(图7-3中的示例)相比,可以发现深度方向(通道方向)的特征图有所增加。 当通道方向有多个特征图时,将输入数据与滤波器按通道进行卷积,将结果相加得到输出。

需要注意的是,在3维数据的卷积运算中,输入数据和滤波器的通道数必须设置为相同的值。 在此示例中,输入数据和过滤器具有相同的通道数,即 3。

过滤器大小可以设置为任何值(但是,每个通道的过滤器大小必须相同)。 在本例中,过滤器大小为 (3, 3),但也可以设置为任何值,例如 (2, 2)、(1, 1)、(5, 5) 等。

同样,通道数只能设置为与输入数据的通道数相同的值(本例中为 3)。

2.6 多滤波器(卷积核)操作

通过将数据和滤波器视为矩形块,可以很容易地理解 3D 数据上的卷积运算。

正方形是一个 3 维长方体,如图 7-10 所示。 将 3 维数据表示为多维数组时,写入顺序为 (, , width)。 例如,通道号为C、高度为H、长度为W的数据的形状可以写为(C,H,W)。 过滤器也是如此,应该按照(,,宽度)的顺序编写。 例如,当通道数为C,滤波器高度为FH(),长度为FW(Width)时,可以写为(C,FH,FW)。

如果想要在通道方向上有多次卷积运算的输出,就需要使用多个滤波器(权重)。 如果用图表来表示,如图7-11所示。

在图7-11中,通过应用FN滤波器,还生成了FN输出特征图。 如果将这些FN特征图放在一起,就得到一个形状为(FN,OH,OW)的盒子。 将这个块传递到下一层就是CNN的处理流程。

如图7-11所示,对于卷积运算的滤波器,还必须考虑滤波器的数量。 因此,作为4维数据,滤波器的权重数据应该按照(, , , width)的顺序写入。 例如,如果有20个滤波器,通道数为3,尺寸为5×5,则可以写为(20,3,5,5)。

卷积运算存在偏差(如在全连接层中)。 在图7-11的例子中,如果再加上偏移加法操作,结果将如下图7-12所示。

在图 7-12 中,每个通道只有一个偏移。 这里,偏置的形状为(FN, 1, 1),滤波器输出结果的形状为(FN, OH,OW)。 当这两个块相加时,滤波器输出(FN、OH、OW)会偏移相同的逐通道值。 另外,在添加不同形状的块时,基于NumPy的广播功能可以轻松实现。

2.7 批处理

批处理可以在学习过程中实现高效处理和与小批量的对应。

我们希望卷积操作也对应于批处理。 为此,每层之间传递的数据需要保存为 4 维数据。 具体来说,数据按照(、、、、宽度)的顺序保存。 例如,当图7-12的处理改为批量处理N个数据时,数据的形状如图7-13所示。

在图 7-13 的数据流的批处理版本中,批处理维度被添加在每个数据的开头。 这样,数据就以 4 维形状在各层之间传输。 这里需要注意的是,网络之间传输的是4维数据,并对这N条数据进行卷积运算。 换句话说,批处理将N次处理汇总为一个过程。