《ImageNet Classification with Deep Convolutional Neural Networks》阅读笔记

news2024/10/2 1:28:05

论文标题

《ImageNet Classification with Deep Convolutional Neural Networks》

  • ImageNet :经典的划时代的数据集
  • Deep Convolutional:深度卷积在当时还处于比较少提及的地位,当时主导的是传统机器学习算法

作者

一作 Alex Krizhevsky 和二作 Ilya Sutskever 都是 2018 年因作为 “深度学习领域的三大先驱之一” 而获得图灵奖的 Geoffrey E. Hinton 辛老爷子的学生。值得一提的是,二作 Ilya Sutskever 苏哥如今正带着 OpenAI 大杀四方,这位大佬又一次站在了人工智能发展史的转折点上。

初读

摘要

  • 秀肌肉:

    展示了 AlexNet 空前的低错误率,庞大的参数量和神经元数。

  • 介绍网络结构:

    五个卷积层组成,其中一些层后面是最大池化层,还有三个完全连接层,最后是 1000 路 softmax。

  • 引入新的方法:

    丢弃法。

结论

  • 本文使用的是 Discussion 讨论,而不是 Conclusion 结论。
  • 再次秀一下空前的精度,并强调了深度的重要性。
  • 没有使用无监督学习以简化实验。
  • 提出展望:想对视频序列进行深度学习。

再读

Section 1 Introduction

  • 第一段主题:数据集

    小图像数据集有很大的缺陷,为了应对现实环境中对象相当大的可变性,必须引入更大的数据集。小图像数据集的缺点虽早已广为人知 [TODO],但直到最近(当年的最近)才有诸如 ImageNet 之类的大数据集出现。

  • 第二段主题:卷积,卷的好

    繁杂的图像识别需要强大的学习能力,强大的学习能力优需要强大的模型,强大的模型意味着超高的复杂度。而卷积网络使用的参数少的多,训练更容易。

  • 第三段主题:算力

    卷积虽然大大降低了训练难度,但是大规模的训练依然很难。作者将 2D 卷积结合GPU进行了优化,进行了模型并行训练。

  • 第四段主题:再次秀肌肉

    • 迄今为止最大的卷积神经网络
    • 使用双GPU进行模型并行训练
    • 引入新方法来防止过拟合
    • 强调深度很重要
  • 第五段主题:训练难度

    总结了网络大小的两大制约因素:显存和时间。作者的网络采用了两块 3GB 显存的 GTX 580,训练周期在五到六天。

Section 2 The Dataset

  • ImageNet 详细介绍:

    由超 1500 万张带标签的高分辨率图像组成,包含大约 22000 个类别。从 2010 年开始的挑战赛使用的 ILSVRC 数据集是 ImageNet 的子集,由 ImageNet 中的 120 万张训练图像、5 万张验证图像和 15 万张测试图像组成,包含约 1000 个分类的各约 1000 张图片。

  • 测试集的问题:

    这段没看明白,作者说 ILSVRC-2010 是唯一可用的测试集,但是也参加了 ILSVRC-2012。待会再细看一下ILSVRC 到底是怎么个事儿 [TODO]

  • 图像预处理

    本文模型所需要的图像预处理极少,仅仅按照 256 × 256 256\times 256 256×256 的尺寸裁剪即可。经沐神提点,此处也是作者没有意识到,但是实际上很厉害的特点之一,此前需要对图像进行人工特征提取之类的复杂的预处理。

Section 3 The Architecture

  • 使用 ReLU:更好

    使用 ReLu 会比使用 tanh 训练快得多,甚至使用 ∣ t a n h ∣ |tanh| tanh 也会好很多。但是并没有详细解释原因,仅给出了参考文献。此外,也不太理解这里 saturating 和 non-saturating 是啥意思 [TODO]

    在这里插入图片描述

  • 多 GPU:复杂

    这里介绍了使用双 GPU 进行训练。而且还不是类似分布式计算的东西,而是类似模型分布训练,两个 GPU 上各有一个卷积核,在第3、5层进行通信。

    沐神提点,虽然这里的 GPU 并行运算占了作者很大工作量,但实际上这个方案通用性比较低,没有广泛应用。这部分属于复杂的工程细节,不必详看。

  • 局部响应规范化

    使用了一个看起来很复杂的规范化公式,也不知道为啥有用,反正有用,用就完了。沐神提点,此处的规范化方法也没有得到广泛的应用,一是规范化似乎影响不那么大,二是后面又更好的规范化方法。

  • 重叠池化

    据作者描述,重叠池化提高了百分之零点几的精度,但是会使拟合变得稍微困难一点。没听说过重叠池化这个东西,一会儿再看看 [TODO]

  • 整体结构

    和之前在书本上看的简化模型差不多,在此不赘述。原文模型更多是为了双GPU实现模型分布训练而做了特殊设计,当前的GPU性能已无此类烦恼。

    在这里插入图片描述

