深度学习奠基作 AlexNet 论文阅读笔记(2025.2.25)

文章目录

    • 训练数据集
    • 数据预处理
    • 神经网络模型
    • 模型训练
    • 正则化技术
    • 模型性能
    • 其他补充

训练数据集

  • 模型主要使用2010年和2012年的 ImageNet 大规模视觉识别挑战赛(ILSVRC)提供的 ImageNet 的子集进行训练,这些子集包含120万张图像。
  • 最终,模型还使用2009年秋天版本的完整 ImageNet 数据集进行了训练,该数据集包含8900万张图像,分属于10184个类别。数据集中一半的图像用于训练,另一半用于测试。

数据预处理

  • 图像裁剪:因为模型需要固定大小的图像输入,因此首先将数据集中的图像的短边缩放到 256 个像素,再从得到的图像中裁剪出中间的 256 × 256 的图像块。
  • 像素处理:从每张图像的像素中减去了所有图像中该像素的平均值。这样的处理即对像素数据进行了归一化,可以加速模型的训练并使得训练更加稳定。
  • 数据增强
    • CPU运行的数据增强AlexNet 使用了两种计算量都很低的数据增强方式,所以增强后的图像无需存储在计算机的硬盘中备用。数据增强过程使用 Python 进行编程,在CPU上运行。由于数据增强无需使用正在训练模型的GPU,因此作者们认为数据增强是“计算免费”的,即不会影响模型的训练过程。
    • 两种数据增强方式
      • 图像平移和水平翻转:从 256 × 256 的图像中提取正中央和四个角的 224 × 224 的图片块及其水平翻转得到的图片块(共十张),并最终平均网络的 Softmax 对十张新图片的分类结果得到最终的分类结果。作者们发现如果不这样做,模型就会产生严重的过拟合。
      • 改变图像中RGB通道的强度:对整个 ImageNet 训练集中的RGB像素值执行主成分分析(PCA),作者们发现这种方式可以降低模型的分类错误率。

备注:由于GPU技术的发展比CPU快多了,因此如果从现在的角度看,在CPU上做数据增强反而会成为模型效率的瓶颈。

神经网络模型

  • 模型主要特点:非常大且非常深,是截至当时最大的卷积神经网络。
  • 模型参数量6000万 参数和 65万 神经元。
  • 模型基本结构
    • 神经网络层构成:包含五个卷积层(一些卷积层带有最大池化层)、三个全连接层和一个最终的 1000-way 的 Softmax 层。
    • 卷积核情况:第一个卷积层的卷积核大小是 11 × 11 × 3,个数为96个,步长为5;第二个卷积层的卷积核大小为 5 × 5 × 48,个数为256个;第三个卷积层的卷积核大小为 3 × 3 × 256,个数为 384 个;第四卷积层有 384 个大小为 3 × 3 × 192 的核;第五个卷积层有 256个 3 × 3 × 192 的核。
    • 全连接层情况:每个全连接层都有4096个神经元。
  • 层叠池化方法:作者们发现层叠池化可以略微降低模型分类的错误率,但是也会使得模型会变得略微难以收敛。

备注

  • AlexNet 中包含的两个隐藏的全连接层是其性能的一大瓶颈,也是其设计的缺陷。现在的CNN不会使用那么大的全连接层,因此Dropout的使用减少了,反而是循环神经网络系列的模型使用 Dropout 更多。
  • 层叠池化方法在后续的卷积神经网络中已经基本上没有继续使用了。

模型训练

  • 激活函数:使用 ReLU 作为激活函数,文中称为一种非饱和神经元,用于加速训练过程。作者们认为相较于当时主流的激活函数 tanhReLU 激活函数可以大大加快模型的训练过程。在模型中,每一个卷积层和全连接层的输出都使用了 ReLU 激活函数进行处理。
  • 训练设备:使用GPU进行高效的卷积操作。具体而言,使用的是两个型号为 GTX 580 的GPU,两个GPU的显存都是 3GB
  • 分布式训练
    • 基本模式:受限于GPU的显存,作者们将模型分布在两个GPU上进行训练。作者们将模型的卷积核对半分到两个GPU上,且两个GPU只在模型中的某些层进行交互。作者们发现使用双GPU的网络训练时间比使用单GPU的网络更快一些。
    • 两个GPU训练结果的区别:作者们最后发现第一个GPU对颜色敏感,而第二个GPU对颜色不敏感,并且每一次训练模型都是这样,他们不清楚是什么原因。
  • 优化器
    • 优化器类型:使用随机梯度下降优化器(SGD)进行模型训练。
    • 优化器超参数设置:批次大小设置为 128,动量设置为 0.9,权重衰减设置为 0.0005。作者们发现少量的权重衰减非常重要,因为减少了模型的训练误差。所有的层采用相同的学习率,初始化为 0.01,当验证错误率随着学习率的提高而升高时,将学习率除以 10。现在设置模型的学习率时,往往从小到大,然后慢慢减小。
  • 模型初始化
    • 权重初始化:以标准差为 0.01 的零均值高斯分布来初始化模型每一层的权重。
    • 偏置初始化:用常数 1 来初始化第二、第四和第五卷积层以及全连接隐藏层中的神经元偏置,剩余层的偏置初始化为 0。作者们认为这样的偏置设置可以为 ReLU 提供积极的输入来加速早期的学习。
  • 迭代次数和训练时间:迭代了 90 次,总共花费了五到六天的时间进行模型训练。

备注

  • 现在看起来,使用 ReLU 作为激活函数并没有比其他的激活函数对模型训练有多强的加速效果,只是单纯因为它足够简单。
  • 在目前看来,将 AlexNet 拆分到两个GPU上进行训练,这个非常工程化的细节并不是特别重要。并且,实际上 在代码编写得好的情况下,使用一个 GTX 580 GPU也是可以训练模型的。
  • 当年SGD并不是主流的模型训练器,因为其调参过程相对而言比较困难。但是现在SGD已经是最主流的模型学习器。
  • 权重衰减实际上就是L2正则项,其不是加在模型上,而是优化算法上。
  • 现在设置模型优化器的学习率时,往往从小到大,然后慢慢再减小,类似于一个余弦曲线。

正则化技术

  • Dropout
    • 功能和原理:用于缓解全连接层的过拟合现象。对每一个隐藏神经元,有 0.5 的概率将其输出设置为 0,使得它们不参与前向传播和反向传播过程。在测试阶段,将所有神经元的输出都乘 0.5。作者们发现如果不使用 Dropout,模型就会存在严重的过拟合现象,但是 Dropout 也会使得模型需要的迭代次数翻倍。
    • 文中的观点:作者们认为,在处理模型的输入时,增加了 Dropout 之后相当于每一次都是不同的神经网络,这样迫使模型学习更加稳健的特征。
  • 局部响应归一化:一种正则化方法,作者们发现使用了该归一化方法也可以降低模型分类的错误率。局部响应归一化层在第一和第二卷积层之后。

备注

  • 目前的观点认为 Dropout 不是模型融合,而是在线性模型上等价于一个L2正则项。它产生一个正则的效果,但是无法构造出一个和它相同的正则方式。
  • 局部响应归一化也不是很重要,后面基本上没有人继续使用。

模型性能

  • 2010年 ImageNet 大规模图像识别挑战赛:top-1 和 top-5 的错误率分别为 37.5%17.0%,显著优于之前最先进的模型。
  • 2012年 ImageNet 大规模图像识别挑战赛:top-5 的错误率为 15.3%,远高于第二名的 26.2% 的水平。
  • 特征向量使用:如果两张图像通过模型后获得的特征向量之间的欧氏距离很小,则可以认为这两张图像是相似的。
  • 未来展望:作者们指出该模型的性能在出现了更快的GPU和更大的数据集时还可以继续提升。

