现代神经网络QA(LeNet/AlexNet/VGG/NiN/GooleNet/ResNet)-----一篇搞懂

news/2025/2/13 23:25:03/

现代神经网络Q&A-----一篇搞懂

LeNet核心架构

经典卷积神经网络的包括:

  1. 带填充以保持分辨率的卷积层;
  2. 非线性激活函数,如ReLU;
  3. 汇聚层,如最大汇聚层。

在这里插入图片描述

  1. pooling时,使用avg还是max?

    • max:侧重该感受野的最大信息量(有没有鸟)
    • avg:侧重整个感受野的各项信息量
  2. 一层卷积为什么从1个通道变成6个通道?

    一个通道是灰度图(28 * 28 * 1) 使用6个权重不同的卷积核分别对图像卷积操作,每个卷积核得到一个feature map特征图,则变成6个通道。

  3. 卷积只能做图像吗?可以做时序任务吗?

    没问题,二维卷积变成一维即可。

  4. sigmoid换成relu可以吗?替换之后为什么模型不收敛,有什么区别?

    sigmoid原Learning rate为0.9,后改为relu可以将Learning rate改为0.1,即可收敛,人工调参。

  5. 如何可视化网络学到的东西?

    CNN Explainer (poloclub.github.io)

    clicking on topmost first conv. layer activation map

    直接在网页中动态查看即可,十分直观。

  6. LeNet卷积层通道数扩大到了16,这意味着信息被放大了吗?

    • 通常,高宽减半,通道数加倍;

    • 每个通道对应一个独立的特征检测器(如边缘、纹理等模式识别),也就是说每个特征图可以看做某些特定模式的识别,特征图变小,但是通道数增多,意味着能识别这些模式的神经元变多了,并且一个位置能编码更丰富的语义信息。

  7. mlp和cnn使用哪个?

    数据不大mlp没问题,当然都可以尝试;数据集很大则放弃mlp,很有可能overfitting

AlexNet核心架构
  • 是更大更深的LeNet,10x参数个数,260x计算复杂度
  • 新加:dropout丢弃法,reLu,最大池化层,数据增强
  • AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。

在这里插入图片描述

AlexNet VS LeNet

左LeNet,右AlexNet

在这里插入图片描述

  1. AlexNet 池化层放到不同卷积层之后,效果一样吗?

    这个需要自己尝试。

  2. Local Response Normalizaon有什么意义?

    • 模拟神经元的侧抑制机制。其主要作用是增强局部区域内的激活响应,同时抑制周围区域的激活,以提高模型的感知能力。
    • LRN会增加计算复杂度和内存消耗,而对模型性能的提升有限
    • 其实LRN和ReLU作用相差不大,后面也没用LRN
  3. dropout有什么用?

    为了正则化,通过随机删除部分神经元的活动,来缓解模型的复杂性,防止过拟合

  4. 如果网络输入size固定,实际图片输入时会resize吗?

    不会,保持图片比例,垂直水平方向会切边。

  5. 为什么要有两个相同的Dense(4096)?

    两个较大的全连接层有较好的效果。

  6. 全连接层的参数量占据大多数,有什么必要作用?

    • 全连接层需要捕获整体结构的信息,在图像分类任务中,全连接层可以帮助识别图像的整体形状或颜色模式,而不是仅仅关注局部细节

    • 全连接层可以将多个不同层次的神经元(如卷积层中的各个池化层输出)通过线性变换连接起来。

  7. 为什么AlexNet新增加了3层384输出的卷积层,有什么道理?

    没有特别的原因,试出来性能好。

VGG核心架构

img

One VGG Block重复n次,每个Block包括以下序列:

  1. 带填充以保持分辨率的卷积层;3×3; pad 1
  2. 非线性激活函数,如ReLU;
  3. 汇聚层,如最大汇聚层;2×2;stride 2
参数计算:
  • 卷积层需要较少的参数:
    c i × c 0 × k 2 ( 输入通道 × 输出通道 × k e r n e l 大小 ) c_i×c_0×k^2 (输入通道×输出通道×kernel大小) ci×c0×k2(输入通道×输出通道×kernel大小)

  • 但卷积层后的第一个全连接层的参数

    • LeNet 16x5x5x120=48k
    • AlexNet 256x5x5x4096=26M
    • VGG 512x7x7x4096=102M
VGG VS AlexNet

在这里插入图片描述

**VGG16:**13卷积层+3全连接层

  1. 训练损失一直下降测试损失从开始起就一点不降成水平状是什么原因呢?

代码有问题;或者是过拟合overfitting了,测试集和训练集差距很大。

  1. 为什么VGG(1,1,224,224)的输入高宽减半后,通道数是64?

    通道数和高宽减半无关,通道数是人工设置的kernel数量(也就是该卷积层输出通道)

NiN核心架构
  • 无全连接层 参数少
  • 交替使用NiN块和步幅为2的最大池化层逐步减小高宽和增大通道数
  • 最后使用全局平均池化层得到输出其输入通道数是类别数
NiN VS VGG