Section 4 Reducing Overfitting

这一部分着重讲的是对严重过拟合的处理。

  • 数据扩充

    主要使用了一下两种数据增强方案:

    • 一是生成图像平移和水平反射:

      具体操作是在 256 × 256 256\times 256 256×256 的图像上随机提取 224 × 224 224\times 224 224×224 的子图像,以达到扩充数据的目的。

    • 二是改变训练图像中的 RGB 通道的强度:

      具体操作是对训练集中对 RGB 像素值执行 PCA 来取得主要特征,然后加 σ = 0.1 \sigma=0.1 σ=0.1 的高斯分布的噪声。

  • Dropout 丢弃法

    这里使用了概率为 0.5 的 dropout,详细操作不在此赘述。

Section 5 Details of learning

  • 权重衰减:使用了 0.0005 的权重衰减。

  • 手动调节学习率

    在训练过程中,每次遇到拟合不动的时候,就把学习率缩小十倍 [TODO]。作者将学习率初始化为 0.01 并在训练过程中手动调节了三次。最终花了五到六天,训练了 90 轮。

Section 6 Results

  • 精度

    • Top-1 错误率做到了 37.5%,相较于 Sparse coding 稀疏编码的 47.1% 和 SIFT + FVs 尺度不变特征变换的 45.7% 有较大提升。
    • Top-5 错误率做到了 17.0%,相较于 Sparse coding 稀疏编码的 28.2% 和 SIFT + FVs 尺度不变特征变换的 25.7% 有较大提升。
  • 定性评估

    • 由于受限连接,两个 GPU 上的两个网络各有不同侧重点,比如,GPU1 上的卷积核很大程度上与颜色无关。

      在这里插入图片描述

    • 通过观察,发现排名前五的预测标签都是合理的。并且偏离中心的对象也能够识别。

      <在这里插入图片描述

    • 比较有意思的是,作者把网络最后一层那个 4096 维的特征向量摘了出来,把具有最小欧氏距离的特征向量对应的图像放在一起,可以看到这些图像都是一类的。可以说这个 4096 维的特征向量就是模型的眼看到的图像。

      在这里插入图片描述

三读

TODO List

  • 小图像数据集和大图像数据集
  • ILSVRC-2010 和 ILSVRC-2012
  • saturating 和 non-saturating nonlinearities
  • ReLU 和 tanh
  • 重叠池化
  • 手动调节学习率

使用大图像数据集的必要性

这各问题读了参考文献 [21] N. Pinto, D.D. Cox, and J.J. DiCarlo. Why is real-world visual object recognition hard? PLoS computational biology, 4(1):e27, 2008. 不过这个参考文献又长又数学,实在读不懂,就用文心一言摘要了一下。一下为文心一言的辅助阅读结果。

这篇文章介绍了美国 McGovern 研究所和麻省理工学院等机构开发的自然图像数据库及其类别标签,以及不同识别系统的表现。重点来看图像背景的变化是影响识别系统性能的一个重要因素。例如,当图像中存在噪声、光照变化、或者物体姿态和大小的变化时,识别系统的性能可能会受到影响。这些背景变化可以导致图像的外观和特征发生改变,从而增加识别系统的难度。如果你正在构建一个识别系统,你会希望这个系统能在各种不同的背景上都能正常工作。然而,如果这些背景与所训练的图像数据集中的背景非常不同,那么你的识别系统可能就会遇到困难。为了解决这个问题,你可能需要收集更多具有不同背景的图像,并将它们添加到你的训练数据集中。这将有助于提高你的识别系统在各种不同背景上的性能。

ILSVRC-2010 和 ILSVRC-2012

因为只有 ILSVRC-2010 公布了测试集,从而可以自己验证。后续的 ILSVRC 2012-2017 都是需要像 Kaggle 竞赛那样上传到评估服务器。

top-5 评估法:对于每张图给出5次猜测结果,只要5次中有一次命中真实类别就算正确分类。

saturating 和 non-saturating nonlinearities

关于饱和非线性和不饱和非线性的理解参考 StackExchange 上的这个问答 和 Quora 上这个回答。

这里的饱和和非饱和指的是定义域到值域是否会压缩。比如 ReLU 的正半轴上当 x 趋于无穷时函数值也趋于无穷,所以可以说这段是非饱和的;而 sigmoid 会把输出压缩到 [0,1],所以就可以说是饱和的。

ReLU 和 tanh

关于 ReLU 为什么好,参考了本文的参考文献 [20] V. Nair and G. E. Hinton. Rectified linear units improve restricted boltzmann machines. In Proc. 27th International Conference on Machine Learning, 2010.