其他补充

  • 训练模型的启示
    • 为了提升机器学习算法的性能,我们可以收集更大的数据集、训练更强大的模型和使用更好的技术来防止过拟合。
  • 数据集相关
    • 在 AlexNet 提出的时代,大部分有标注的图像数据集相对而言都比较小,只有数万张图片,例如 NORBCaltech-101/256CIFAR-10/100 等。
    • LabelMe 是一个包含有数十万张全分割的图像的数据集。
    • ImageNet 包含有1500万张有标注的高分辨率的图像,这些图像分属于超过2200个类别。
  • 模型相关
    • 卷积神经网络具有先验知识来弥补图像数据集不够大的问题,因为它们对图像的本质特征有假设。相较于相似规模的标准前馈神经网络,卷积神经网络的参数量和连接数都少得多,因此更加容易训练,它们的理论最优性能仅仅略低于前馈神经网络。
    • 作者们发现模型的深度(即神经网络中的层数)非常重要,移除任意一个卷积层都会导致模型性能的下降,尽管卷积层的参数数量非常少。现在看来,这个观点不太对,因为虽然神经网络的深度非常重要,但是移除一个神经网络层不一定会导致性能下降,通过优化超参数可以达到相同的性能。
    • ReLU 的一个理想特性是,它不需要对输入进行归一化来防止饱和。只需要一些训练样本向 ReLU 产生了正输入,那么学习就可以发生。
    • 卷积神经网络中的池化层用于汇总同一特征图中相邻神经元组的输出。
    • 最简单和最常用的降低过拟合的方式是使用保留标注的数据增强来人为地扩大数据集。
    • 结合多个不同模型的预测结果是一种降低测试错误率的好用的方法,但是往往代价高昂。
    • 无监督预训练可以帮助神经网络获取较为优秀的早期权重,本文中作者也提到,虽然他们出于简化没有这么做,但是他们认为这么做是有帮助的。
    • 神经网络的深度很重要,但是宽度也很重要,不能特别宽特别浅,也不能特别深但是特别窄。
    • 过拟合是深度学习的一个派别,现在研究者们又认为正则不是那么重要,最重要的是模型本身的结构。
  • 硬件相关
    • 2007年 NVIDIA 推出了 CUDA 库,使得用GPU训练模型变得普遍。当时的研究人员研究人员主要是使用 Matlab 进行编程。
    • GPU对2D卷积进行了高度优化,能够很好地促进大型卷积神经网络的训练过程。
    • 现代的GPU设计非常适合跨GPU并行,因为它们可以直接读写其他GPU的显存,而不需要以计算机的内存作为中介。
  • 论文阅读相关
    • 阅读机器学习和深度学习领域的论文,对于工程上的细节,如果不是需要复现,则可以暂时忽略掉。
    • 论文的实验部分,如果不是领域专家或者需要复现论文,一般不用太了解,这样可以节约时间。

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

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

相关文章

Deepseek 实战全攻略,领航科技应用的深度探索之旅

想玩转 Deepseek?这攻略别错过!先带你了解它的基本原理,教你搭建运行环境。接着给出自然语言处理、智能客服等应用场景的实操方法与代码。还分享模型微调、优化技巧,结合案例加深理解,让你全面掌握,探索科技…

蓝桥杯备赛-精卫填海-DP

精卫终于快把东海填平了!只剩下了最后的一小片区域了。同时,西山上的木石也已经不多了。精卫能把东海填平吗? 事实上,东海未填平的区域还需要至少体积为 v 的木石才可以填平,而西山上的木石还剩下 n 块,每块…

2025面试Go真题第一场

前几天参加了一场面试,GoLang 后端工程师,他们直接给了我 10 道题,我留了一个截图。 在看答案之前,你可以先简单做一下,下面我会对每个题目做一个说明。 文章目录 1、golang map 是否并发安全?2、协程泄漏的原因可能是…

JavaScript 简单类型与复杂类型-堆和栈

深入理解JavaScript中的简单类型(基本数据类型)与复杂类型(引用数据类型)如何在内存中存储对于编写高效、无误的代码至关重要。本文将探讨这两种类型的差异,以及它们在内存中的存储机制——栈(Stack&#x…

腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票

腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票 作者:某七年数据开发工程师 | 2025年02月23日 关键词:SQL窗口函数、连续问题、股票分析、腾讯面试题 一、问题背景与难点拆解 在股票量化分析场景中,"连续N天满足条件"是高频面试题类型。本题要求在单表stoc…

图像处理、数据挖掘、数据呈现

目录 图像处理方法 阈值分割 图像处理方法 图像平滑 图像锐化 图像增强 阈值分割 边缘检测 阈值分割 特征提取 提取边界 区域提取 主成分压缩 POI 多源数据 数据挖掘 多源数据提取 关联度提取 位置集群, 新闻事件, 权限 个人喜好 历史…

嵌入式项目:STM32刷卡指纹智能门禁系统

本文详细介绍基于STM32的刷卡指纹智能门禁系统。 获取资料/指导答疑/技术交流/选题/帮助,请点链接: https://gitee.com/zengzhaorong/share_contact/blob/master/stm32.txt 1 系统功能 1.1 功能概述 本系统由STM32硬件端(下位机)…

计算机毕业设计 ——jspssm504springboot 职称评审管理系统

作者:程序媛9688 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等。 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题)&#xf…

