热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习大白话杂谈(1)——常见的卷积神经网络架构简介

  这篇文章需要一点点机器学习的基础,尽量讲成大白话。  卷积神经网络在当年也算是异军突起,一出现便将各个天梯榜屠的面目全非,今天我们就来聊一下有哪些常见的卷积神经网络结构。至于什

    这篇文章需要一点点机器学习的基础,尽量讲成大白话。

    卷积神经网络在当年也算是异军突起,一出现便将各个天梯榜屠的面目全非,今天我们就来聊一下有哪些常见的卷积神经网络结构。至于什么是卷积神经网络,你可以参考知乎大神的回答,能否对卷积神经网络工作原理做一个直观的解释。若是这个可以看的懂的话,我再推荐一个更底层一些的,原理上的。  如何通俗易懂地解释卷积?如果这两个都看懂了,那就继续下去看咯,要是没看懂,出门左转,再见了您嘞!

    虽然现在的caffe、tensorflow、还有刚出不久的pytorch等都有着比较完善的框架,且有很多的开源软件,但是弄懂底层的一些算法,不管是对于模型自身的提升,还是自身素质的提升都有着很大的帮助的。

  开始说正事。

      LeNet——1998年,Yann LeCun这个人发表了一篇论文Gradient-based learning applied to document recognition。在文章中,他提出了一个模型LeNet。当时的他为的是解决数字识别的问题,虽然是刚起步的深度学习,但是当今主流框架的东西,比如:卷积层、池化层等它可是都有哦。换句话说,现在的框架都是受他们的影响,前辈还是厉害的。先上图

机器学习大白话杂谈(1)——常见的卷积神经网络架构简介

LeNet一共有7层。

  • 输入的是一张32*32的图画。
  • C1 是一个Conv(卷积层),卷积核的大小为5*5,深度为6,没有padding,且Stride(步长)为1,所以C1输出的尺寸是32-5+1=28,深度是6.
  • S2 是一个pooling(池化层),pooling主要有两个方法:一个是Avy Pooling(平均池化),另一个是Max poolling。池化的主要目的是压缩数据处理量、防止过拟合两个作用,当然啦,也要保证数据的信息量。不过由于pooling太暴力,信息丢失量太大,且使用繁琐,因此一些机构开始使用Global Pooling。 
  • C3 也是一个卷积层,卷积核大小为5*5,深度为16,no padding,stride=1,因此输出的是一张10*10的feature maps,深度为16.
  • S4 是一个池化层,过滤器大小为2*2,stride=2,因此输出的是一张5*5的feature maps,深度为16.
  • C5 是一个卷积层(全连接层),卷积核大小为5*5,得到的是一个长度为5*5*16的向量,是一维的。有全卷积层的话,INPUT的画面必须是定尺寸的,为啥?这个你可以参考卷积层与全连接层的区别
  • F6也是一个全连接层输出84个节点
  • 输出层也是全连接层,输出10个节点。

——————————————————————分割线———————————————————————————

   AlexNet——好景不长,LeNet大放异彩不久,AlexNet便横空出事。AlexNet的主要成就在于它的ReLU**函数是非线性的,也就是它不是一个直男,而是一个很感性的人,对数据拟合更加的委婉。它的优秀因为以下几点:

  • 使用了Relu**函数,比基于tanhsigmoid的网络训练快数倍
  • 标准化。因为Relu**函数的原因,输出的范围不会有上限,因此你需要做一个normalization(标准化)
  • Dropout。字面意思,随机的丢掉一些神经元,这样可以有效防止过拟合,当然了,再性能上一定会有一定的影响,但是比起过拟合带来的麻烦,这样drop drop drop还是很值得的。
  • data augmentation(数据增强)。有公开训练集的时候还好说,数据量稳稳的够。但是如果你要实现的效果很奇葩,且没钱,那在有效的范围内测得的数据肯定是不够的。这个时候你就要对数据进行data augmentation,宏观理解就是一幅画,我旋转一下,嘿!他就是新的数据了。也可以是加一点噪声上去,不仅数据量上去了,连模型的泛化能力也蹭蹭蹭上去了呢。手动[doge].先上个图吧(图片我就懒得做了,从左往右数层数)。

