卷积神经网络简介
卷积神经网络(Convolutional Neural Network, CNN)是一种深度学习模型,尤其擅长处理图像和视频等高维度的数据。CNN 通过模仿人类视觉系统的工作方式,自动学习数据中的空间层次结构,使得它在计算机视觉任务中表现出色,如图像分类、目标检测等。
与传统的神经网络不同,CNN 通过引入卷积层和池化层,有效地减少了参数数量并提升了计算效率。卷积层使用可学习的过滤器(Filter)扫描输入数据,提取特征,而池化层则通过下采样减少数据维度,进一步压缩信息。这种层次化的特征提取方式,使得 CNN 能够从低层次的边缘和纹理,一直到高层次的复杂对象,逐步构建对图像的理解。
自从 LeCun 等人在 1998 年提出的 LeNet-5 被用于手写数字识别以来,CNN 已经在多个领域取得了突破性进展。在医学图像诊断到自动驾驶,都有不错的表现力和泛化能力。
在卷积神经网络(CNN)的基本构建模块部分,我们需要详细解释每个模块的作用、原理和在网络中的具体位置。以下是对各个模块的扩充内容,帮助更深入地理解 CNN 的工作机制。
卷积神经网络的基本构建模块
1. 输入层(Input Layer)
输入层是 CNN 的起点,接收原始数据并准备进行处理。对于图像数据,输入层通常是一个三维的矩阵,包含高度、宽度和通道数(如 RGB 图像有三个通道:彩色图像的每个像素都可以描述为红色(red)、绿色(green)、蓝色(blue)的组合,这 3 种颜色就称为图像的 3 个色彩通道。这种颜色描述方式称为 RGB 色彩模型,常用于在屏幕上显示颜色。)
将代表图像的三维张量输入到网络里之前,需要先将它“拉平”,对于一张尺寸为100*100像素的图像,张量有 100 × 100 × 3 个数字,所以一张图像是由100×100×3 个数字所组成的,每个数值是某一个像素在某一个通道下的颜色强度。把这些数字排成一排就是一个巨大的向量。这个很长的向量是网络的输入。(在输入之前记得要把所有图像都调成一样的尺寸)。
2. 卷积层(Convolutional Layer)
- 卷积层是 CNN 的核心组件,通过卷积操作来提取输入数据的特征。卷积操作是将卷积核(Filter)在输入数据上滑动,每次计算局部区域的加权和。
- 卷积核(Filters/Kernels):
- 是一个小尺寸的矩阵,用于在图像上滑动,并逐像素地计算点积,从而提取特征。
- 不同的卷积核可以提取不同的特征,如边缘、角点和纹理等。
- 步长(Stride):
- 决定了卷积核在输入数据上滑动的步幅。较大的步长会减少输出特征图的尺寸。
- 填充(Padding):
- 通过在输入数据的边缘添加额外的像素(通常为零),以控制输出的尺寸。常见的填充方式有 ‘valid’(无填充)和 ‘same’(输出与输入尺寸相同)。
- 特征图(Feature Maps):
- 卷积层的输出称为特征图,它反映了卷积核在不同位置上提取到的特征。
- 卷积层的输出称为特征图,它反映了卷积核在不同位置上提取到的特征。
3. 激活函数层(Activation Layer)
- 激活函数层通常紧跟在卷积层之后,增加网络的非线性能力。常用的激活函数包括 ReLU(Rectified Linear Unit)、Sigmoid 和 Tanh 等。
- ReLU (Rectified Linear Unit):
- ReLU 是最常用的激活函数,它将所有负值变为零,保持正值不变。这样可以加快模型的收敛速度,并减少梯度消失问题。
- Leaky ReLU:
- 类似于 ReLU,但在负值区域有一个很小的斜率,以保留一些负值信息,从而改善训练效果。
4. 池化层(Pooling Layer)
- 池化层用于减少特征图的尺寸,同时保留重要的特征,降低计算量和模型的复杂性。池化层通过下采样操作缩小特征图。
- 最大池化(Max Pooling):
- 选择池化窗口内的最大值作为输出,保留最强的特征响应,通常用于捕捉显著的特征。
- 平均池化(Average Pooling):
- 计算池化窗口内所有值的平均值,更多用于特征的平滑处理。
- 步长和池化窗口:
- 池化窗口的大小和步长决定了输出特征图的尺寸。较大的池化窗口或步长会进一步减少输出尺寸。
5. 平铺层(Flattening Layer)
- 平铺层将卷积和池化后的多维特征图展开为一维向量,以便传递给全连接层。
- 这个过程不会对数据进行任何计算,只是将多维数组转换为一维数组,以连接卷积部分和全连接部分。
6. 全连接层(Fully Connected Layer)
- 全连接层将前面提取到的特征综合起来,进行分类或回归等任务。每一个神经元都与上一层的所有输出连接,类似于传统神经网络中的连接方式。
- 权重矩阵:
- 全连接层包含大量参数(权重和偏置),它们用于将输入特征映射到输出类别。
- 输出层:
- 通常,输出层会使用 Softmax 函数来进行多分类,将网络输出转换为概率分布;或使用 Sigmoid 函数进行二分类。
7. 输出层(Output Layer)
- 输出层是 CNN 的最后一层,输出预测结果。对于分类问题,输出层的神经元数量等于类别数量。
- 损失函数:
- 在训练过程中,输出层会计算损失函数(如交叉熵损失),用以评估模型的预测结果与真实标签之间的差距,并指导模型参数的更新。
- 在训练过程中,输出层会计算损失函数(如交叉熵损失),用以评估模型的预测结果与真实标签之间的差距,并指导模型参数的更新。
总结
卷积神经网络的各个构建模块相互协作,形成了一个高效的特征提取和学习框架。卷积层负责初步的特征提取,激活函数增加非线性,池化层减少数据维度,全连接层进行特征整合并最终输出结果。通过这些模块的堆叠和组合,CNN 可以逐层构建从低级到高级的特征表示,最终实现对数据的高效分类或其他任务。