当前位置: 首页 > news >正文

《李沐读论文》系列笔记【更新中】

零、如何读论文

        读三遍:

        1. 第一遍

                读完标题摘要后,直接跳到结论,这几个部分读完就大概知道文章在讲什么东西了,之后还可以看一下正文中的图表,判断一下这篇文章是否适合自己,是否要继续读;

        2. 第二遍

                按顺序通读一遍全文,了解文章中的图表、方法都在干什么,有什么特点,这期间遇到不懂的细节可以先做标记,之后如果要精读再去研究引用的相关论文。读完之后根据需要选择是否需要精读;

        3. 第三遍

                精读,读的时候思考如果是我来做我会怎么做,想象自己来实现整篇文章

一、AlexNet

        AlexNet 是深度学习的奠基之作,其精髓在于它首次成功证明了深度卷积神经网络(CNN)在大规模图像识别任务上的卓越性能,并引入或有效推广了几项关键技术和设计理念

        1. 深度网络的可行性

                AlexNet 拥有 8 层学习层(5 个卷积层 + 3 个全连接层),这在当时是“非常深”的网络。它在ImageNet上的成功证明了深度网络的可行性;它的架构展示了深度学习的过程就是一个知识的压缩过程,将原始信息的尺寸(size)逐渐压缩,但信息密度(channel)逐渐增大,将人类能看懂的一个个像素压缩成机器能看懂的向量。

AlexNet整体架构

        2. ReLu的应用

                激活函数使用ReLu而不是当时常用的tanh和sigmoid,发现训练速度要更快。虽然当时认为ReLu更快的原因现在看来都不是很对,但现在仍然流行ReLu,因为它更简单。

        3. 多GPU训练

                受限于当时 GPU 显存,模型被拆分成两部分,分别在两块 NVIDIA GTX 580 GPU 上并行训练,并在特定层进行通信。这启发了后续更大模型的分布式训练策略。

        4. 重叠池化

                使用步长 (stride=2) 小于池化窗口大小 (size=3) 的池化操作。相比于传统的非重叠池化 (stride=size),重叠池化能略微提升精度,并有助于减轻过拟合(通过引入轻微的空间平移不变性扰动)。它代表了池化操作的一种优化选择。

        5. Dropout的应用

                Dropout就是在训练期间,以一定概率(前两个全连接层设为 0.5)随机将神经元的输出置零。在当时人们会采用模型融合(结合多个模型的预测结果)来避免过拟合,但是对于本身就需要数天来训练的深度网络来说成本太昂贵了,所以作者使用了Dropout,认为其效果相当于每次输入就得到一个新模型,等价于模型融合。不过后来的研究发现Dropout更多等价于一个L2正则项。

        6. 数据增强

                采用图像平移和水平翻转(生成位置和镜像变化)、改变 RGB 通道强度使用 PCA 对 RGB 像素值进行扰动,模拟光照和颜色变化)等技术来扩充训练数据,利用有限的数据生成更多的训练样本,提高模型的泛化能力,是缓解过拟合的关键且成本低廉的方法。

二、ResNet

        ResNet的精髓在于使用了Residual Connection(残差连接)来更好地训练很深的网络避免了退化问题和梯度消失问题。所谓退化问题指网络较浅时效果好,加深后反而不好,这不合常理,因为如果更深的层次没用,将其设为恒等映射也不至于效果更差。

        1. Residual Connection

                残差连接就是将浅层的输出跳跃到深层的输出处将两者相加,使网络学习残差映射(F(x) = H(x) - x)而不是目标映射 (H(x))。若最优映射接近恒等变换(H(x) = x),则学习残差 F(x) → 0 比学习完整映射更易优化

                另外残差连接还解决了梯度消失的问题,使得训练更快。梯度消失是指由于反向传播中使用了求梯度的链式法则,如果梯度都是小于1的,连乘之后会接近0导致梯度消失。而残差连接的输出是F(x) + x,其梯度由于加法的存在不会变为0,避免了梯度消失问题。

梯度公式

        2. Bottleneck Block

                当层数比较深时输入输出的通道数会比较大,这时如果直接计算的话复杂度会比较高,ResNet采用了Bottleneck Block的设计,先使用1*1的卷积对输入进行降维计算以后再用1*1的卷积对输出进行升维还原回原来的维度,这样可以将复杂度降低到与降维之后的通道数差不多

Building Block (左) Bottleneck Block (右)

相关文章:

  • Three.js WebGL2.0深度应用:解锁图形渲染新极限
  • 【图表示例】元素-组合
  • HashMap算法高级应用实战:频率类子数组问题的5种破解模式
  • 【Java并发】线程池
  • 191. 位1的个数
  • Python爬虫(七):PySpider 一个强大的 Python 爬虫框架
  • 通俗解释:编码器与解码器
  • Cursor Pro取消500次请求限制,无限用的体验更好了吗?
  • ntkrnlmp!_SHARED_CACHE_MAP结构中的成员DirtyPages=0x6(5)的一个例子和成员BcbList链表节点的数量一致
  • Git版本控制详细资料
  • MATLAB实现Gardner位同步算法
  • Docker 镜像与容器的区别
  • ROS学习之服务通信
  • Android11 Settings详解
  • 【统计术语】
  • Dart 类型系统与 GetX 类型写法完整指南
  • yarn create vite报错:文件名、目录名或卷标语法不正确。 error Command failed.
  • 【嵌入式】鲁班猫玩法大全
  • E结构体基础.go
  • 01.线性代数是如何将复杂的数据结构转化为可计算的数学问题,这个过程是如何进行的
  • cdr 做网站/郑州seo实战培训
  • 成都做小程序定制开发多少钱/成都网站搜索排名优化公司
  • 丹东新区建设发展集团网站/网站建设技术外包
  • 网站备案地/域名注册 万网
  • 有什么做外贸的好网站/重庆seo网络推广关键词
  • h5手机网站制作/百度应用商店官网