机器学习大白话杂谈(1)——常见的卷积神经网络架构简介

AlexNet总共包含8层,其中有5个卷积层和3个全连接层,有60M个参数,神经元个数为650k,分类数目为1000,LRN层出现在第一个和第二个卷积层后面,最大池化层出现在两个LRN层及最后一个卷积层后。 这个数字量,希望你的矿机还好。

需要注意的是,该模型采用了2-GPU并行结构

  • 第一层,和你们讲这个图第一层是错的(网上的图就是不靠谱,我也懒的改了),输入的应该是227*227的一个图(而不是224*224),深度为3.卷积核大小为11*11,深度为96。得到一个55*55*96.
  • 第二层,将上面的96层分成两部分计算,每一部分深度为48.每一部分进行Max—pooling,过滤器核大小为5*5,padding=2,stride=2,深度为128,池化后两组的输出都是27*27的一张图,深度为128。
  • 第三层,再来个max—polling,过滤核大小为3*3,填充为1,步长为2,深度为192,则池化后的结果为13*13*192.
  • 第四层,是一个卷积层,在前面的基础上做了一个合并,padding=1,kernel13*13,深度为192,stride=1,输出结果为13*13*192。
  • 第五层,卷积操作,没啥好讲的。
  • 第六层,卷积操作,也没啥好讲的。
  • 第七层,先池化处理,过滤器大小为3*3,步长为2,则池化后的每组输出为6*6*128 ,这里没画出来然后来一个全连接层。这一层的输入为6*6*256,因此需要采用6*6*256尺寸的过滤器对输入数据进行卷积运算,一个过滤器对输入数据进行卷积运算生成一个结果,我们设置了4096个,因此输出长度为4096的一位向量。
  • 第八层,稳稳的全连接。
  • 第九层,输入4096个,输出为1000个。

——————————————————————分割线——————————————————————————

   ZF Net——首先呢,名字是两个人名字首字母拼起来的,没啥意义,纯属表达基情。这是论文,想研究的取瞅几眼可以。此篇文章研究的主要是将训练时候中的数据可视化一下,让你看下,哪里可能出了问题,让人体大脑代替一部分优化工作。比如需要的地方因该是一张大饼脸的图像,结果却是一双手,那肯定后面都得错了,那就应该向前找到出错的地方。里面比较重要的一个废话观点就是:网络深度对模型非常重要。下面是各个层输出的效果图,也算是对深度学习这种黑盒实验做了一些透明度吧。

机器学习大白话杂谈(1)——常见的卷积神经网络架构简介

————————————————————————分割线————————————————————————

   VGG Net(Visual Geometry Group)——VGGNet是牛津大学计算机视觉组和DeepMind公司共同研发一种深度卷积网络,并且在2014年在ILSVRC比赛上获得了分类项目的第二名和定位项目的第一名,VggNet一共有六种不同的网络结构,但是每种结构都有含有5组卷积,每组卷积都使用3x3的卷积核,每组卷积后进行一个2x2最大池化,接下来是三个全连接层.在训练高级别的网络时,可以先训练低级别的网络,用前者获得的权重初始化高级别的网络,可以加速网络的收敛(这段是我copy的)。

   这个方法主要是为了减少参数量,具体的做法是这样的:如果一个卷积层是7*7,那么这一层就会有49个参数。但是使用3个3*3的卷积核的效果一样,但是参数却只有27个。并且三个卷积,非线性更加的nice啊,对于feature的学习就更加完美了。

至于怎么实现。自己打开google or 百度 一搜一大把。 

————————————————————————分割线——————————————————————————

   Inception——这么提高神经网络的性能呢?那最方便的手段就是增加深度和网络的宽度,但是哦,一旦增加了这些参数,神经网络很容易过拟合,而且很消耗资源。用专业化的话就是:到将稀疏矩阵聚类成相对稠密子空间来倾向于对稀疏矩阵的优化,因而提出inception结构。说人话就是:怎么用较少的卷积层来起到覆盖整个卷积网络。

