模型学习(1):卷积神经网络(CNN)
目录1、多层感知机MLP2、卷积神经网络概要CNN3、基本概念1卷积流程特征图步长输入输出2池化Pooling31×1卷积Pointwise Convolution4感受野、权值共享5shortcutAddition / Concatenate分支6Dropout7Batch Normalization8激活函数、batch size、归一化、学习率以下内容来自于多篇内容的汇总主要参考文章之一有史以来最详细的卷积神经网络(CNN)及其变体讲解_cnn的变种-CSDN博客https://blog.csdn.net/jennycisp/article/details/147276345?ops_request_miscelastic_search_miscrequest_iddb6f7cdbaa20d6edb6cecd4e44e90e0abiz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-147276345-null-null.142^v102^pc_search_result_base4utm_term%E5%B8%B8%E8%A7%81%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E4%BB%8B%E7%BB%8Dspm1018.2226.3001.41871、多层感知机MLP多层感知机Multilayer Perceptron, MLP是一种前馈神经网络它由输入层、若干隐藏层和输出层组成。每一层都由多个神经元或称为节点组成。输入层Input Layer输入层接收外部输入的数据将其传递到下一层。每个输入特征都对应一个神经元。隐藏层Hidden Layer隐藏层是位于输入层和输出层之间的一层或多层神经元。每个隐藏层的神经元接收上一层传来的输入并通过权重和激活函数进行计算然后将结果传递到下一层。隐藏层的存在可以使多层感知机具备更强的非线性拟合能力。输出层Output Layer输出层接收隐藏层的输出并产生最终的输出结果。输出层的神经元数目通常与任务的输出类别数目一致。对于分类任务输出层通常使用softmax激活函数来计算每个类别的概率分布对于回归任务输出层可以使用线性激活函数。上述图中的多层感知机有4个输入、3个输出其隐藏层包含5个隐藏单元即神经元。输入层不涉及任何运算因此使用此网络生成输出只需要实现隐藏层和输出层的计算。这个多层感知机中的层数为2而且这两个层都是全连接的。补充多层感知机(MLP)最基础的人工神经网络/神经网络ANN层数深一点就是深度学习了。深度学习是机器学习里的一个子集定义层数很深的神经网络只要网络层数多通常 ≥ 3 层隐藏层就叫深度学习神经网络ANN是深度学习里的一个子集只是深浅、结构不同ANN是一个总称包含MLP、CNN、RNN、Transformer 等模型2、卷积神经网络概要CNNCNN于1998年提出(LeNet-5)其本质是一个多层感知机成功的原因在于其提出了局部连接和权值共享。2006年Hinton提出了深度学习其主要的观点是多隐层的的MLP具有优异的特征学习能力学习到的数据更能反映数据的本质特征有利于可视化或分类。2012年AlexNet取得ImageNet比赛的分类任务的冠军使得卷积神经网络真正爆发。如今的卷积神经网络(CNN)是一种带有卷积结构的深度神经网络与常规神经网络不同卷积神经网络的各层中的神经元 是3维排列的宽度、高度和深度。对于输入层来说宽度和高度指的是输入图像的宽度和高度深度代表输入图像的通道数例如对于RGB图像有R、G、B三个通道深度为3而对于灰度图像只有一个通道深度为1。对于中间层来说宽度和高度指的是特征图(feature map)的宽和高通常由卷积运算和池化操作的相关参数决定深度指的是特征图的通道数通常由卷积核的个数决定。全连接神经网络中的主要运算为矩阵相乘而卷积神经网络中主要为卷积计算.3、基本概念一些最常见的基本概念也可以看这个视频卷积神经网络原理 - 06 - 特征图的形状_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1VL4y1F7WH/?spm_id_from333.788.videopod.sectionsvd_source8bc1529fc1637f4dcc971947b6073e341卷积流程特征图步长输入输出1.卷积(Convolution)要大致了解什么是卷积运算(这里指最常用的标准卷积运算)以及一些常见名词可以看上面那个视频也可以参考下面这篇文章这里就放一些汇总出的截图原来卷积是这么计算的 - 知乎https://zhuanlan.zhihu.com/p/268179286?ivk_sa1024320u简单的说在卷积神经网络中对于输入的图像需要多个不同的卷积核对其进行卷积来提取这张图像不同的特征而深度卷积就是通过多个卷积层进行卷积来提取深层次的特征。2池化Pooling最大池化(Max Pooling)和平均池化(Mean Pooling)通常在连续的卷积层之间会周期性地插入一个池化层也称“汇聚”层。它的作用是逐渐降低数据体的空间尺寸这样的话就能减少网络中参数的数量使得计算量变少也能有效控制过拟合。池化这个操作比较简单一般在上采样和下采样的时候用到没有参数不可学习。普通池化操作常见的有最大池化(Max Pooling)和平均池化(Mean Pooling)。最常用的是最大池化最常见的形式是使用尺寸2x2的滤波器以步长为2来对每个深度切片进行降采样选择4个数里面最大的数保留将其中75%的激活信息都丢掉。平均池化历史上比较常用但是现在已经很少使用了。因为实践证明最大池化的效果比平均池化要好。尺寸为2×2、步长为2的最大池化核平均池化的示例如下图所示31×1卷积Pointwise Convolution有些论文里用到了尺寸为1×1的卷积核刚开始见到1×1卷积可能会比较困惑——对于二维的图像数据1×1卷积似乎是没有意义的。但是在卷积神经网络中卷积核通常是对三维feature map进行操作这时1×1卷积可以看作对某个局部的加权求和。1*1卷积通常有两方面作用降维比如一张64×64且通道数为192的图片在1个filter上做1×1的卷积输出特征图的尺寸变为64×64×1。而当filter数量为200时输出特征图的尺寸会变为64×64×200这时实现了网络加宽或者说是升维。如图左侧所示右侧下面为第二个示例增加网络层的非线性它的卷积过程其实相当于全连接层的计算过程并且还加入了非线性的激活函数relu等从而使网络结构变得更加的复杂。4感受野、权值共享1.感受野(Receptive Field)在卷积神经网络CNN中感受野指特征图上某个神经元对应的原始输入图像的区域大小即该神经元在输入图像中“看到”的空间范围。它决定了神经元整合信息的空间尺度是CNN实现从局部到全局特征提取的关键机制。神经元感受野的范围越大表示其能接触到的原始图像范围就越大也意味着它能学习更为全局语义层次更高的特征信息相反范围越小则表示其所包含的特征越趋向局部和细节。因此感受野的范围可以用来大致判断每一层的抽象层次。网络越深神经元的感受野越大。深度卷积神经网络中靠前的层感受野较小提取到的是图像的纹理、边缘等局部的、通用的特征靠后的层由于感受野较大提取到的是图像更深层次、更具象的特征。因此在迁移学习中常常会将靠前的层的参数冻结不参与训练因为他们在迁移到新的场景之前已经具备了提取通用特征的能力来节省训练的时间和算力消耗。计算感受野大小可以看这个计算机视觉---感受野Receptive Field_感受野计算-CSDN博客https://blog.csdn.net/2301_80079642/article/details/147872389?ops_request_miscelastic_search_miscrequest_idc916b990ff063ddc5295591cd306e44abiz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~all~top_click~default-2-147872389-null-null.142^v102^pc_search_result_base4utm_term%E6%84%9F%E5%8F%97%E9%87%8Espm1018.2226.3001.41872.权值共享在卷积运算中采用权值共享可以有效减少需要求解的参数。权值共享是基于这样的一个合理的假设如果一个特征在计算某个空间位置 (x1,y1)(x1,y1) 的时候有用那么它在计算另一个不同位置 (x2,y2)(x2,y2) 的时候也有用。通俗地来讲在一个卷积核在和一个n通道的特征图为方便理解这里可以暂时理解为3通道的RGB输入图像进行卷积运算时可以看作是用这个卷积核作为一个滑块去“扫”这个特征图卷积核里面的数就叫权重这个特征图每个位置是被同样的卷积核“扫”的所以权重是一样的也就是共享。同时这个卷积核在去“扫”n通道特征图的时候可以看作由一个二维的“片状结构”通过复制n次堆叠成为一个n通道的“块状结构”即卷积核但是这个卷积核每一层的权重都一样去“扫”这个n通道的特征图。如果每层不一样即不权值共享则如下图所示5shortcutAddition / Concatenate分支1. Addition / Concatenate分支Addition和Concatenate分支操作统称为shortcut如下图所示。Addition是在ResNet中提出两个相同维度的feature map相同位置点的值直接相加得到新的相同维度feature map这个操作可以融合之前的特征增加信息的表达.Concatenate操作是在Inception中首次使用被DenseNet发扬光大和addition不同的是它只要求两个feature map的HW相同通道数可以不同然后两个feature map在通道上直接拼接得到一个更大的feature map它保留了一些原始的特征增加了特征的数量使得有效的信息流继续向后传递。6DropoutDropout是指在深度学习网络的训练过程中对于神经网络单元按照一定的概率将其暂时从网络中丢弃。注意是暂时对于随机梯度下降来说由于是随机丢弃故而每一个mini-batch都在训练不同的网络。当进行测试和推理时Dropout将不起作用。这里顺便例举一下深度学习中抑制过拟合的方法有哪些1、加入正则化项——L1和L2正则化不了解的可以参考文章L1正则化和L2正则化 2、提前终止(early stopping)训练当验证集上的效果变差的时候3、参数绑定与参数共享如CNN和RNN中都有用到参数共享4、Dropout5、Batch Normalization6、bagging等集成方法7Batch Normalization1、使用原因在机器学习中我们通常会对输入特征进行标准化或归一化因为直接输入的数据每个维度量纲可能不同、数值差别很大导致模型不能很好地从各个特征中学习。神经网络是一个多层结构每层神经元是会受到它之前所有神经元影响的因为每一层的输出都是下一层的输入所以一个神经元输出的数据分布发生改变一定会使其他神经元跟着改变这样相互影响的调参很容易使调参过程乱套这个被称作Internal Covariate shiftICS。当上一层输出值太大或太小其经过sigmoid激活函数时会落在饱和区域反向传播会有梯度消失的问题。BN层通常添加在每个神经网络层和激活层之间对神经网络层输出的数据分布进行统一和调整变成均值为0方差为1的标准正态分布,使输出位于激活层的非饱和区达到加快收敛的效果。BN层的效果演示如下图2、BN算法的公式如下图前三个公式表述的标准化工序并不难理解但最后还有一个反标准化工序即对标准化后的数据再扩展和平移其中涉及到扩展参数γ和平移参数β这两个参数是可学习的能够让模型在训练过程中自己去修改这样神经网咯就能够自己琢磨出前面的标准化工序有没有起到优化的作用如果没有就可以通过调整γ和β参数来在一定程度上抵消标准化操作。3、Batch NormalizationBN 和 Layer Normalization(LN)区别除了Batch Normalization外常见的深度学习标准化方法还有Layer Normalization(LN)等。BN和LN的主要区别在于Normalize的方向不同大致可以参考下面这张图这里不对LN做详细介绍因为LN用于RNN效果比较明显但是在CNN上最常用的还是BN。8激活函数、batch size、归一化、学习率参考文章深度学习基础宝典---激活函数、Batch Size、归一化_常用激活函数图像-CSDN博客