ReLU 在输入小于0时输出0,这有效地避免了梯度消失的问题。也就是说,当反向传播时,如果上一个层的输出小于0,ReLU将不会更新其权重。这可以防止梯度消失的问题,也就是随着反向传播层数的增加,梯度会越来越小,最终接近于0。这有助于网络在训练过程中不会陷入局部最优解。

据沐神说,实际上后来人们发现激活函数的影响很小,所以这里其实也不必过多考虑。

重叠池化

是我理解复杂了,其实就是步长小于池化层尺寸的池化,也就是咱日常使用的池化,不重叠的池化反倒少见了。

手动调节学习率

现在的学习率调节会使用一些更柔和的手段而不是直接十倍十倍的降,比如会先线性增长再依余弦函数下降。大略画一下是这样:

个人感想

就如沐神所言,这篇论文读起来非常像一个技术说明书,阐述了自己怎么做的,而没有列举目前的别人的方案,有些自说自话的感觉。不过 AlexNet 的设计过于经典,沐神嘴里“不那么好”的论文也是不折不扣的奠基之作。

作为经典论文,AlexNet 有其经典之处,但也有过时之处,甚至有很多回旋镖。比如当年的潮流是无监督学习,AlexNet 带火了有监督学习,到了如今,随着 BERT 和 GAN 的兴起,有掀起了无监督学习的潮流;再比如其中的多GPU并行处理,由于GPU性能的飞速增长而被认为很复杂没怎么用,随着现在大模型的出现又兴起了多GPU甚至GPU集群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1072326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

点餐小程序实战教程07-点餐功能开发

目录 1 菜品列表功能2 给分类添加排序字段3 给数据列表设置筛选条件4 实现数量选择5 全局变量定义6 选购数量初始化总结 上一篇我们介绍了菜品分类功能&#xff0c;主要是使用侧边选项卡组件来实现。在点餐场景中&#xff0c;我们在选中分类的时候是希望看到分类下的菜品&#…

面试官:听说你很懂SpringMVC,那讲讲其内部对于请求的处理吧!

本系列文章皆在分析SpringMVC的核心组件和工作原理&#xff0c;让你从SpringMVC浩如烟海的代码中跳出来&#xff0c;以一种全局的视角来重新审视SpringMVC的工作原理. 作者&#xff1a;毅航 在过去的很长一段时间内&#xff0c;笔者对SpringMVC中的核心控制器DispatcherServle…

《鱿鱼游戏》杀入体验店 SandboxVR未能复制神话

曾经火爆全网的剧集《鱿鱼游戏》这回真的变成游戏了&#xff0c;而且还是能身临其境去玩的那种。 9月底&#xff0c;沉浸式游戏社交公司Sandbox VR与全球知名流媒体Netflix合作&#xff0c;将《鱿鱼游戏》搬入VR体验店&#xff0c;用线下场地VR的方式&#xff0c;重现123木头人…

jvm--执行引擎

文章目录 1. 执行引擎的工作流程2. 解释器、JIT及时编译器3. 热点代码及探测技术4. HotSpotVM 中 JIT 分类 执行引擎属于 JVM 的下层&#xff0c;里面包括解释器、及时编译器、垃圾回收器 JVM 的主要任务是负责 装载字节码到其内部&#xff0c;但字节码并不能够直接运行在操作…

vite+vue3+ts中使用require.context | 报错require is not defined | 获取文件夹中的文件名

vitevue3ts中使用require.context|报错require is not defined|获取文件夹中的文件名 目录 vitevue3ts中使用require.context|报错require is not defined|获取文件夹中的文件名一、问题背景二、报错原因三、解决方法 一、问题背景 如题在vitevue3ts中使用required.context时报…

JDK21 要来了,,你不会还在用 Java 8吧!

目前 Java 的最新稳定版是 JDK 20&#xff0c;但这是个过渡版&#xff0c;JDK21就是 LTS 版的了&#xff0c;也快要发布了&#xff0c;在今年9月份&#xff08;也就是2023年9月&#xff09;就要正式发布了。 但是&#xff0c;猜都不用猜&#xff0c;你肯定还在用 Java 8 吧&…

【密评】商用密码应用安全性评估从业人员考核题库(七)

商用密码应用安全性评估从业人员考核题库&#xff08;七&#xff09; 国密局给的参考题库5000道只是基础题&#xff0c;后续更新完5000还会继续更其他高质量题库&#xff0c;持续学习&#xff0c;共同进步。 1501 判断题 在公钥密码体制中&#xff0c;使用接收方的公钥加密的消…

MySQL通用查询日志 general query log 详解

通用查询日志&#xff08;general query log&#xff09;用来记录用户的所有操作&#xff0c;包括启动和关闭MySQL服务、所有用户的连接开始时间和截止时间、发送给MySQL数据库服务器的所有SQL指令等。当我们的数据发生异常时&#xff0c;查看通用查询日志&#xff0c;还原操作…

