Eugenio Culurciello的神经网络结构解析(Part 1)

简介: 深度神经网络与深度学习是现今最为有效和流行的算法,而他们的成功很大程度上依赖于对神经网络结构的优良设计。在这篇文章中,我将在深度学习的大背景下,对神经网络近十几年来的的演进历史做一个简要的总结概述。

本文来源于Eugenio Culurciello's blog
作者: Eugenio Culurciello
Linkedin: https://www.linkedin.com/in/eugenioculurciello

翻译: 郭昕

原文标题:Neural Network Architectures


深度神经网络与深度学习是现今最为有效和流行的算法,而他们的成功很大程度上依赖于对神经网络结构的优良设计。在这篇文章中,我将在深度学习的大背景下,对神经网络近十几年来的的演进历史做一个简要的总结概述。

对于更进一步的分析以及神经网络的比较,感兴趣的读者,可以阅读我们实验室最近发表的论文(https://arxiv.org/abs/1605.07678),一个简单的总结可以见下图:

image.png

上图表示的是Top-1准确率和一轮前向网络计算所需要的操作的数量的关联,本图中列举了多个近来非常流行的神经网络结构。

LeNet5
LeNet5最初发表于1994年Yann LeCun的文章中,是最早被提出的卷积神经网络结构,这项工作大大推进了深度学习的发展,而这项开创性的工作是基于大量成功的理论发展迭代之上的,而最早的理论可以追溯到1988年!

image.png

LeNet5的结构是非常基础的,其中一个特别重要的观察在于,图像的特征是分布于整张图片之上的,使用带有可更新参数的卷积算子,是一种对在图片的不同位置提取相似特征非常有效的方式,同时卷积算子的使用,也大大减少了所需更新的参数的数量。在当时既没有GPU,CPU的计算效率也远低于当前时代的水平,能够节省参数数量是一个重要的优势。相反,如果将图片的每一个像素作为独立输入进一个大型神经网络,将很难达到类似的效果。LeNet5对此的解释是,图片是一种高度空间相关的数据,而将图片像素作为独立输入神经网络,会打破这种空间上相关的数据特性。

LeNet5的结构可以简单概括为:

  1. 卷积神经网络使用了如下3层序列作为一个基本结构: 二维卷积,pooling层,非线性算子 -> 而这个结构奠定了此后深度学习在图像应用中的一个关键特点
  2. 使用卷积来提取空间特征
  3. Pooling层使用的计算方式是取图像映射的空间均值
  4. 非线性算子使用的是tanh或者sigmoid
  5. 使用的MLP(Multi-layerPerceptron)作为最后一层的分类器
  6. 层与层之间使用稀疏的矩阵链接,大大降低了计算复杂度

总的来说,LeNet5是今后很多经典神经网络结构的鼻祖,对整个领域的发展起到了至关重要的作用

断层
在1998年到2010年间,神经网络的发展进入了一个孵化期,大多数人都没有认识到神经网络所能带来的潜在可能性,只有少数研究者在整个领域取得了一些进展。随着手机照相和数码摄像机变得越来越便宜,图像数据逐渐积累了起来,同时计算资源也得到了长足发展,CPU们变得越来越快,GPU也迈入了通用计算的时代。数据的积累和计算能力的提升为神经网络的下一波井喷打好了坚实的基础。

Dan Ciresan Net
在2010年,DanCiresan以及Jurgen Schmidhuber发布了第一个基于GPU实现的神经网络,这个网络结构将前向和后向传导同时在一个Nvidia GTX 280上实现,而此时的网络结构达到了9层

AlexNet
在2012年,AlexKrizhevsky发布了AlexNet,这是一个基于LeNet5,但是更深,并且更广的一个模型,他以绝对优势赢得了当年非常困难的ImageNet竞赛

image.png

AlexNet将LeNet5中的主要思想封装入了一个更大的神经网络,使得这个神经网络得以学习到更为复杂的物体结构以及层次,这项工作的主要贡献在于:

  1. 使用了ReLU(整流线性单元)作为非线性算子
  2. 使用了Dropout的技术,在训练中随机得忽略一些神经元的参数更新,有效得规避了模型的过拟合
  3. 使用的MaxPooling的技术,从而避免了average pooling导致的均值效应
  4. 使用了GPUNvidia GTX 580来加速训练

在当时,GPU相比CPU来说可以提供更多的计算内核,可以达到大约10倍的训练加速,使得使用更大的数据集以及更多像素的图片成为可能

AlexNet的成功掀起了一场在计算机视觉界的革命,使得卷积神经网络真正能够为深度学习中的任务提供助力,也使得”大型神经网络是可以用于解决实际问题”成为了现实

Overfeat
2013年,纽约大学Yann LeCun组发布了Overfeat模型,这是一个AlexNet的变种模型。在这个模型中,首次提出了CNN不仅可以用于解决分类问题,同时也可以用于训练学习一个边界框(bounding box),这一想法催生了后续基于此的研究论文,例如在图像物体检测领域。我个人认为,对CNN来说,去学习如何分割物体,比学习一个人为框定的边界框来说更有意义。

VGG
牛津大学的研究组提出的VGG模型,首次采用了一个比之前模型小得多的卷积滤波器(大小为3x3),同时将这些操作合并成为一个卷积序列。

这看起来似乎有悖于LeNet设计初衷,在LeNet中,较大的卷积操作被用于获取图像中的相似特征。不像AlexNet那样使用9x9或者11x11这样大的卷积滤波器,在神经网络的第一层上,VGG开始使用小得多的滤波器,并且开始接近于LeNet原本的设计中想要极力避免的1x1大小的滤波器。但是VGG模型的一个观察在于,多个3x3卷积操作的级联(中间并没有pooling以及非线性操作),其实可以等价于一个更大的接受区域的效果,比如像5x5或者7x7那样大小的卷积滤波器。这一结构设计也被广泛使用于更近代的一些神经网络模型中,比如Google的Inception以及微软的ResNet

image.png

VGG模型使用了多个3x3的卷积层来表征复杂的特征,可以看到在VGG-E 的第3,4,5模块中:256x256 以及 512x512 个 3x3的卷积滤波器被连续使用了多次以提取复杂的特征以及这些特征的组合。这一结构设计等效于有512x512个大型的3层分类器,而且他们都是卷积操作,显然这将带来大量的可调参数以及更大的学习能力。但是训练这样规模参数的神经网络是非常困难,因此也不得不将其分裂成多个更小的神经网络,并最后将这些结果组合起来。造成这个问题的主要原因是我们缺少有效的方式去正则化模型,或者说缺乏有效的手段来大大限制由大规模可训练参数所带来的极大的优化搜索空间

VGG很多层中都使用了较大的特征大小,这使得模型在运行时会非常耗时,例如在Inception模型中所做的那样,减少特征的数量可以有效地减少计算耗时

Network-in-network
NiN使用了一个简单但是有效的方式来使用1x1大小的卷积滤波器,这一模型在卷积层提供了更为丰富的组合特征的能力

NiN结构,在每个卷积层之后都增加了一个空间MLP层,在这些特征输入下一个卷基层之前,更好地组合各个特征。再次,我们可以认为1x1的卷积滤波器的设计师有悖于最初LeNet的设计初衷的,但是在理论上我们可以知道1x1的卷积滤波器更有利于组合不同的卷积特征,但是这一功能是无法通过简单地堆积更多卷基层来实现。这个结构不同于直接将每一个像素值作为原始输入。在这里,1x1的卷积滤波器是被用于在空间上组合那些经过卷积之后的映射特征的,这样我们就可以使用非常少的训练参数,而这些参数在特征的每一个像素点上都可以被共享

image.png

MLP的作用在于可以通过一些复杂的组合来组合每一个卷积特征,最大化单独卷积特征的作用,这一想法也被后续用于Inception或者ResNet等模型中。

NiN另一个有效的实践是在最后一层分类层之前使用了平均pooling,这个想法的初衷是在于将输入图片多个区域的神经网络反馈在分类层之前进行平均,以获得更好的分类效果。这个结构设计也应用于后续的很多模型中

注:在后续章节中,我们会继续完成GoogLeNet,Inception,ResNet以及更进一步的最新模型的进展,敬请期待!

相关链接
Dan Ciresan Net:

https://arxiv.org/abs/1003.0358
AlexNet:
https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
Overfeat模型:
https://arxiv.org/abs/1312.6229
VGG:
https://arxiv.org/abs/1409.1556

NiN:
https://arxiv.org/abs/1312.4400

目录
相关文章
|
24天前
|
机器学习/深度学习 算法 PyTorch
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
180 1
|
27天前
|
缓存 网络协议 Linux
【Shell 命令集合 网络通讯 】Linux 配置DNS dnsconf 命令 使用教程
【Shell 命令集合 网络通讯 】Linux 配置DNS dnsconf 命令 使用教程
38 0
|
10天前
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
28 0
|
12天前
|
存储 编译器 Linux
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
|
2天前
|
运维 网络架构
软件体系结构 - 网络拓扑结构
【4月更文挑战第14天】软件体系结构 - 网络拓扑结构
8 0
|
8天前
|
存储 安全 测试技术
网络奇谭:虚拟机中的共享、桥接与Host-Only模式解析
网络奇谭:虚拟机中的共享、桥接与Host-Only模式解析
14 0
|
12天前
|
存储 算法
【算法与数据结构】深入解析二叉树(二)之堆结构实现
【算法与数据结构】深入解析二叉树(二)之堆结构实现
|
25天前
|
SQL 安全 网络安全
构筑数字堡垒:网络安全漏洞解析与防御策略
在数字化时代,网络安全已成为维护信息完整性、保障用户隐私和确保商业连续性的关键。本文将深入探讨网络安全领域的核心议题—安全漏洞及其防御机制。通过分析常见网络攻击手段,如SQL注入、跨站脚本攻击(XSS)及拒绝服务(DoS)攻击,揭示其背后的原理与潜在危害。同时,文章将重点介绍加密技术的种类和应用场景,以及如何通过强化安全意识,构建多层次的防御体系来有效预防和应对网络安全威胁。本研究旨在为读者提供一份系统性的网络安全防护指南,帮助个人和组织在不断演变的威胁面前保持警惕,并采取适当的安全措施。
19 2
|
28天前
|
存储 编解码 索引
了解FFmpeg音频通道布局结构:AVChannelLayout结构体解析
了解FFmpeg音频通道布局结构:AVChannelLayout结构体解析
14 1
|
29天前
|
存储 安全 Linux
C++文件格式深度解析:从底层结构到关键特性
C++文件格式深度解析:从底层结构到关键特性
244 3
C++文件格式深度解析:从底层结构到关键特性

热门文章

最新文章

推荐镜像

更多