:CNN 的演化、深度学习与特征提取——从 Fukushima 到 AlexNet 再到表征学习)
示例工程【免费下载链接】NYU-DLSP20NYU Deep Learning Spring 2020项目地址https://gitcode.com/gh_mirrors/pyt/pytorch-Deep-Learning点击查看免费下载导读本文基于 NYU 深度学习课程NYU-DLSP20Spring 2020第 1 周第 2 节的讲义 docs/es/week01/01-2.md对应英文版 docs/en/week01/01-2.md、中文版 docs/zh/week01/01-2.md讲师为 Yann LeCun系统梳理卷积神经网络CNN从生物启发到 AlexNet 的历史演化、深度学习为何在特征提取上有效、以及为什么需要深度这一核心问题的论证。文中同时结合仓库内的 06-convnet.ipynb 等 PyTorch 实践代码说明这些历史结论在当代框架中的可复现证据。读完本文你将掌握 CNN 设计背后的三条关键先验局部性、平稳性、平移不变性、层级特征提取的本质以及两层谬误的数学直觉并能在当前仓库中亲手运行对比实验验证这些结论。课程上下文本节在 Week 1 中的定位本节属于课程第 1 周Week 1的 Lecture part B。根据仓库中的周概览 docs/en/week01/01.mdLecture part B 的官方主题为首先讨论 CNN 的演化从 Fukushima 到 LeCun 再到 AlexNet然后讨论 CNN 的一些应用如图像分割、自动驾驶车辆和医学图像分析讨论深度网络的层级本质以及使深度网络具有优势的属性最后讨论特征/表征的生成与学习。 这与本节讲义 docs/es/week01/01-2.md 的三大部分——CNN 的演化、深度学习与特征提取、学习表征——一一对应。前序的 Lecture part A见 docs/en/week01/01-1.md已铺垫了视觉皮层的层级处理Fukushima 实验发现 V1 区神经元对视野小区域内特定朝向的边缘做出有序反应本节则在此基础上展开 CNN 架构本身的历史与原理。CNN 的演化从视觉皮层到 AlexNet生物启发方向选择性神经元与视野复制讲义首先指出动物大脑中的一个关键观察神经元对特定方向的边缘edges做出反应而对同一方向反应的神经元群体会被复制到整个视野visual field。这一观察是 CNN 中权值共享weight sharing思想的生物学源头同一组检测特定方向边缘的滤波器以复制的方式覆盖整幅图像的所有位置从而对图像中任意位置出现的同一特征都能产生响应。Fukushima (1982)神经认知机与卷积汇聚Fukushima 于 1982 年构建了一个与大脑工作方式相同的神经网络其设计基于两个概念神经元跨视野复制与上述生物观察一致复杂细胞汇聚简单细胞的信息简单细胞是方向选择性单元而复杂细胞将来自多个简单细胞的信息进行汇合。由此产生一个重要的性质图片的平移会改变简单细胞的激活但不会影响复杂细胞的集成激活——这正是讲义中卷积汇聚convolutional pooling操作的本质也就是卷积池化结构为网络带来的平移鲁棒性。仓库中的 PyTorch 实验 06-convnet.ipynb 在Deep Learning 中的先验知识一节给出了与之一致的现代表述Convolutions: locality stationarity of images卷积图像的局部性与平稳性Pooling: Invariance of object class to translations池化目标类别对平移的不变性可见这一 1982 年的设计理念至今仍是 CNN 的核心假设。LeCun (1990)反向传播训练 CNN 识别手写数字LeCun 于 1990 年使用反向传播backpropagation训练 CNN 进行手写数字识别并在 1992 年的演示中展示了该算法能识别任意风格的数字。讲义强调在当时使用端到端end-to-end训练的模型直接完成字符/模式识别是非常新颖的做法——此前的主流方案是手工设计的特征提取器 上层监督模型的两阶段流程这一范式在 docs/en/week01/01-1.md 的Pattern Recognition 的历史一节有更详细的背景。端到端训练意味着特征提取不再需要人工设计而是由网络在训练中自行学习这正是深度学习区别于传统模式识别的分水岭。滑窗多字符识别 → 人脸检测 → 语义分割这些早期的 CNN 系统能够同时识别图像中的多个字符做法是在 CNN 上使用一个小的输入窗口将其滑过整幅图像若窗口内被激活则表明该位置存在某个特定字符。这一滑窗思想随后被推广到人脸/人物检测语义分割逐像素分类代表工作包括 Hadsell (2009) 与 Farabet (2012)工业界应用例如自动驾驶中的车道跟踪lane tracking。讲义还特别提到一个有趣的历史循环用于训练 CNN 的专用硬件在 20 世纪 80 年代曾是热门话题随后兴趣衰退而在深度学习复兴后又重新成为热点——这与 GPU 在 AlexNet 训练中的关键作用直接呼应。AlexNet 与深度学习革命2010–2013深度学习的革命尽管当时尚未使用该术语始于 2010–2013 年。研究者致力于发明能让大型 CNN 训练更快的算法。Krizhevsky (2012) 提出的AlexNet是当时远超以往规模的 CNN使用 GPU 在ImageNet130 多万张图片上训练经过数周运行后以巨大优势击败了同期最佳系统将top-5 错误率从 25.8% 降到 16.4%。讲义接着描述了这一事件对计算机视觉社区的深远影响2011–2012 年间所有提及 CNN 的论文均被拒稿而自 2016 年起大多数被接收的 CV 论文都在使用 CNN。AlexNet 的成功让社区确信 CNN 确实有效由此开启了深度学习在视觉领域的全面普及。层数演进与规模-精度-计算权衡讲义给出了一条经典的层数增长曲线网络层数LeNet7AlexNet12VGG19ResNet50同时明确指出其中的核心矛盾计算输出所需操作数、模型大小与精度之间存在权衡trade-off。因此如何压缩网络以加快计算成为当时乃至今日的热门研究方向。这一点也可以从仓库的 PyTorch 实验中看到印证06-convnet.ipynb 中专门定义了一个get_n_params(model)函数来统计模型参数量并在相同参数数量的全连接网络 vs CNN对比实验中使用它说明参数量模型大小是衡量和比较网络时不可回避的维度。仓库实践PyTorch 中 CNN 先验假设的验证06-convnet.ipynb 是本节理论在仓库中的直接落地它训练一个 CNN 与一个参数数量相同的全连接网络FC2Layer做对比并进一步做像素置换permuted pixels实验。其关键代码中的 CNN 定义为class CNN(nn.Module): def __init__(self, input_size, n_feature, output_size): super(CNN, self).__init__() self.n_feature n_feature self.conv1 nn.Conv2d(in_channels1, out_channelsn_feature, kernel_size5) self.conv2 nn.Conv2d(n_feature, n_feature, kernel_size5) self.fc1 nn.Linear(n_feature*4*4, 50) self.fc2 nn.Linear(50, 10) def forward(self, x, verboseFalse): x self.conv1(x) x F.relu(x) x F.max_pool2d(x, kernel_size2) x self.conv2(x) x F.relu(x) x F.max_pool2d(x, kernel_size2) x x.view(-1, self.n_feature*4*4) x self.fc1(x) x F.relu(x) x self.fc2(x) x F.log_softmax(x, dim1) return x这段代码直观体现了讲义的理论两个nn.Conv2d局部连接 权值共享对应局部性与平稳性先验 两个F.max_pool2d对应平移不变性先验最后接入全连接分类头。实验结论与讲义的历史叙事完全一致在相同参数数量下CNN 表现优于全连接网络因为它利用了关于图像的正确先验知识当把像素随机置换后CNN 性能显著下降而全连接网络性能基本不变——因为 CNN 的像素位于网格且具有局部平稳性假设被破坏而全连接网络不依赖该假设。这组实验正是对讲义中CNN 从大脑复制/汇聚概念出发最终因正确的先验而胜出这一历史脉络的当代验证。深度学习与特征提取组合性结构深度网络为何是层级化的讲义的核心论点之一是多层网络之所以成功是因为它利用了自然数据的组合结构compositional structure。在组合层级中层级结构中某一层对象的组合形成下一层中的对象。如果把这种层级结构建模为多层网络并让网络自己学习特征的合适组合就得到了深度学习架构——因此深度学习网络本质上是层次化的hierarchical。这一观点与 docs/en/week01/01-1.md 中视觉皮层以层级方式做模式识别V1 神经元对局部小区域内的特定特征反应、相邻神经元反应相邻视野区域的神经科学背景一脉相承。视觉任务的大步跨越Mask-RCNN、RetinaNet 与 Detectron深度学习架构推动了计算机视觉任务的巨大进步从为物体生成精确的遮罩mask到识别物体的空间属性。讲义点名了两个代表性架构Mask-RCNN广泛用于分割独立对象即为图像中的每个对象创建遮罩其输入和输出都是图像。该架构还可用于实例分割instance segmentation即在一张图像中识别同一类型的不同对象RetinaNet与 Mask-RCNN 一起被认为是上述改进的主要贡献者。讲义还提到Facebook AI ResearchFAIR开发的软件系统Detectron以开源方式实现了这些 SOTA 目标检测算法使得这些先进架构可以被工业界和学术界直接使用。实际应用自动驾驶与医学影像CNN 的典型实际应用包括赋能自动驾驶如前面提到的车道跟踪与医学图像分析。这两类应用都受益于 CNN 对自然图像结构的利用也都能在仓库的课程实验环境environment.yml包含pytorch、torchvision、opencv、librosa等依赖中通过 06-convnet.ipynb 的 MNIST 流程初步体验其工作方式。特征提取的本质升维使数据线性可分讲义给出一个精炼的表述特征提取 扩展表征维度使扩展后的特征更可能线性可分。其理由是数据点位于更高维空间时由于可能的分离平面数量增加它们更可能被线性超平面分开。由此引出深度学习的范式转变早期机器学习从业者依赖高质量、手工设计、针对特定任务的特征来构建模型而深度学习的出现让模型能够自动提取通用特征。讲义列举了特征提取算法中一些常见的历史方法空间贴片Space tiling随机投影Random projections多项式分类器特征向量积Polynomial classifier径向基函数Radial basis functions核机Kernel machines这些方法都可以看作手动或固定规则地把输入映射到更高维/更适合线性分类的空间而深度学习用可学习的层级网络取代了这一人工过程。数据的层级结构图像、文本、语音由于数据的组合性质学习到的特征随抽象层次增加而呈现层级化表征。讲义给出了三个经典例子图像像素pixels→ 边缘edges→ 纹理基元textons多边缘形状→ 图案motifs→ 图像部件 → 最终图像文本字符characters→ 词words→ 词组 → 子句clauses→ 句子sentences→ 故事含义语音样本samples→ 波段bands→ 声音sounds→ 元音phones→ 音素phonemes→ 词 → 句子。这一层级观是深度之所以必要的最直观理由每一层网络恰好可以对应组合层级中的一级抽象。学习表征为什么需要深度两层谬误SVM 与模板 线性分类器有一种对深度学习的常见质疑既然两层结构可以近似任意函数为什么还需要更多层讲义以SVM为例回应SVM 在数据的张成空间中寻找分离超平面预测基于与训练样本的比较从结构上看SVM 本质是一个极简的两层神经网络第一层定义模板templates第二层是线性分类器两层方案的谬误在于中间层模板层的复杂度和大小是 N 的指数级——要在一个困难任务上表现好需要海量模板而如果把层数扩展到 log(N) 的量级各层复杂度可降为 N 的线性级别。这里存在时间与空间的权衡要么用极少数层但每层极其庞大指数级资源要么用较多层但每层较小线性级资源。深度网络选择了后者。布尔电路类比讲义用电路设计做了类比设计一个不超过两层逻辑门的电路来计算布尔函数理论上可以计算任意布尔函数但对于复杂函数第一层所需的逻辑门数量及其资源会迅速变得不可行。这与神经网络的情形完全同构——增加层数深度而非无限膨胀单层宽度是控制总资源消耗的关键。什么是深度讲义给出三条判定标准澄清深并非简单的层数多SVM 不是深的因为它只有两层分类树不是深的因为它的每一层分析的都是相同的原始特征深度网络有多层并用这些层构建一个复杂性递增的特征层级结构。换言之深度的本质在于逐层抽象、层层递进地构建特征而非机械地堆叠层数。流形假设自然数据是低维流形模型是如何学到好的表征特征的讲义提出流形假设manifold hypothesis自然数据存在于一个低维流形上所有可能图像的集合本质上是无限的而自然图像的集合只是其中极小的子集例如对于一个人的图像可能的图像集合规模大约与可活动的面部肌肉数量自由度同数量级约50个自由度一个理想但不现实的特征提取器应当表达所有这些变化因素每块肌肉、光照等。流形假设解释了为何低维、紧凑的表征是可能的数据的内在自由度远小于像素空间维度一个好的表征应捕捉这些少数变化因素。课堂 QAPCA 能提取这些特征吗讲义末尾的问答讨论了一个尖锐问题对于人脸例子能否用其他降维技术如 PCA提取这些特征回答只有当流形表面是超平面时才可行但事实并非如此。人脸的流形如表情、姿态变化所张成的低维结构是非线性的而 PCA 只能做线性投影因此无法正确展开非线性流形——这正说明需要深度网络这类非线性表征学习模型。在当前仓库中复现与延伸若想亲手验证本节内容可按以下方式使用仓库资源按 environment.yml 创建环境conda env create -f environment.yml环境名NYU-DL包含pytorch、torchvision、matplotlib、jupyterlab、opencv等打开 06-convnet.ipynb依次运行(a) 训练相同参数量的全连接网络与 CNN观察 CNN 在 MNIST 上的优势(b) 用像素置换破坏 CNN 的局部性/平稳性先验观察其性能下降而全连接网络不受影响(c) 使用get_n_params(model)对比两者参数量体会模型大小-精度权衡对照讲义 docs/es/week01/01-2.md 中的历史脉络Fukushima 的复制/汇聚 → LeCun 的端到端 → AlexNet 的规模化理解实验中的卷积与池化正是复制与汇聚的现代实现。更进一步的阅读建议本节的神经科学前奏见 docs/en/week01/01-1.md视觉皮层层级处理、反向传播与梯度下降、模式识别历史Week 1 整体大纲见 docs/en/week01/01.md绘制工具类见 res/plot_lib.pynotebook 中plot_data、plot_model等可视化函数。小结本节讲义 docs/es/week01/01-2.md 完成了一条完整的论证链CNN 从生物神经科学的方向选择性 复制 汇聚出发Fukushima 1982经 LeCun (1990) 的端到端反向传播训练确立范式再到 AlexNet (2012) 用 GPU 大数据证明规模化威力随后解释了深度学习因利用数据的组合结构而天然层级化特征提取的本质是通过升维实现线性可分最后用 SVM/布尔电路类比与流形假设回答了为什么需要深度这一根本问题。仓库中的 06-convnet.ipynb 以现代 PyTorch 代码重现了这些先验假设及其失效场景使历史结论在今天依然可以直接运行、验证和教学。赞分享示例工程【免费下载链接】NYU-DLSP20NYU Deep Learning Spring 2020项目地址https://gitcode.com/gh_mirrors/pyt/pytorch-Deep-Learning点击查看免费下载相关推荐从 Fukushima 到 AlexNetCNN 的演进、特征提取与深度表示学习NYU-DLSP20 第 1 讲 B 部分从 Fukushima 到 AlexNetCNN 的演进、特征提取与深度表示学习NYU DLSP20 第 1 讲 B 部分 本篇文章整理自 NYU Dee示例工程NYU-DLSP20 第一讲下从 LeCun 到 AlexNet 的 CNN 演化史与为什么需要深度的表示学习原理NYU DLSP20 第一讲下从 LeCun 到 AlexNet 的 CNN 演化史与为什么需要深度的表示学习原理 本篇技术指南完整梳理 NYU 深度示例工程NYU-DLSP20 第一周深度学习动机、CNN 演化与空间拉伸可视化实战NYU DLSP20 第一周深度学习动机、CNN 演化与空间拉伸可视化实战 导读 本文是 NYU DLSP20NYU Deep Learning Sprin示例工程上一篇一键批量下载网页资源ResourcesSaverExt让网站素材收集变得如此简单下一篇3分钟掌握视频号批量下载开源神器res-downloader终极使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考