×

PyTorch教程8.1之深度卷积神经网络(AlexNet)

消耗积分:0 | 格式:pdf | 大小:0.47 MB | 2023-06-05

张磊

分享资料个

尽管 CNN 在引入 LeNet 后在计算机视觉和机器学习社区中广为人知 LeCun等人,1995 年,但它们并没有立即占据该领域的主导地位。尽管 LeNet 在早期的小型数据集上取得了不错的成绩,但在更大、更真实的数据集上训练 CNN 的性能和可行性尚未确定。事实上,在 1990 年代初期和 2012 年分水岭结果之间的大部分时间里Krizhevsky等人,2012 年,神经网络经常被其他机器学习方法超越,例如内核方法Schölkopf 和 Smola,2002 年 , 集成方法 ( Freund et al. , 1996 )和结构化估计 ( Taskar et al. , 2004 )

对于计算机视觉,这种比较可能并不完全准确。也就是说,尽管卷积网络的输入由原始或轻微处理(例如,通过居中)的像素值组成,但从业者永远不会将原始像素输入传统模型。相反,典型的计算机视觉管道由人工设计的特征提取管道组成,例如 SIFT ( Lowe, 2004 )、SURF ( Bay et al. , 2006 )和视觉词袋 ( Sivic and Zisserman, 2003 )不是学习这些特征,而是精心制作这些特征. 大多数进步一方面来自于对特征提取有更聪明的想法,另一方面来自于对几何学的深刻洞察Hartley和 Zisserman,2000 年) 。学习算法通常被认为是事后才想到的。

尽管在 1990 年代出现了一些神经网络加速器,但它们的功能还不足以制作具有大量参数的深度多通道、多层 CNN。例如,NVIDIA 的 GeForce 256 从 1999 年开始能够每秒处理最多 4.8 亿次操作 (MFLOP),而没有任何有意义的编程框架用于游戏以外的操作。今天的加速器每台设备能够执行超过 300 TFLOPs(NVIDIA 的 Ampere A100)。请注意,FLOP是浮点运算,例如乘法和加法。此外,数据集仍然相对较小:OCR on 60,000 low-resolution28×28像素图像被认为是一项极具挑战性的任务。除了这些障碍之外,训练神经网络的关键技巧包括参数初始化启发式 Glorot 和 Bengio,2010 年、随机梯度下降的巧妙变体Kingma 和 Ba,2014 年、非压缩激活函数 Nair 和 Hinton,2010 年,和有效的正则化技术 ( Srivastava et al. , 2014 )仍然缺失。

因此,与其训练端到端(像素到分类)系统,经典管道看起来更像这样:

  1. 获得一个有趣的数据集。在早期,这些数据集需要昂贵的传感器。例如, 1994 年的Apple QuickTake 100拥有高达 0.3 兆像素 (VGA) 的分辨率,能够存储多达 8 张图像,而所有这些的价格都是 1,000 美元。

  2. 根据光学、几何学和其他分析工具的一些知识,偶尔根据幸运研究生的偶然发现,使用手工制作的特征对数据集进行预处理。

  3. 通过一组标准的特征提取器输入数据,例如 SIFT(尺度不变特征变换)Lowe,2004 年、SURF(加速稳健特征) Bay等人,2006 年,或任何数量的其他手-调整管道。OpenCV 至今仍提供 SIFT 提取器!

  4. 将生成的表示转储到您最喜欢的分类器中,可能是线性模型或内核方法,以训练分类器。

如果您与机器学习研究人员交谈,他们认为机器学习既重要又美丽。优雅的理论证明了各种分类器的特性 Boucheron等人,2005 年,凸优化 Boyd 和 Vandenberghe,2004 年已成为获得它们的中流砥柱。机器学习领域蓬勃发展、严谨且非常有用。但是,如果您与计算机视觉研究人员交谈,您会听到截然不同的故事。他们会告诉你,图像识别的肮脏真相是特征、几何 Hartley 和 Zisserman,2000 年Hartley 和 Kahl,2009 年和工程学,而不是新颖的学习算法,推动了进步。计算机视觉研究人员有理由相信,与任何学习算法相比,稍微更大或更清洁的数据集或稍微改进的特征提取管道对最终准确性的影响要大得多。

import torch
from torch import nn
from d2l import torch as d2l
from mxnet import init, np, npx
from mxnet.gluon import nn
from d2l import mxnet as d2l

npx.set_np()
import jax
from flax import linen as nn
from jax import numpy as jnp
from d2l import jax as d2l
import tensorflow as tf
from d2l import tensorflow as d2l

8.1.1. 表征学习

另一种表达事态的方法是管道中最重要的部分是表示。直到 2012 年,表示法主要是机械计算的。事实上,设计一组新的特征函数、改进结果并编写方法是一种突出的论文类型。SIFT Lowe,2004、SURF Bay等人,2006、HOG(定向梯度直方图)Dalal 和 Triggs,2005、视觉词袋 Sivic 和 Zisserman,2003和类似的特征提取器统治了栖息。

