目录
一、什么是卷积神经网络CNN
1.1、核心概念
卷积神经网络(Convolutional Neural Network)是含有卷积层的神经网络,卷积层的作用是用来自动学习,提取图像特征,CNN网络主要由三部分构成:卷积层,池化层和全连接成构成:
- 卷积层负责提取图像中的局部特征;
- 池化层用来大幅降低参数量级(降维);
- 全连接层用来输出想要的结果。
1.2、卷积层
主要功能是通过卷积运算从输入数据中提取特征,卷积层使用一组科学系的滤波器(filters)或者卷积核(kernels),这些滤波器在输入数据上滑动并计算卷积,每个滤波器会检测输入数据中的特定模式,如边缘,纹理等,主要参数:
- 滤波器大小:通常为3×3、5×5等
- 步长(stride):滤波器每次移动的像素数
- 填充(padding):在输入边缘添加像素以控制输出尺寸
卷积核其实就是一个小的数值矩阵,通常是正方形,比如3*3,5*5等大小,这个矩阵中的每个数值都是可以学习和调整的参数
- 如果卷积核是3×3大小,那它就像一个小窗口,一次只能看到图像的一小部分(3×3像素区域)
- 这个窗口在整个图像上滑动,每到一个位置就计算一次"匹配度"(点积)
在神经网络中,卷积核的值不是手动设计的,而是通过训练自动学习的
二、什么是卷积计算
卷积是数学中的一种特殊运算,在信号处理和深度学习领域有广泛的应用,
- 开始时,卷积核的值是随机初始化的
- 网络通过大量图像进行训练
- 根据任务的需要,卷积核的值会被逐渐调整
- 训练完成后,第一层的卷积核通常会学习到边缘、纹理等低级特征
- 更深层的卷积核则会学习到更复杂的特征,如眼睛、鼻子、轮廓等
在图像处理和卷积神经网络中,使用的是二位离散卷积:
(I * K)[i,j] = ∑∑ I[i+m,j+n]K[m,n]
卷积计算是:
- 将卷积核翻转180度
- 将翻转后的卷积核在输入数据上滑动
- 在每个位置计算卷积核与对应输入区域的元素乘积之和
在卷积神经网络中实际使用的是互相关(cross-correlation)而非严格数学定义的卷积,区别在于互相关不需要翻转卷积核
2.1、卷积计算的例子:
假设我们有一个5×5的输入矩阵和一个3×3的卷积核:
输入;
1 2 3 1 2
3 1 2 1 3
2 3 1 2 1
1 2 3 1 2
3 1 2 1 3
卷积核:
1 0 1
0 1 0
1 0 1
计算单个输出位置的值,例如输出的[0,0]位置:
- 取输入的左上角3×3区域
- 将其与卷积核对应元素相乘后求和
- 结果为: 1×1 + 2×0 + 3×1 + 3×0 + 1×1 + 2×0 + 2×1 + 3×0 + 1×1 = 8
2.2、点积
在代数形式中,点积等于对应元素的乘积和:
A·B = a₁×b₁ + a₂×b₂ + ... + aₙ×bₙ
点积可以理解为:
- 一个向量在另一个向量方向上的投影长度与另一向量长度的乘积
- 两个向量相似度的度量(夹角余弦)
- 对应位置元素乘积的总和
假设有两个三维向量:
- A = [2, 3, 4]
- B = [1, 5, 2]
它们的点积为:
A·B = 2×1 + 3×5 + 4×2 = 2 + 15 + 8 = 25
2.3、卷积与点积的关系
在卷积运算中,我们实际上是在计算卷积核与输入的局部区域之间的点积:
- 卷积核可以视为一个向量(将矩阵展平)
- 输入的每个局部区域也可以视为一个向量
- 卷积结果中的每个元素是对应局部区域与卷积核的点积
总的来说,点积是卷积计算的基础操作,而卷积则是在不同位置重复应用点积的过程,用于检测输入数据中的局部模式或特征
2.4、Padding(填充)
Padding是指在输入数据(通常是图像)的边缘的周围添加额外的像素值,再进行卷积操作,在卷积操作中,卷积核(滤波器)会在输入上滑动并计算卷积值,当卷积核位于边缘时,如果不使用padding,卷积核会“悬空”,无法完全覆盖输入数据,导致输出特征图的尺寸小于输入,padding最常见的填充值是0(zero padding)
2.4.1、Padding的主要作用
1、控制输出特征图尺寸
Padding最重要的作用是控制卷积操作后输出特征图的空间尺寸
如果不适用padding,输出特征图的尺寸会按照以下公式计算:
输出尺寸 = (输入尺寸 - 卷积核尺寸) / 步长 + 1
例如,对于32×32的输入图像,使用5×5的卷积核和步长为1时,输出特征图将是28×28。
而当添加padding后,可以保持输出特征图与输入相同尺寸("Same padding"),计算公式为:
padding = (卷积核尺寸 - 1) / 2 (当步长为1时)
2、保留边缘信息
不使用padding时,图像边缘的像素只被卷积操作使用一次,而中心区域的像素则被多次使用,这导致模型对边缘信息的学习不足。
添加padding后,边缘像素参与的卷积计算次数增加,使得模型能够更好地保留和学习图像边缘的特征信息,提高特征提取的效果。
3. 支持深层网络训练
在深层CNN中,如果每次卷积都不使用padding,特征图的尺寸会迅速减小,可能只经过几层就变得很小,限制了网络的深度。
使用padding可以保持特征图尺寸,使得我们能够构建更深的网络架构,从而学习更复杂的特征表示。
2.4.2、Stride
按照步长为1来移动卷积核,计算特征图:
如果把Stride增大为2,也可以提取特征图:
2.5、多通道卷积计算
实际中的图像是几多个通道组成的,多通道卷积就是使用一组滤波器(filter)在多个通道上同时滑动,每个滤波器负责检查自己对应的那一层,每个滤波器在各自位置上计算卷积,然后将各自卷积计算的值相加,得到一个新的特征图
2.6、多卷积核卷积计算
当使用多个卷积核进行特征提取时,每个卷积核就像是一个专门的"探测器",负责寻找输入数据中的不同模式或特征
2.6.1、基本工作原理
使用多个卷积核时,特征提取的过程是这样的:
- 并行探测:每个卷积核独立地在输入数据上滑动,生成自己的特征图。
- 特征图集合:假设有N个卷积核,就会产生N个特征图,每个特征图代表输入数据中一种特定的特征。
- 特征整合:这N个特征图组合在一起,形成下一层的输入,包含了丰富的特征信息
2.6.2、具体操作方法
- 卷积核设计:
-
- 使用不同初始权重的多个卷积核
- 每个卷积核尺寸通常相同,但内部权重不同
- 常见的卷积核数量从几个到几百个不等
- 特征图生成:
-
- 每个卷积核产生一个特征图
- 如果有64个卷积核,就会得到64个特征图
- 批量规范化和激活:
-
- 对特征图应用批量规范化使训练更稳定
- 通过ReLU等激活函数引入非线性
- 特征组合:
-
- 将所有特征图在通道维度上堆叠
- 得到的多通道输出传递给下一层
多个卷积核工作就像多个专家同时分析同一个问题
- 有的卷积核可能专注于检测边缘
- 有的可能擅长识别纹理
- 有的可能对特定颜色变化敏感
- 有的可能检测特定形状
通过这种"集体智慧"的方式,网络能够提取更全面、更丰富的特征信息,为后续的分类或检测任务提供更好的基础。
2.7、特征图大小
输出特征图的大小与以下参数息息相关:
- size: 卷积核/过滤器大小,一般会选择为奇数,比如有 11 、33、5*5
- Padding: 零填充的方式
- Stride: 步长
计算方法:
- 输入图像大小: W x W
- 卷积核大小: F x F
- Stride: S
- Padding: P
- 输出图像大小: N x N