在这里插入图片描述

  1. 一个超级宽的:单隐藏层难以训练是因为显存不够大吗?

    很容易过拟合。

  2. 全局池化层的设计是否很关键?

    代替全连接层,通道数不变,将卷积输出的feature mapping高宽变成1,把输入变小了,并且没有可学习的参数;将模型复杂度降低,提升泛化性,但是收敛变慢了,需要训练时长变长,但是精度会高一些。

  3. NiN Block为什么选用2个1×1Conv?

    可以试一下。。。

  4. 分类不用做softmax吗?

    softmax写在了交叉损失熵Loss函数中,不会出现在网络代码中

  5. 两个1×1Conv对每个像素增加了非线性性,为什么?

    • 1×1Conv 输入输出的宽高不变,通道数改变
    • 理解:将某一像素点视为样本,该像素点的通道视为特征的全连接。
    • 相当于2个隐含层的mlp,存在ReLU,增加了非线性性
ResNet核心架构

是否越深越好?
在这里插入图片描述

架构:左侧正常块,右侧残差块

  • ResNet残差块高宽减半 步幅2
  • 后接多个正常块

在这里插入图片描述

  • 残差块使得很深的网络更加容易训练甚至可以训练一千层的网络
  • 残差网络对随后的深层神经网络设计产生了深远影响,无论是卷积类网络还是全连接类网络。
  1. 为什么lenet batch size大于1000收敛会有问题?会有什么样的问题?nan还是?

    • 较大的batch size可以提高内存利用率,减少每个epoch所需的迭代次数,从而加快训练速度。然而,过大的batch size可能导致内存不足,影响训练效率
    • batch size大于1000可能会出现特征图相似情况,计算类似,影响收敛精度。
  2. f(x)=x+g(x),这样就能保证至少不会变坏吗?如果g(x)不是变好也不是什么都不干,而是变坏了呢?

    g(x)是训练出来的,如果不好,权重也就不会更新,通常情况不会使模型变坏。

  3. cos学习率会比step 或者固定学习率好吗?

    足够多的时间做微调。

  4. 测试精度一定比训练精度低吗?

    • 不一定,如果训练数据大量噪声,测试数据没有,测试精度可能会比训练精度高。

    • 训练噪音使得模型鲁棒性提高,泛化能力变强


http://www.ppmy.cn/news/1571817.html

相关文章

JavaScript系列(71)--函数式编程进阶详解

JavaScript函数式编程进阶详解 🎯 今天,让我们深入探讨JavaScript函数式编程的进阶内容。函数式编程是一种强大的编程范式,它通过使用纯函数和不可变数据来构建可预测和可维护的应用程序。 函数式编程进阶概念 🌟 💡…

开源、免费项目管理工具比较:2025最新整理30款

好用的开源、免费版项目管理系统有:1.Redmine;2. Taiga;3. OpenProject; 4.ProjectLibre; 5.GanttProject; 6.Tuleap; 7.Trac;8. Phabricator; 9.Notion; 10.…

SQL最佳实践(笔记)

写在前面: 之前baeldung的Java Weekly Reviews里面推荐了一篇关于SQL优化的文章,正好最近在学习数据库相关知识,记一些学习笔记 原文地址:SQL Best Practices Every Java Engineer Must Know 1. 使用索引 使用索引…

vite创建的react18的@路径提示配置

1.配置vite.config.ts import { defineConfig } from "vite"; import react from "vitejs/plugin-react"; import path from "path"; export default defineConfig({plugins: [react()],resolve: {alias: {"": path.resolve(__dirnam…

【k8s应用管理】kubernetes Pod控制器

文章目录 Kubernetes Pod 控制器概述DeploymentStatefulSetStatefulSet 核心特性StatefulSet 组成创建 StatefulSet 的步骤配置 NFS 存储(示例)定义 PV 资源创建 StatefulSet应用配置 验证与操作查看资源状态测试 DNS 解析滚动更新扩展与缩容 与 Deploym…

Conda 包管理:高效安装、更新和删除软件包

Conda 包管理:高效安装、更新和删除软件包 1. 引言 在使用 Anaconda 进行 Python 开发时,包管理是日常操作的核心内容。Conda 提供了一整套高效的工具来管理 Python 环境中的软件包,避免了版本冲突,并确保了环境的一致性。 本篇…

C# 上位机--常量

引言 在 C# 上位机开发过程中,常量是一个基础且重要的概念。合理使用常量可以提高代码的可读性、可维护性和安全性。本文将深入探讨 C# 上位机中常量的定义、使用场景以及相关的示例程序,并通过图文结合的方式让读者更直观地理解常量的作用。 一、什么…

Apache Kafka 中的认证、鉴权原理与应用

编辑导读:本篇内容将进一步介绍 Kafka 中的认证、鉴权等概念。AutoMQ 是与 Apache Kafka 100% 完全兼容的新一代 Kafka,可以帮助用户降低 90%以上的 Kafka 成本并且进行极速地自动弹性。作为 Kafka 生态的忠实拥护者,我们也会持续致力于传播 …