另一组研究人员,包括 Yann LeCun、Geoff Hinton、Yoshua Bengio、Andrew Ng、Shun-ichi Amari 和 Juergen Schmidhuber,有不同的计划。他们认为应该学习特征本身。此外,他们认为要合理复杂,特征应该由多个联合学习层分层组成,每个层都有可学习的参数。在图像的情况下,最低层可能会检测边缘、颜色和纹理,类似于动物的视觉系统如何处理其输入。特别是,视觉特征的自动设计,例如通过稀疏编码获得的特征Olshausen 和 Field,1996 年在现代 CNN 出现之前仍然是一个开放的挑战。直到 Dean等人。( 2012 ), Le ( 2013 ),从图像数据自动生成特征的想法获得了显着的吸引力。

第一个现代 CNN Krizhevsky等人,2012 年以其发明者之一 Alex Krizhevsky 的名字命名为 AlexNet ,主要是对 LeNet 的进化改进。它在 2012 年的 ImageNet 挑战赛中取得了优异的成绩。

https://file.elecfans.com/web2/M00/A8/BC/poYBAGR3Ih-AFeAZAAKXP9ED7qQ785.png

图 8.1.1 AlexNet 第一层学习的图像过滤器。复制由Krizhevsky等人提供。( 2012 )

有趣的是,在网络的最低​​层,该模型学习了类似于一些传统过滤器的特征提取器。 图 8.1.1显示了较低级别的图像描述符。网络中的更高层可能基于这些表示来表示更大的结构,如眼睛、鼻子、草叶等。甚至更高的层可能代表整个对象,如人、飞机、狗或飞盘。最终,最终的隐藏状态学习图像的紧凑表示,总结其内容,这样属于不同类别的数据可以很容易地分开。

AlexNet (2012) 及其前身 LeNet (1995) 共享许多架构元素。这就引出了一个问题:为什么花了这么长时间?一个关键区别在于,在过去二十年中,可用的数据量和计算能力显着增加。因此 AlexNet 更大:与 1995 年可用的 CPU 相比,它使用更多数据和更快的 GPU 进行训练。

8.1.1.1。缺少的成分:数据

具有多层的深度模型需要大量数据才能进入显着优于基于凸优化的传统方法(例如,线性和核方法)的状态。然而,鉴于计算机的存储容量有限、(成像)传感器的相对费用以及 1990 年代相对紧张的研究预算,大多数研究都依赖于微小的数据集。许多论文依赖于 UCI 的数据集集合,其中许多仅包含数百或(几)数千张以低分辨率捕获的图像,并且通常具有人为清洁的背景。

2009 年,ImageNet 数据集发布 Deng等人,2009 年,挑战研究人员从 100 万个示例中学习模型,每个示例来自 1000 个不同类别的对象 1000 个。类别本身基于 WordNet 中最流行的名词节点Miller,1995ImageNet 团队使用 Google Image Search 为每个类别预过滤大型候选集,并使用 Amazon Mechanical Turk 众包管道来确认每个图像是否属于相关类别。这个规模是前所未有的,超过其他规模超过一个数量级(例如,CIFAR-100 有 60,000 张图像)。另一个方面是图像的分辨率相对较高224×224 像素,不同于 8000 万大小的 TinyImages 数据集 Torralba等人,2008 年,包括 32×32像素缩略图。这允许形成更高级别的特征。相关竞赛被称为 ImageNet 大规模视觉识别挑战赛 Russakovsky等人,2015 年,推动了计算机视觉和机器学习研究的发展,挑战研究人员确定哪些模型在比学术界之前考虑的更大的规模上表现最好。最大的视觉数据集,如 LAION-5B Schuhmann等人,2022 年包含数十亿张带有附加元数据的图像。

8.1.1.2。缺少的成分:硬件

深度学习模型是计算周期的贪婪消费者。训练可能需要数百个时期,每次迭代都需要通过多层计算昂贵的线性代数运算来传递数据。这是为什么在 1990 年代和 2000 年代初期,基于更有效优化的凸目标的简单算法受到青睐的主要原因之一。

图形处理单元(GPU) 被证明是使深度学习可行的游戏规则改变者。这些芯片长期以来一直被开发用于加速图形处理以造福于计算机游戏。特别是,它们针对高吞吐量进行了优化4×4 许多计算机图形任务都需要矩阵向量积。幸运的是,数学与计算卷积层所需的数学惊人地相似。大约在那个时候,NVIDIA 和 ATI 已经开始针对通用计算操作优化 GPU Fernando,2004 年,甚至将它们作为 通用 GPU (GPGPU) 推向市场。

为了提供一些直觉,请考虑现代微处理器 (CPU) 的内核。每个内核都相当强大,以高时钟频率运行并运行大型缓存(高达几兆字节的 L3)。每个内核都非常适合执行各种指令,具有分支预测器、深度管道、专门的执行单元、推测执行和许多其他功能,使其能够运行具有复杂控制流的各种程序。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !