深度学习模型——CNN | 卷积神经网络
CNN,即一种专门用于处理具有类似网格结构数据的深度学习模型。怎么理解CNN的全流程?这篇文章里,作者对CNN的模型结构和每一层的具体步骤等内容做了详细解读,一起来看。
一、定义
Convolutional Neural Networks /ˌkɒnvəˈluːʃən(ə)l/ /ˈnjʊərəl/
是一种专门用于处理具有类似网格结构数据的深度学习模型 。
二、CNN模型结构
接下来我们通过一个情境来理解CNN的全流程:
假设我们现在有一款智能鉴定APP,主要进行艺术品鉴定。我们要通过APP判断其中一张图片是不是古董,现在我们来了解下APP是怎么工作的吧。
输入层:
用户上传了一张古董瓷瓶照片,这张照片就是进入CNN系统的”原材料”,输入层的作用就是接收这张图片数据,并将其转换为CNN神经网络可以理解的数字形式(通常是一个三维数组,即宽度、高度、颜色通道数)。
卷积层:
鉴定师们开始工作了,他们每人手持一把放大镜(卷积核),在瓷瓶照片上移动并聚焦(卷积运算),这些放大镜专门用来搜寻特定的纹饰、釉色或工艺特征(特征提取),每位鉴定师记录下各自发现的特征(注:在这里一位鉴定师只会去找一个特征),并且每人会生成一份详细的特征报告(卷积后特征图)。
激活函数:
每份特征报告完成后,都交由魔法学徒(激活函数)进行神秘加工。他们使用魔法药水(ReLU、Sigmoid等),对报告内容进行强化(正值保持或增大)或弱化(负值转为0或压缩到一定范围内),确保突出关键特征,隐藏无关或干扰信息。
池化层:
接下来,公司经理(池化层)审查这些经过魔法加工的特征报告。他们不需要关注每个细节,而是提取每个报告的核心摘要(如最大特征或平均特征值),这样既能减少冗余信息,又能确保关键特征得以保留,便于后续的全局分析。
全连接层:
到了决策阶段,所有精炼的特征摘要被送到公司高层(全连接层),高层领导们围坐一桌,每人面前都有一份长长的清单,上面列着所有可能影响鉴定结果的因素及其权重(神经元及其连接权重)。他们根据清单讨论、打分(加权求和),共同得出初步的鉴定结论(分类概率或回归值)。
比喻解释:
全连接层就像公司的高层领导团队,他们依据精炼的特征摘要,参考各自的判断清单,集体讨论并给出初步的鉴定意见。
激活函数(再次):
初步鉴定结论出炉后,还需要最后一道魔法加持(激活函数)。这次魔法学徒用另一种魔法药水(如Softmax或Sigmoid等),确保鉴定结论符合预期格式(如概率分布),并具有良好的区分度。
比喻解释:
再次使用的激活函数如同魔法学徒为鉴定结论施加的最后的魔法,确保结论既符合规范(概率分布),又具有明确的倾向性(区分度),便于用户理解。
输出层:
经过多重鉴定与魔法加工,最终的鉴定结果出炉。APP将结果显示给用户,告诉他们这张瓷瓶照片是真品的概率为90%,赝品的概率为10%,用户据此做出是否购买的决定
这个过程形象地展示了CNN如何通过层层处理,将原始图像转化为可供决策的分类或回归结果。
其中上面括号加粗内容,大家可以先有个印象,下文会对部分内容做出讲解。
其中我们发现激活函数会出现在多个位置,那到底正常应该放置在什么位置?怎么选择呢?
激活函数严格来说可以放在任何地方,但我们一般是将其放到卷积层和全连接层后,因为放到其它层一般意义不到;
如果放到池化层之后可以吗?为什么不建议?
可以放到池化层之后,不建议是因为根据上图结构我们看到池化层本身的功能就是降维和特征提取了,所以再增加非线性变换已经意义不大了。
暂时来说激活函数放置位置选择没有什么技巧,主要参考大神们发表的一些论文,跟着论文上做选择即可。
三、每一层具体步骤
1. 卷积层
1)准备输入数据:一张彩色图片
最终将彩色图片转换为CNN可以理解的数字形式,一般是三维数组(维度:长、宽、颜色)。
下图是一个三维数组展开的平面图, 5*5*3:5*5代表长宽;3代表R、G、B三个通道。
2)定义卷积核(滤波器)
设置滤波器大小:即滤波器的长宽,常见的大小有3*3、5*5。
设置步长:即滤波器在输入数据上滑动的间隔。
设置填充(Padding):即在输入数据的边界添加额外的零值像素的过程;目的:解决边界卷积造成的图像信息丢失情况。
设置选择卷积类型:类型包括标准卷积、转置卷积(用于上采样)、空洞卷积(用于扩大感受野)。
选择初始化方法:目的设置权重和偏置项 ;包括零初始化、随机初始化、Xavler初始化和He初始化。
考虑使用的卷积函数:一般用在卷积操作之后。
3)卷积操作
详细解释一下通过滤波器W0,和偏置项h0, 怎么卷积出最终结果1的。
R(0*1+0*1+0*-1)+ (0*-1+0*0+1*1)+ (0*-1+0*-1+1*0) = 1
G(0*-1+0*0+0*-1)+ (0*0+1*0+1*-1)+ (0*1+0*-1+2*0) = -1
B (0*0+0*1+0*0)+ (0*1+2*0+0*1)+ (0*0+0*-1+0*1) = 0
最终结果R(红色通道)+G(绿色通道)+B(蓝色通道)+b0(偏置项) 即 1 + (-1) + 0 + 1 = 1
4)滑动卷积核(滤波器)
根据步长为2,滑动卷积核,计算出其它值,计算方式同步骤3。
5)生成卷积特征图
生成特征图:通常指的是卷积操作完成后得到的最终结果矩阵。
6)应用激活函数
目的:在神经网络的层与层之间引入非线性,以便网络能够学习和表示复杂的函数。
常见的激活函数:ReLU、Sigmold、Tanh。
使用激活函数,对每个神经元(即每个输入矩阵中的值)应用非线性变换。
激活函数一般的位置:卷积层后、全连接层后。
2. 池化层
1)定义池化窗口
池化窗口 也称池化核,是一个小的矩形区域,用于从输入特征图中提取信息,一般是2*2 或 3*3。
2)选择池化操作
可选的池化操作有:最大池化和平均池化。
3)应用池化操作
输入特征图:指的是上一层卷积层生成的卷积特征图。
4)滑动池化窗口
池化窗口按照指定的步长在输入特征图上移动。
5)生成池化特征图
下图中给出了2种池化方法后的示意图;图b为最大池化,图c为平均池化。
6)将池化特征图传入下一层
下一层可能是卷积层,也可能是全连接层;可以看最开始 原理结构图。
下一层的输入矩阵:是池化后的特征图。
如果下一层是卷积层,它与第一次卷积的区别是什么?
- 输入数据不一致:第二次输入矩阵是第一次池化后的特征图矩阵。
- 卷积核不一致:主要是指卷积核权重不一致。
然后在依次按照卷积层、池化层的步骤进行卷积/池化操作。
2. 全连接层 | FC
1)接收特征图
输入矩阵:是所有池化后/或经过激活函数处理后的特征图,是一个多维向量。
维度有:
- batch_size:批次大小
- heigh:特征图的高度
- width:特征图的宽度
- channels:特征通道数量
2)展平特征图
目的:将多维特征图展平为一维特征图。
实现方式:将特征图中的每个通道”展开成一个长向量”,并将所有通道的向量连接在一起形成一个大的一维向量。
展平后的向量长度是 batch_size * height * width * channels
3)权重分配
全连接层中的每一个神经元(即一维向量中的每一个值),都与输入矩阵中的每个元素相连,并且每个连接都有一个对应的权重,这些权重构成了权重矩阵,反应了神经元对输入特征的重视程度。此外,每个神经元还有一个偏置项(Bias),用于调整器整体响应水平。
4)线性变换
对输入向量进行线性变换。
公式如下:
W:权重矩阵;x:输入向量;b:偏置向量
通过这个公式,我们对输入向量做线性变换,得到每个神经元的净输入(即得到全连接层的最终输出结果)。
5)激活函数应用(再次)
通过在次使用激活函数,进行最终的处理,可能结果保持不变(如ReLU的正区间),或将结果压缩到某个范围内(如Sigmoid、Tanh),确保输出符合规范,又具有明确的倾向性。
6)输出结果
是对输入数据的最终响应。在回归任务中,输出是一个连续值,表示预测的目标值。
四、相关概念
持续补充中……………
Padding
根据上面卷积过程,我们发现,卷积操作时会遇到在图像边界卷积造成图像信息丢失的问题,Padding操作的目的是为了解决此问题而提出的。
图像信息丢失? 比如我们在卷积计算时会 对应像素值*权重 ,此时如果权重为0就会造成实际像素值信息丢失情况。
实现Padding方法:
Same Padding:根据卷积核的大小,对输入图像矩阵进行边界补充(一般填充零值),使得卷积后得到的特征矩阵与输入矩阵大小一致。
Valid Padding:不需要进行padding操作。
自定义padding:使用公式计算得出,如下。
其中inputh 指 输入矩阵长度;kernelh 指卷积核长度;stride:卷积操作步长;outputh : 指卷积后矩阵的长度。
五、其它
1. 使用场景
图像识别(人脸识别、物体识别)、计算机视觉(包括自动驾驶、医疗影像分析)、自然语言处理(用于文本分类、情感分析等)、视频分析(如行为识别、视频内容理解等)、图像生成(如风格迁移、图像超分辨率等)。
一般主要用于图像处理?
通过以下三点可以确认更适合用于图片处理:
- 局部特征提取,降低了识别难度。
- 可应用于不同的图像识别任务,权重公用;比如 经过训练已经可识别出小狗,那这些神经元也可以应用于识别其它任何图像中的相似物体。
- 虽特征维度降低,但是保留了主要特征,这样做不仅不影响图像识别,反而减少了其它像素影响和处理的数据量。
2. 优点
- 特征提取能力强。
- 有效降维(将大数据量的图像降维成小数据量,同时保留关键特征)。
- 减少参数数量(通过共享权重,减少了模型的参数数量,提供了训练效率)。
3. 缺点
- 只能识别独立事件。
- 过拟合分险(如果没有足够的数据或者正则化措施,CNN可能会过拟合训练数据)。
- 解释性差。
- 计算量大,尤其在高分辨率图像上。
- 参数多(尽管通过共享权重减少了参数量,但是CNN仍需要大量的参数来学习复杂的特征)。
本文由 @Luna 原创发布于人人都是产品经理。未经作者许可,禁止转载。
题图来自Unsplash,基于CC0协议。
该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。
- 目前还没评论,等你发挥!