安装VM和Centos

安装VM 一、打开虚拟机 二、选择典型 三、选择光盘 四、指定虚拟机位置 五、设置磁盘大小并拆分为多个文件 六、完成 安装Centos 一、上述过程完成后我们直接打开虚拟机 二、语言选择中文 三,默认安装位置并点击完成 四、点击开始安装 五、点击设置密码 等待安装…

【AI应用】数字人涉及的一些主要 AI 技术

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 在 数字人搭建 过程中,涉及多个 AI 技术,包括 训练微调、算法、图像合成、声音克隆,每个部分都决定了最终效果的真实度、交互流畅度和个性化能力。…

【尝试使用python调用Seismic unix】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、代码总结 前言 提示:这里可以添加本文要记录的大概内容: 使用seismic unix尝试建立界面,首先想到使用pyqt&#xff0c…

【安装及调试旧版Chrome + 多版本环境测试全攻略】

👨💻 安装及调试旧版Chrome 多版本环境测试全攻略 🌐 (新手友好版 | 覆盖安装/运行/调试全流程) 🕰️ 【背景篇】为什么我们需要旧版浏览器测试? 🌍 🌐 浏览器世界的“…

2. EXCEL中函数和公式《AI赋能Excel》

欢迎来到滔滔讲AI。今天我们来学习和讨论下函数和公式是什么,以及它们之间的区别。 点击图片查看视频 2、AI赋能EXCEL-函数和公式 一、什么是函数 首先,我们来了解一下函数。函数是Excel中预定义的计算工具,能够帮助我们快速进行各种计算。 …

Python常见面试题的详解16

1. 如何强行关闭客户端和服务器之间的连接? 在网络编程中,有时需要强行中断客户端和服务器之间的连接。对于基于 TCP 协议的连接,由于其面向连接的特性,需要采取特定的步骤来确保连接被正确关闭;而 UDP 是无连接协议&a…

【深度学习】矩阵的核心问题解析

一、基础问题 1. 如何实现两个矩阵的乘法? 问题描述:给定两个矩阵 A A A和 B B B,编写代码实现矩阵乘法。 解法: 使用三重循环实现标准矩阵乘法。 或者使用 NumPy 的 dot 方法进行高效计算。 def matrix_multiply(A, B):m, n …

在CentOS 7下部署NFS的详细教程

在CentOS 7下部署NFS的详细教程 NFS(Network File System)是一种分布式文件系统协议,允许用户在网络中的不同主机之间共享文件和目录。NFS广泛应用于Linux和Unix系统中,特别适合在集群环境中共享存储资源。本文将详细介绍如何在C…

js中的await与async的使用

以下两个方法,区别只在有没有catch,使用的时候却要注意 // 封装请求方法,同步loading状态出去 export const fetchWithLoading async (fn: Function, params: any, loading: Ref) > {loading.value true;try {return await fn(params);…

Ubuntu服务器 /data 盘需要手动挂载的解决方案

服务器 /data 盘需要手动挂载的解决方案 如果重启服务器后,发现 /data 盘 没有自动挂载,通常是因为: /etc/fstab 配置文件 没有正确设置 自动挂载。该磁盘 没有被正确识别,需要手动挂载。文件系统错误 导致挂载失败。 下面是解…

输入搜索、分组展示选项、下拉选取,全局跳转页,el-select 实现 —— 后端数据处理代码,抛砖引玉展思路

详细前端代码写于上一篇:输入搜索、分组展示选项、下拉选取,el-select 实现:即输入关键字检索,返回分组选项,选取跳转到相应内容页 —— VUE项目-全局模糊检索 【效果图】:分组展示选项 >【去界面操作体…

【SpringBoot】_统一功能处理:统一数据返回格式

目录 1. 对所有返回类型方法进行统一数据返回类型处理 2. 部分返回类型方法存在的问题 3. 对两种有误的方法进行处理 仍以图书管理系统为例。 创建Result对后端返回给前端的数据进行封装,增加业务状态码与错误信息,将原本的数据作为data部分&#xff…