热门标签 | 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 

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

总结

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

推荐阅读
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 深入解析经典卷积神经网络及其实现代码
    深入解析经典卷积神经网络及其实现代码 ... [详细]
  • 本文介绍了如何使用 Google Colab 的免费 GPU 资源进行深度学习应用开发。Google Colab 是一个无需配置即可使用的云端 Jupyter 笔记本环境,支持多种深度学习框架,并且提供免费的 GPU 计算资源。 ... [详细]
  • 在Conda环境中高效配置并安装PyTorch和TensorFlow GPU版的方法如下:首先,创建一个新的Conda环境以避免与基础环境发生冲突,例如使用 `conda create -n pytorch_gpu python=3.7` 命令。接着,激活该环境,确保所有依赖项都正确安装。此外,建议在安装过程中指定CUDA版本,以确保与GPU兼容性。通过这些步骤,可以确保PyTorch和TensorFlow GPU版的顺利安装和运行。 ... [详细]
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 中国学者实现 CNN 全程可视化,详尽展示每次卷积、ReLU 和池化过程 ... [详细]
  • 本文将深入探讨生成对抗网络(GAN)在计算机视觉领域的应用。作为该领域的经典模型,GAN通过生成器和判别器的对抗训练,能够高效地生成高质量的图像。本文不仅回顾了GAN的基本原理,还将介绍一些最新的进展和技术优化方法,帮助读者全面掌握这一重要工具。 ... [详细]
  • 视觉图像的生成机制与英文术语解析
    近期,Google Brain、牛津大学和清华大学等多家研究机构相继发布了关于多层感知机(MLP)在视觉图像分类中的应用成果。这些研究深入探讨了MLP在视觉任务中的工作机制,并解析了相关技术术语,为理解视觉图像生成提供了新的视角和方法。 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • 本文提供了PyTorch框架中常用的预训练模型的下载链接及详细使用指南,涵盖ResNet、Inception、DenseNet、AlexNet、VGGNet等六大分类模型。每种模型的预训练参数均经过精心调优,适用于多种计算机视觉任务。文章不仅介绍了模型的下载方式,还详细说明了如何在实际项目中高效地加载和使用这些模型,为开发者提供全面的技术支持。 ... [详细]
  • 利用TensorFlow.js在网页浏览器中实现高效的人脸识别JavaScript接口
    作者|VincentMühle编译|姗姗出品|人工智能头条(公众号ID:AI_Thinker)【导读】随着深度学习方法的应用,浏览器调用人脸识别技术已经得到了更广泛的应用与提升。在 ... [详细]
  • Vision Transformer (ViT) 和 DETR 深度解析
    本文详细介绍了 Vision Transformer (ViT) 和 DETR 的工作原理,并提供了相关的代码实现和参考资料。通过观看教学视频和阅读博客,对 ViT 的全流程进行了详细的笔记整理,包括代码详解和关键概念的解释。 ... [详细]
  • 在Windows环境下离线安装PyTorch GPU版时,首先需确认系统配置,例如本文作者使用的是Win8、CUDA 8.0和Python 3.6.5。用户应根据自身Python和CUDA版本,在PyTorch官网查找并下载相应的.whl文件。此外,建议检查系统环境变量设置,确保CUDA路径正确配置,以避免安装过程中可能出现的兼容性问题。 ... [详细]
  • 如何在Linux系统中部署TensorFlow的详细指南
    本文详细介绍了在Linux系统中部署TensorFlow的过程。作者基于北京大学曹建教授的MOOC课程进行学习,但由于课程内容较旧,环境配置方面遇到了不少挑战。经过多次尝试,最终成功解决了这些问题,并总结了一套详细的安装指南,帮助初学者快速上手TensorFlow。 ... [详细]
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社区 版权所有