深度学习总结:常见卷积神经网络——Inception

2024-04-04 08:58

本文主要是介绍深度学习总结:常见卷积神经网络——Inception,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

深度学习总结:常见卷积神经网络(2)——Inception

    • Inception v1
    • Inception v2
      • BN层
    • Inception v3
      • 非对称卷积分解
    • Inception v4
    • 总结

  上一篇博客主要回顾了VGG和Resnet,这一篇主要回顾一下GoogLeNet系列。

Inception v1

Inception v1提出于2014年,和VGG是同一年,使用了Inception的结构。
  首先inception v1的层数是22层,但他的参数量却只有Alexnet的十二分之一。提升卷积神经网络的一个有效方法就是加大网络,无非就就是从宽度和深度两方面考虑,但这样会带来两个缺点:1参数变多,同时以造成过拟合,2网络的加深,比较难训练,同时梯度消失不可避免。
  Inception同时从深度和宽度两方面考虑。同时考虑逐层的构造网络,如果数据集的概率分布能够被一个神经网络所表达,那么构造这个网络的最佳方法是逐层构筑网络,即将上一层高度相关的节点连接在一起。几乎所有效果好的深度网络都具有这一点,不管AlexNet VGG堆叠多个卷积,GoogLeNet堆叠多个inception模块,还是ResNet堆叠多个resblock。在构筑网络时,还考虑了稀疏的结构:人脑的神经元连接就是稀疏的,因此大型神经网络的合理连接方式也应该是稀疏的。稀疏的结构对于大型神经网络至关重要,可以减轻计算量并减少过拟合。 卷积操作(局部连接,权值共享)本身就是一种稀疏的结构,相比于全连接网络结构是很稀疏的。
  - 深度:采用了22层的结构,9个inception堆叠,同时为了避免梯度消失的问题,同时将梯度传递到较浅的层,在不同的层增加了辅助分类器输出Loss,这样做的另一个好处是在分类中考虑了中间层和浅层的特征。
在这里插入图片描述
另外,在网络的开始用了7×7的卷积,目的是为了降低图像的特征层的大小,减少后面的计算量。
  - 宽度:Inception结构,利用 size 为 1、 3、 5 不同大小的卷积核,同一层网络在不同通道的卷积核输出结果的相关性极高,1×1的卷积核可以自然地把这些相关性高的同一位置不同通道的特征结合起来,其他尺寸的卷积核保证了特征提取的多样性
在这里插入图片描述
  上图即为Inception Module,其中3 × 3和 5 × 5卷积之前的1 ×1的卷积核和池化层之后的 1 × 1的卷积核的作用是为了减少网络参数,同时方便之后的concat而降维。
  在Inception Module中,通常1×1的卷积比例最高,3×3和5×5的卷积稍低。在整个网络中,会有多个堆叠的Inception Module,希望靠后的Inception Module能捕捉更高阶的抽象特征,因此在靠后的Inception Module中,大卷积的占比变多。
   训练和测试的trick,通过resize和crop对图像进行增强。
   结论,稀疏的结构是有用的,Inception structure 提升了精度,但是计算消耗对比于更浅和更窄的网络增加的较少。

Inception v2

Inception v2 提出于2015年,其主要结构相对于Inception v1的变化不是很大,主要贡献点在于提出了BN层,即BatchNormalization。
  论文的出发点在于,神经网络的在训练过程中,每一层输入数据的分布是不断变化的,网络结构需要不断的去适应由于输入数据分布带来的变化。每层数据的输入,都会受到前面所有层的影响。很小的参数的变化,都会对后面的数据输入造成很大的扰动,层数越深,扰动越大。使得我们在训练网络的时候需要更低的学习率和更小心的进行参数初始化,导致我们难以充分的训练一个具有饱满的非线性模型的结构。因此,作者认为,如果对每一层的数据输入,固定其分布,能够加速深度模型的训练。神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。

BN层

在这里插入图片描述
  如果对每一层的数据进行归一化,即变成零均值一方差,由于数据集中到sigmoid的近似线性部分,破坏了网络的非线性。为了解决这个问题,作者在归一化后面加入了尺度的变换和平移,保证模型的非线性能力。其中λ和β都是可以学习的。
在这里插入图片描述
  归一化具有可导性,因此可以端到端的训练。
  在inference时,
在这里插入图片描述在这里插入图片描述
  另外,归一化的过程中,由于需要减去均值的操作,z=g(Wu+b)中的b可以省去,变成z=g(BN(Wu))。
BN层的好处:

  • 减小了internal covariance shift的影响,隐藏层不用浪费时间对付变化的输入分布,模型训练收敛的更快。
  • 由于相对而言,优化算法面对的问题简单了,learning rate可以比没有BN的网络稍大一些,模型训练收敛的更快。
  • 网络权重的初始化比没有BN的时候更容易,敏感度下降。
  • minibatch的均值方差有一定统计涨落,能起到regularization的作用,可以取代dropout。
    其他trick
  1. 增大了学习率,因为BN层的存在,不用担心因学习率过大而导致的小变化引起的大扰动问题。
  2. 借鉴了VGG,采用两个3×3的卷积层代替5×5的卷积层。
  3. BN层具有很强的泛化能力,可以替代dropout。
  4. 使用了随机梯度下降SGD,作者在论文一开始就说了大段SGD的好处。
  5. 由于BN层的存在,可以去除LRN

结论,BN层可以解决数据分布变化的问题(covariate shift)。可以增大学习率,加快了训练的速度。

Inception v3

Inception v3提出于2015年,和v2一样,其基本框架结构和v1一致,主要是对原来结构的优化和改进。
首先,论文介绍了卷积神经网络的主要设计原则,这些原则主要是通过大量的实验的出来的:

  • 要避免表示的瓶颈,尤其是在网络的前面层,网络中特征层的尺寸越来越小,但是这个过程要平稳,前面的层不能压缩的太过,
  • 高维度的特征更容易处理,增加维度有利于生成更多解耦的信息,方便训练的更快。
  • 在低维度进行空间的聚合,可以减少信息的损失,因为低维度空间中相近的信息相互关联。
  • 要平衡好深度和宽度,虽然同时增加有利于提高网络的性能,但是会增加计算的消耗。
    Inception v3的主要贡献点在于卷积的分解,同时增加了一些减少计算量的结构上的改变。
    在VGG中,提出,可以用两个3×3来代替一个5×5的卷积核,可以证明,其感受野是一致的。
    在这里插入图片描述

非对称卷积分解

受到之前vgg的启发,作者将原来3×3的卷积进一步分解,用3×1+1×3的卷积来代替3×3的卷积。如下图所示
在这里插入图片描述
这种卷积分解的方法可以进一步减少网络的参数,加快网络的速度。
相应的,原始版本的Inception Module也变为下图所示
在这里插入图片描述
实验证明,上述的结构在网络的前面几层效果一般,但是在中间层可以取得很好的效果。
其他trick:

  • 辅助分类器如果加入BN层或者,dropout,网络效果会变得更好,regularizer的作用。
  • 降低特征图的尺寸,双线性操作(一边卷积,一边池化),在降低特征尺度的同时,增加了channel。图10
  • 在需要升维并降低特征图尺寸的地方,先池化再卷积可以减少计算量。图9
  • 真对不同尺度大小的特征层,设计了几种不同的Inception块,具体见论文。
    在这里插入图片描述
    结论,作者提出了几条扩大网络规模的设计准则,同时提出了卷积核分解的方法,另外其他的trick也都提高了网络的性能。

Inception v4

之前介绍的v2,v3版本在结构上相比于v1并不是很大,而v4版本结构的变化较大,针对不同大小的特征层,针对性的提出了不同的Inception Module。论文里不仅提出了 Inception V4的,还提出了基于inception 和Resnet 的Inception-Resnet-v1和Inception-Resnet-v2,其中的Inception Module都带有残差连接。
由于Inception v4的改进主要是网络结构的改进,这里不再细说,详细结构自行查阅论文。其主要贡献点在于使用并行的结构,不对称的卷积,并且用了大量的1×1的卷积核进行维度的变换。
v4版本的inception主要有以下三种,
在这里插入图片描述

总结

本文主要总结了inception从v1的提出,到v2 v3 v4不同版本的改进,简单介绍了每篇论文的创新点和改进点。

这篇关于深度学习总结:常见卷积神经网络——Inception的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875356

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3