Oracle笔记-对ROWNUM的一次理解(简单分页)

此博文记录时间&#xff1a;2023-05-05&#xff0c;发到互联网上是2023-10-09 这个在分页里面用得比较多&#xff0c;在MySQL中&#xff0c;通常使用limit去操作&#xff0c;而去感觉比较简单&#xff0c;Oracle中无此关键字。 通过查阅资料后&#xff0c;要实现分页需要用到…

论文阅读笔记(Clover: 计算与存储被动分离的分布式键值存储系统)

关于Disaggregating Persistent Memory and Controlling Them Remotely: An Exploration of Passive Disaggregated Key-Value Stores这篇论文的笔记 原文链接 提出背景 传统的分布式存储系统中&#xff0c;每个节点都会包含计算和存储两个部分&#xff0c;一个节点既可以访…

分割等和子集

题目链接 分割等和子集 题目描述 注意点 数组 nums 非空数组 nums 只包含正整数 解答思路 最初想到的是根据回溯剪枝解决本题&#xff0c;如果数组大小小于2&#xff0c;则肯定不能找到分割等和子集&#xff0c;除此以外&#xff0c;如果数组之和sum不能被2整除&#xff0…

VMvare虚拟机安装国产麒麟V10桌面操作系统

一、系统下载 进入银河麒麟官网&#xff1a;https://www.kylinos.cn/ 选择桌面操作系统&#xff0c;然后进入操作系统版本选择页面&#xff0c;选择银河麒麟桌面操作系统V10 选择后&#xff0c;进入系统介绍页面&#xff0c;然后点击申请试用 点击后进入申请页面&#xf…

Apache Solr9.3 快速上手

Apache Solr 简介 Solr是Apache的顶级开源项目&#xff0c;使用java开发 &#xff0c;基于Lucene的全文检索服务器。 Solr比Lucene提供了更多的查询语句&#xff0c;而且它可扩展、可配置&#xff0c;同时它对Lucene的性能进行了优化。 安装 下载 : 下载地址解压 : tar -zxv…

uniapp apple 苹果登录 离线本地打包

官方文档 uni-app官网 文档写的不全&#xff0c;没有写离线打包流程 加lib 签名里带 sign in with apple hbuilder开关 代码 测试代码&#xff0c;获取app里所有的provider uni.getProvider({service: oauth,success: function (res) {console.log(res.provider)uni.showT…

ctfshow-web4(文件包含日志注入)

像web3那样使用php伪协议&#xff0c;回显error 看了看提示&#xff1a;日志注入 文件包含 使用Wappalyzer查看一下&#xff0c;使用的中间件是Ngnix 日志包含漏洞的成因还是服务器没有进行严格的过滤 &#xff0c;导致用户可以进行任意文件读取&#xff0c; 但是前提是服务器…

月报总结|Moonbeam 9月份大事一览

相信社区的小伙伴都过了一个圆满的中秋节&#xff0c;月圆人团圆&#xff0c;以月光代表生态的Moonbeam网络也如月亮一般&#xff0c;从始至终都在波卡。 9月&#xff0c;USDC上线波卡增加流动性、Moonbeam治理界面简化促进社区参与、Grant发放引爆Moonbeam Ignite再次回归、M…

QT基础入门——Qt事件(五)

前言&#xff1a; 事件&#xff08;event&#xff09;是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘&#xff0c;或者是窗口需要重新绘制的时候&#xff0c;都会发出一个相应的事件。一些事件在对用户操作做出响应时发出&#xff0c;如键盘事件等&#x…

(一)Apache log4net™ 手册 - 介绍

0、相关概念 Log4j 几乎每个大型应用程序都包含自己的日志记录或跟踪 API。根据这一规则&#xff0c;E.U. SEMPER &#x1f339;项目决定编写自己的跟踪 API。那是在 1996 年初。经过无数次的增强、几个化身和大量的工作&#xff0c;API 已经发展成为 log4j —— 一个流行的 Ja…

开源音乐播放器!

导读音乐是生活的一部分。维基百科关于音乐发展历史的文章有这样一段不错的描述说&#xff1a;“全世界所有的人们&#xff0c;包括哪怕是最孤立、与世隔绝的部落&#xff0c;都会有自己的特色音乐……”好吧&#xff0c;我们开源人就构成了一个部落。我建议我们的“音乐形式”…

halcon 算子shape_trans

shape_trans 函数原型&#xff1a;shape_trans(Region : RegionTrans : Type : ) 函数作用&#xff1a;变换区域的形状 参数列表&#xff1a; Region&#xff08;in&#xff09;&#xff1a;被变换的区域 RegionTrans&#xff08;out&#xff09;&#xff1a;变换后的区域…