有那些网站做结伴旅游的,投资建设网站首页,网站建设中面包屑导航的特点,大宇网络潍坊网站建设#x1f308; 个人主页#xff1a;十二月的猫-CSDN博客 #x1f525; 系列专栏#xff1a; #x1f3c0;深度学习_十二月的猫的博客-CSDN博客 #x1f4aa;#x1f3fb; 十二月的寒冬阻挡不了春天的脚步#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录
1. 前言
2. … 个人主页十二月的猫-CSDN博客 系列专栏 深度学习_十二月的猫的博客-CSDN博客 十二月的寒冬阻挡不了春天的脚步十二点的黑夜遮蔽不住黎明的曙光 目录
1. 前言
2. AlexNet
3. VGGNet
4. ResNet
5. SqueezeNet
6. 总结 1. 前言 进入这篇文章之前想必大家已经阅读过前面的系列文章
【通俗易懂说模型】线性回归附深度学习、机器学习发展史-CSDN博客
【通俗易懂说模型】非线性回归和逻辑回归附神经网络图详细解释-CSDN博客
【通俗易懂说模型】反向传播附多元分类与Softmax函数-CSDN博客
【通俗易懂说模型】卷积神经网络呕心沥血版-CSDN博客 通过前面的文章 猫猫相信友友们对深度学习、机器学习一定有了一个较为全面且细致的理解接下来的本篇文章将基于前面提到的回归、反向传播、卷积神经网络等知识从深度学习在图像识别领域发展的历史脉络出发带你遨游几大经典模型。从模型学习深度学习中的奇思妙想感悟前辈伟人的思想精华~~
2. AlexNet AlexNet是2012年ImageNet竞赛中获得冠军的卷积神经网络模型其准确率领先第二名ISI模型10%。由于当时GPU计算速度有限所以采用了两台GPU服务器进行计算。如下图所示该模型共分为8层其中有5个卷积层特征层3个全连接层。下面我们对每一层卷积层进行分析。 卷积层也可以认为是特征层严格意义上包括卷积层和激活层用于提取特征。 全连接层对特征局部特征、全局特征全连接从而学习组织方式 最终用于分类等。 一、第一层卷积和池化过程。如下图所示在第一层卷积层中我们采用11×11的过滤器对尺寸为224×224的图片进行卷积产生96张55×55的特征图由于是彩色图片所以第三个维度是3下面对此不再进行特别说明。然后使用ReLU函数使特征图内的数值保持在合理的范围内。接着使用3×3的核进行池化最终生成96张27×27的特征图。 输出图片大小和卷积的关系 二、第二层卷积和池化过程。如下图所示在第二层卷积层中采用5x5的过滤器进行卷积产生256张27x27的特征图。再经过ReLU函数后使用3x3的核进行池化得到256张13x13的特征图。 三个要点 卷积输出通道数等于卷积核数量。例如上图卷积核数量为256。卷积核通道数等于输入图片通道数。例如上图卷积核通道数为96卷积核大小为5*5。越上层提取的成分越抽象。每一次卷积会利用到前面所有的底层知识组合成上层知识。 三、第三层卷积过程。如下图所示在第三层卷积层中没有池化采用3x3的过滤器进行卷积产生384张13x13的特征图然后经过ReLU函数特征提取层中池化不是必须的。 四、第四层卷积过程。如下图所示在第四层卷积层中也没有池化采用3×3的过滤器进行卷积产生384张13x13的特征图然后经过ReLU函数。 五、第五层卷积过程。如下图所示在第五层卷积层中采用3×3的过滤器进行卷积产生256张13x13的特征图经过ReLU函数然后使用3x3的核进行池化产生256张6x6的特征图。 六、三层全连接层。在第六层中我们将256张6×6的特征图全连接到2048个神经元节点上经过ReLU激活层再进行Dropout。Dropout是前向传播过程中随机丢弃的一些神经网络层节点这种方法可以有效避免模型过拟合。在第七层中将2048个神经元节点全连接到2048个神经元上经过ReLU激活层进行Dropout。在第八层中将2048个神经元全连接到1000个神经元输出节点因为我们进行的是1000个分类的任务。 3. VGGNet VGGNet是牛津大学计算机视觉组和GoogleDeepMind公司研究员一起研发的深度卷积神经网络在2014年的ImageNetILSVRC中取得了亚军。VGGNet探索了卷积神经网络的深度和性能之间的关系通过多次堆叠3×3的过滤器和2×2的最大池化层使得网络层数总体变多达到了16层19层。与只有8层的AlexNet相比VGGNet具有参数的神经网络层数翻了一倍多。 VGGNet采用了多个3x3的卷积核来代替AlexNet中11x11和5x5的卷积核这样做的目的是减少参数的数量。具体是如何做到的呢如下图所示两个3×3的卷积核效果相当于一个5x5的卷积 核效果。倘若被卷积的特征图数为N卷积之后得到的特征图数为M则使用两次3×3卷积核的总参数为18NM使用一次5×5卷积核的总参数为25NM。类似地3个3×3的卷积核相当于1个7x7的卷积核而1个7×7的卷积核的总参数为49NM而3个3×3卷积核的总参数量仅为27NM。 相同硬件条件下训练所能接受的参数总量是有限的 VGGNet利用将5*5分解为两个3*3从而减少了参数量可以增加更多网络结构。同时一层5*5变为两层3*3让整体网络结构变得更深探索了卷积神经网络的深度和性能之间的关系。 如下图所示VGGNet有5段卷积每一段卷积由2~4个3x3的卷积核与1个池化层构成取 大小为3x3的卷积是因为3x3可以同时获取上下左右像素信息的最小卷积核。所有卷积的步长均为1padding也为1。这种利用多个小卷积核代替一个大卷积核的方式有两个好处一是减少了训练的参数量减少资源占用率二是增加了非线性变换的次数提高网络对特征的学习能力。该网络也同时证明在一定条件下网络结构越深网络的学习能力就越好分类能力就越强。 使用3*3代替5*5卷积核的优点 减少参数减少运算量达到同样效果。两个3*3代替5*5网络结构更深增加了非线性变换的次数更有利于分类。 4. ResNet 我们刚才在VGGNet里受到了启发觉得网络结构越深越好但是事实上却不是那么容易。如下图所示20层的卷积神经网络无论是在训练集还是在测试集其误差都比56层的要小。也就是说如果在不进行任何特殊处理的情况下增加层数较深的网络会有更大的误差。其中的原因之一是网络越深梯度消失的现象就越来越明显网络的训练效果也不会很好我们把该问题称为“退化”。但是现在浅层的网络又无法明显提升网络的识别效果所以要解决的问题就是怎样在加深网络的情况下解决“退化”的问题。 问题 网络结构越深整体效果越好。但是网络深到一定程度后因为梯度消失的原因导致训练效果下降出现“退化”现象。 对梯度消失的理解 假设一个神经网络有多个线性层每个层的权重都是一个较大的正数。当输入数据经过这些层计算时每个层的输出都会变得越来越大导致接下来的层需要处理的数值也越来越大。这时候在反向传播的时候计算梯度时因为涉及到乘积这些大的数值相乘会导致梯度变得非常小甚至趋近于零。这就是梯度消失的原因。 举个例子假设有一个三层神经网络每层的权重都是2。假设输入是1那么经过第一层后变成2经过第二层变成4经过第三层变成8。在反向传播的时候梯度会按照链式法则计算每次乘以权重。所以梯度会是1乘以2乘以2再乘以2也就是8。如果权重更大比如3那么梯度会是1×3×3×327这样梯度会变得越来越大而不是变小。但是如果权重都是0.5那么前向传播时数值变小反向传播时梯度会是1×0.5×0.5×0.50.125也就是梯度变小这时候梯度消失。所以当权重的绝对值小于1时梯度会逐渐变小导致梯度消失而如果权重的绝对值大于1梯度会逐渐变大导致梯度爆炸。 梯度消失会导致每次参数更新的很少结果就是训练始终无法收敛同时遗忘模型前面的训练块模型效果很差。 梯度爆炸会导致每次参数更新都很大结果就是训练结果波动性强同样无法收敛模型效果差。 针对这个问题微软研究团队提出了ResNet模型成功地解决了上述难题并获得了2015年的ImageNet比赛的冠军。ResNet模型引入残差网络结构可以成功地训练层数高达152层的神经网络。该残差网络结构如下图所示在两层或两层以上的节点两端添加了一条“捷径”这样一来原来的输出Fx就变成了Fxx。就是这一点点的小改动我们就可以直接使用传统的反向传播训练法对非常深的神经网络进行训练并且收敛速度快误差小。 下图给我们展示了2015年时赢得ImageNet比赛冠军的ResNet模型我们可以看到该网络的特别之处在于每隔两层就设置了一个“捷径”。 为何ResNet的这种连接方式可以“解决”之前的“退化”问题呢我们先来观察一下下图可以发现左边我们熟悉的残差网络模块可以看成右边的串联关系。可以把右边的图联想为串联的电路把数据经过的神经网络层看成是电阻元件。我们知道在串联电路中电阻越小的支路电流就越大对总输出电流的贡献比例就越大。再回到残差网络模块梯度进行反向传播时会因为所遇层数的增多而不断变小。如果我们把梯度传播时遇到的神经网络层看成是一种“阻力”的话那么这些“捷径”就会因为“阻力”小而把梯度顺利地反传回来不至于“消失”如此一来“退化”的问题就被顺利解决了。有了残差网络模块我们可以疯狂地叠加神经网络层甚至到达1000层以上。 5. SqueezeNet 在很多实际的运用中我们希望神经网络模型在尽量小的情况下保持足够的精度。例如在自动驾驶汽车这一应用中我们并不希望把入上传到服务器进行识别如果这么做会产生延迟很可能发生车祸。这时候我们希望自动驾驶汽车能够从网络上下载神经网络模型直接在本地进行实时的识别。除此之外移动手机上的人工智能产品也同样希望直接在本地进行识别避免网络传输所带来的长时间等待。我们以前一直在关注如何通过提高模型的复杂度来提高模型识别的正确率。在相同的正确率下更小的神经网络模型有如下3个优势
在分布式的训练中模型越小各计算节点的通信需求就越小从而训练得更快模型越小从云端下载的数据量就越小更小的神经网络模型更适合在内存和硬盘资源有限的设备上部署。 为了解决模型太大的问题UCBerkeley和Stanford研究人员提出了SqueezeNet模型其识别精度与AlexNet相同但模型大小却只有AlexNet的1/50如果再加上其他的模型压缩技术可以缩小至0.5MB即仅为AlexNet模型大小的1/510。SqueezeNet采用以下3种策略来优化模型
使用1×1卷积来代替3x3卷积减少模型参数1*1卷积块本质上可以认为仅仅在通道层面卷积了一下并没有考虑局部特征的联系减少输入的通道数减少模型参数延后池化保留更多信息提高准确率。本身参数量很少就不需要池化来减少特征值了。 假如一张图片如下 可以认为其仅仅展示了各自的位置信息。 卷积后如下 可以认为除了位置信息还包含彼此的联系信息因此卷积核越少处理后包含的联系信息更少因此计算量更小。 具体来说SqueezeNet设计了一个叫Fire Module的模块其结构如下图所示该模块分为压缩和扩展两个部分。首先压缩部分是由若干1×1的卷积核构成图中示例使用了3个卷积核。而扩展部分包含1×1的卷积核和3×3的卷积核这里使用了4个1×1卷积核及4个3×3卷积核。假设输入的通道数为5在压缩部分我们使用3个1×1卷积核将输入的通道数压缩为3然后分别经过4个1×1和4个3x3卷积核后将输出进行合并最后得到8张特征图。 随着卷积神经网络的发展我们经常搭配一些固定的卷积核构造成一个微结构进行使用从而方便网络设计。SqueezeNet的FireModule也是一个微结构如下图所示。在Fire Module这个微结构中分为压缩和扩展两部分卷积核压缩模块采用了3个1x1卷积核因此S1x13扩展模块中我们采用了4个1×1卷积核和4个3x3卷积核因此e1x14e3x34。在每个卷积之后都经过了非线性函数ReLU的处理我们要求S1x1e1x1e3x3以限制输入通道数。 整个SqueezeNet结构如下图所示左边是原始的SqueezeNet我们分别在conv1、fire4、fire8、conv10之后加池化层这样做推迟了池化而保留了更多的信息提高识别精度。中间和右边借鉴了ResNet的做法在各层之间加人了许多“捷径”化解“退化”问题提高识别正确率。在最后的池化层里使用全局平均池化GlobalAveragePoolingGAP来代替以往的全连接层节省了大量参数。 全局平均池化是直接利用特征图来计算对应分类的概率相关值。如下图所示以上面的任务为例我们需要对1000个类进行分类。那么在最后一层卷积层的输出部分我们设置输出为1000张特征图然后对每一张特征图求平均值。接着将1000个平均值输入softmax函数得到1000个类的概率。 全局平均池化 池化代表减少参数量。从特征图最后降维一个概率自然是池化全局代表直接求1000个类的概率。平均是指这个概率是特征图的概率的平均值。全剧平均池化可用来代替全连接层求解分类问题 怎么理解全局平均池化分类和全连接后分类 1、全局平均池化就是直接拿特征图去分类如下图 将一个狗狗分为好几块然后得到的就是一个个特征图。全局平均池化就是直接看后面乱序的特征图去判断是不是狗 2、全连接后分类就是得到特征图后通过全连接拼凑出狗狗的图片如下图 然后再用这个完整有序的图片去判断是不是狗 6. 总结
【如果想学习更多深度学习文章可以订阅一下热门专栏】
深度学习_十二月的猫的博客-CSDN博客
PyTorch实战深度学习80例_十二月的猫的博客-CSDN博客
零基础入门PyTorch框架_十二月的猫的博客-CSDN博客
如果想要学习更多pyTorch/python编程的知识大家可以点个关注并订阅持续学习、天天进步
你的点赞就是我更新的动力如果觉得对你有帮助辛苦友友点个赞收个藏呀~~~