卷积神经网络(CNN)
卷积神经网络(Convolutional Neural Network, CNN)是一种专门用于处理数据有格子状拓扑结构的深度学习模型,广泛应用于图像和视频识别、推荐系统、自然语言处理等领域。以下是卷积神经网络的工作过程及其各个组成部分的详细解释,并举例说明。
1. 卷积层(Convolutional Layer)
卷积层是CNN的核心部分,它通过卷积操作提取输入数据的特征。卷积操作是将一个小的滤波器(filter)在输入数据上滑动,并计算滤波器与输入数据局部区域的点积。
卷积过程
- 滤波器(Filter)/核(Kernel):一个小矩阵,如3x3或5x5矩阵。假设我们有一个3x3的滤波器。
- 滑动(Stride):滤波器在输入数据上滑动的步长。通常设定为1。
- 填充(Padding):为了保持输入和输出的尺寸一致,可以在输入数据的边缘添加额外的像素(通常填充为0)。常用的有“valid”(不填充)和“same”(填充使输出尺寸与输入相同)。
示例
假设输入是一个5x5的图像矩阵,滤波器是一个3x3的矩阵,滑动步长为1,没有填充。
输入:
1 1 1 0 0
0 1 1 1 0
0 0 0 1 1
1 1 0 0 0
0 1 1 1 0
滤波器:
1 0 1
0 1 0
1 0 1
卷积计算步骤:
- 将滤波器放在输入矩阵的左上角,计算点积:
- 滑动滤波器,继续计算,直到覆盖整个输入矩阵。
输出特征图(Feature Map):
3 2 2
1 2 3
3 1 2
2. 激活函数(Activation Function)
在每个卷积层之后,通常会应用一个非线性激活函数。最常用的是ReLU(Rectified Linear Unit),它将所有负值变为零,从而引入非线性。
ReLU函数
ReLU(x) = max(0, x)
3. 池化层(Pooling Layer)
池化层通过对特征图进行下采样,减少其尺寸,从而降低计算量和防止过拟合。常见的池化操作有最大池化(Max Pooling)和平均池化(Average Pooling)。
最大池化示例(2x2窗口,步长为2)
输入特征图:
3 2 2
1 2 3
3 1 2
输出池化图:
3 3
3 2
4. 全连接层(Fully Connected Layer)
在网络的最后,通常会有一个或多个全连接层,它们将前面的特征图展平并通过若干个全连接层,输出最终的分类结果。
工作过程总结
- 输入层:接收原始数据,如图像。
- 卷积层 + 激活函数:提取特征并引入非线性。
- 池化层:下采样,减少数据维度。
- 重复卷积层和池化层:进一步提取高级特征。
- 展平(Flatten):将多维特征图展平为一维。
- 全连接层:进行分类或回归任务。
举例说明
假设要识别手写数字(0-9),我们可以设计一个简单的CNN:
- 输入层:28x28的灰度图像。
- 第一卷积层:使用32个3x3的滤波器,输出28x28x32的特征图。
- ReLU激活函数。
- 第一池化层:2x2最大池化,输出14x14x32的特征图。
- 第二卷积层:使用64个3x3的滤波器,输出14x14x64的特征图。
- ReLU激活函数。
- 第二池化层:2x2最大池化,输出7x7x64的特征图。
- 展平层:将7x7x64的特征图展平为一维向量,大小为3136。
- 全连接层:128个神经元,ReLU激活。
- 输出层:10个神经元,Softmax激活,输出每个数字的概率。
通过这种结构,CNN能够有效地提取图像中的特征并进行分类。