这节课中主要讨论了卷积神经网络的发展历史以及几种经典结构是如何构建的

AlexNet

在2012年的时候,Alexnet神经网络提出,这时网络的架构比如说各个层之间要如何排列组合,使用多少卷积层池化层,每个层又如何设置超参数其实没有什么规律,主要通过实验与试错:



但是我们通过对内容容量,可学习参数以及浮点运算次数的计算,可以看到一些有趣的规律,绝大多数的内容容量都使用在了卷积层,绝大多数的可学习的参数都在全连接层,绝大多数的浮点运算都发生在卷积层



在2013年又提出了ZFNet,其实只是一个更大的AlexNet:



VGG

在2014年提出了VGG网络,VGG网络引入了有规律的设计。建立了更深层的网络,我们可以看到卷积层与池化层的超参数都是固定的,并且每次池化之后都会让卷积层通道数加倍,这样可以保证卷积层每次进行的运算数量一致



从下图也可以看出,VGG要比Alexnet复杂许多:

GoogleNet



但是同样在2014年提出的Googlenet网络中,不再强调更大更深的神经网络,因为谷歌想要在更低要求的设备下,去追求效率,这意味着减少内存容量的使用,可学习参数的数目以及浮点运算的次数

为了实现上面的目标,googlenet做出了很多的努力

首先,在网络最开始,Googlenet采用了非常激进地下采样,使用了步长与卷积核都比较大的卷积层以及池化层,我们可以看到是直接从224维度降到了28,同时内存,参数,浮点运算也大幅下降:

其次,Googlenet在网络的中间部分,多次采用了叫Inception Module的结构,我们可以看到它是采用了多个平行分支,在多个尺寸上进行卷积再聚合,那么我们怎么理解这样设计呢,可以参考这篇博文:https://zhuanlan.zhihu.com/p/32702031

简单来说,其实就相当于把传统卷积方式得到的稀疏矩阵,使用不同尺度的卷积,我们可以得到密集矩阵,把相关性强的特征聚集在一起,筛除了冗余信息:

然后,在神经网络的最后,不使用很大的全连接层,而是使用一个平均池化层以及一个全连接层来输出各分类分数得分,这样可以大大减少参数,内存以及浮点运算次数:

最后,由于神经网络层数过深,梯度传播效果不佳,可以选择在其它层数采用和最后结构一样的结构,提取输出分类分数,但是这里是batch normalization还没有提出的时候,之后我们就不需要这样做

ResidualNetwork

在batch normalization提出之后,我们可以很轻松地训练深层的网络使其收敛,导致神经网络的层数迅速增加,但是又出现的新的问题,发现深层神经网络反而不如浅层神经网络训练效果好,甚至出现了欠拟合的情况。

后来就有人(何大神)想出了残差网络,核心原理可以参见这篇:https://medium.com/@hupinwei/深度學習-resnet之殘差學習-f3ac36701b2f

大概是说过深的神经网络会导致出现退化的情况,有一种办法就是我们直接堆叠一层和上一层一样的结果(Identify mapping 恒等映射),更好的办法是这样做:

“讓我們先建立以下的概念:

輸入是x

學到的特徵是H(x)

我們定義一個新的名詞,叫做殘差 Residual

Residual = H(x) - x

殘差的概念很直覺吧? 就是學到的特徵和原本的輸入的差異。

既然是Residual = H(x) - x,Residual 也是X的函數,所以也寫作F(x), 那F(x) = H(x) - x

原本學習是這樣的。 x → H(x)

已經知道 F(x) = H(x) - x

所以學習也可以這樣寫:x → F(x) + x

因為H(x) = F(x) + x

用文字來說明的話,

輸入→特徵

變成:輸入→ 輸入 + 殘差

這樣有什麼好處嗎?

如果今天我們多一層,什麼都沒有學到。那殘差就是0

那多這一層,想想我們上面介紹過的,當殘差=0的時候,輸入→ 輸入,這一層就叫做恆等映射,因此,多這一層如果沒學到新的特徵,也不會讓模型退化。實際上當然不會剛好等於0, 而是可以增加很多層,而每一層都可以學到一些新的更複雜的特徵。”

这就是残差网络中基本的残差块的设计思路:



我们把上图的shortcut加入卷积层,再结合之前VGG的中间结构设计,googlenet的首尾设计,刚开始激进地下采样,最后采用平均池化层与一个线性层输出结构,就得到了残差网络的设计:



更进一步地,我们可以优化残差块的设计,使计算量更小:

我们可以总体看看不同卷积网络的复杂度比较:

最后提及一些其它更加高效的设计,并没有详细地讲,我也不是很懂,这里就再放一张总结图以及小哥的温馨提示:



umich cv-4-2 经典卷积网络架构的更多相关文章

  1. 经典卷积网络VGG,GoodLeNet,Inception

    目录 ImageNet LeNet-5 LeNet-5 Demo AlexNet VGG 1*1 Convolution GoogLeNet Stack more layers? ImageNet L ...

  2. 论文解读丨基于局部特征保留的图卷积神经网络架构(LPD-GCN)

    摘要:本文提出一种基于局部特征保留的图卷积网络架构,与最新的对比算法相比,该方法在多个数据集上的图分类性能得到大幅度提升,泛化性能也得到了改善. 本文分享自华为云社区<论文解读:基于局部特征保留 ...

  3. EdgeFormer: 向视觉 Transformer 学习,构建一个比 MobileViT 更好更快的卷积网络

    ​  前言 本文主要探究了轻量模型的设计.通过使用 Vision Transformer 的优势来改进卷积网络,从而获得更好的性能. 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结.最新技术跟 ...

  4. deeplearning.ai 卷积神经网络 Week 2 深度卷积网络:实例研究 听课笔记

    1. Case study:学习经典网络的原因是它们可以被迁移到其他任务中. 1.1)几种经典的网络: a)LeNet-5(LeCun et al., 1998. Gradient-based lea ...

  5. CNN网络架构演进:从LeNet到DenseNet

    卷积神经网络可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀.CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF ...

  6. CNN网络架构演进

    卷积神经网络可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀.CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF ...

  7. 语义分割--全卷积网络FCN详解

    语义分割--全卷积网络FCN详解   1.FCN概述 CNN做图像分类甚至做目标检测的效果已经被证明并广泛应用,图像语义分割本质上也可以认为是稠密的目标识别(需要预测每个像素点的类别). 传统的基于C ...

  8. 五大经典卷积神经网络介绍:LeNet / AlexNet / GoogLeNet / VGGNet/ ResNet

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! LeNet / AlexNet / GoogLeNet / VGG ...

  9. 怎样设计最优的卷积神经网络架构?| NAS原理剖析

    虽然,深度学习在近几年发展迅速.但是,关于如何才能设计出最优的卷积神经网络架构这个问题仍在处于探索阶段. 其中一大部分原因是因为当前那些取得成功的神经网络的架构设计原理仍然是一个黑盒.虽然我们有着关于 ...

  10. 【论文阅读】ConvNeXt:A ConvNet for the 2020s 新时代卷积网络

    一.ConvNext Highlight 核心宗旨:基于ResNet-50的结构,参考Swin-Transformer的思想进行现代化改造,知道卷机模型超过trans-based方法的SOTA效果. ...

随机推荐

  1. 使用libswresample库实现音频重采样

    一.初始化音频重采样器 在音频重采样时,用到的核心结构是SwrContext,我们可以通过swr_alloc()获取swr_ctx实例,然后通过av_opt_set_int()函数和av_opt_se ...

  2. 这样看C函数才对

    什么是函数?从定义来看,函数就是一段可以重复使用的代码块,比如下面这样 void hanshu() { int a = 0; int b = 3; } 这时候就应该有人要跳出来了,这是什么**!确实, ...

  3. Visual Studio Code调试和发布ASP.NET Core Web应用

    前言 上一篇文章主要讲了Visual Studio Code安装C#开发工具包并编写ASP.NET Core Web应用有兴趣的同学可以去看看,今天咱们主要是要讲讲如何在VS Code中调试和发布AS ...

  4. 《设计模式的运用》使用策略模式+工厂模式优化代码中的if else

    使用策略模式优化if else 有这样一段逻辑 function{ for{ if() if() if( if( ) ) ... } } 公司有的祖传的代码,是一段规则校验,校验的越多,每一个请求都会 ...

  5. EaselJS 源码分析系列--第一篇

    什么是 EaselJS ? 事儿还得从 Flash 说起,因为我最早接触的就是 Flash, 从 Flash 入行编程的 Flash 最早的脚本是 Actionscript2.0 它的 1.0 我是没 ...

  6. Python单元测试之道:从入门到精通的全面指南

    在这篇文章中,我们会深入探讨Python单元测试的各个方面,包括它的基本概念.基础知识.实践方法.高级话题,如何在实际项目中进行单元测试,单元测试的最佳实践,以及一些有用的工具和资源 一.单元测试重要 ...

  7. DDD架构为什么应该首选六边形架构?

    一.传统分层架构 分层架构的一个重要原则是:每层只能与位于其下方的层发生耦合. 分层架构分两种:一种是严格分层架构,规定某层只能与直接位于其下方的层发生耦合:另一种是松散分层架构,允许任意上方层与任意 ...

  8. VueJS使用addEventListener的事件如何触发执行函数的this

    1.使用浏览器监听切屏为例 此处为考虑浏览器兼容性推荐使用:document.addEventListener 1.1.正常函数使用如下: let n = 0; let max = 3; // 切屏最 ...

  9. Sa-Token 多账号认证:同时为系统的 Admin 账号和 User 账号提供鉴权操作

    Sa-Token 是一个轻量级 java 权限认证框架,主要解决登录认证.权限认证.单点登录.OAuth2.微服务网关鉴权 等一系列权限相关问题. Gitee 开源地址:https://gitee.c ...

  10. Linux 命令:time

    参考链接: time 命令