机器学习大白话杂谈(1)——常见的卷积神经网络架构简介

他的做法就是:在多个不同尺寸的卷积核上同时进行卷积运算后再进行聚合,并使用1*1的卷积进行降维减少计算成本。在这插一嘴,就是这个1*1的conv在不同的地方使用会有奇效,在实际开发过程中如果遇到测试集OK,但是实际场景却糟糕的情况,可以考虑一下在某些地方加入这个小东西。Inception有许多不同的网络结构从V1到V4,每个结构都有着自己的特色,就不细细再去讲了

———————————————————————分割线——————————————————————————

   ResNet——深度残差网络,这个东西有点厉害了,何博士在facebook实习的时候做出来的,直接走上人生巅峰有木有。它所解决的问题是因为当时模型的辨别力竟然会随着深度的加深而发生退化,这怎么可能,就算加一层没有用的,那顶多是效果不变,再怎么也不可能退化。何博士就做了一个重大的决定,就是将上一层计算的结果直接加入下一层,没听错,就是这个加法计算,在代码中甚至只需要一行代码便可以实现,但是它解决了退化问题。

机器学习大白话杂谈(1)——常见的卷积神经网络架构简介

上图是ResNet的设计思路,在实际实现上主要有两种:

机器学习大白话杂谈(1)——常见的卷积神经网络架构简介

一种是identity mapping,另外一个叫residual mapping,要是你的网络浅就去用左边那个,要是够深够长你就去用右边那个。因为右边那个有一个1*1的conv层,它在这是用来减少计算量的。同时这个加法计算时候,万一几个conv出来的东西大小不一样咋整,别想了,人家何博士也帮你想好了,有三种方案

  • 输入输出一致的情况下,使用恒等映射,不一致的情况下,则用0填充(zero-padding shortcuts) 
  • 输入输出一致时使用恒等映射,不一致时使用 projection shortcuts 
  • 在两种情况下均使用 projection shortcuts 

我的建议是你就去用第二种方案,也别多想了。

总结

  • 深度越深,越宽效果理论上是一定会更好的。
  • 使用多个小卷积核代替大卷积核可以有效降低计算量。
  • 加法运算有效解决退化问题。
  • 未完待续········

推荐阅读
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 本文通过思维导图的形式,深入解析了大型网站技术架构的核心原理与实际案例。首先,探讨了大型网站架构的演化过程,从单体应用到分布式系统的转变,以及各阶段的关键技术和挑战。接着,详细分析了常见的大型网站架构模式,包括负载均衡、缓存机制、数据库设计等,并结合具体案例进行说明。这些内容不仅有助于理解大型网站的技术实现,还能为实际项目提供宝贵的参考。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 如何在低配置电脑上下载并运行《绝地求生》游戏? ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
  • 视觉图像的生成机制与英文术语解析
    近期,Google Brain、牛津大学和清华大学等多家研究机构相继发布了关于多层感知机(MLP)在视觉图像分类中的应用成果。这些研究深入探讨了MLP在视觉任务中的工作机制,并解析了相关技术术语,为理解视觉图像生成提供了新的视角和方法。 ... [详细]
  • 图像分割技术在人工智能领域中扮演着关键角色,其中语义分割、实例分割和全景分割是三种主要的方法。本文对这三种分割技术进行了详细的对比分析,探讨了它们在不同应用场景中的优缺点和适用范围,为研究人员和从业者提供了有价值的参考。 ... [详细]
  • 深度森林算法解析:特征选择与确定能力分析
    本文深入探讨了深度森林算法在特征选择与确定方面的能力。提出了一种名为EncoderForest(简称eForest)的创新方法,作为首个基于决策树的编码器模型,它在处理高维数据时展现出卓越的性能,为特征选择提供了新的视角和工具。 ... [详细]
author-avatar
陈政德169384
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有