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

《人工智能概论》实验6 知识点复习提纲

《人工智能概论》实验6 复习提纲(新手超详细版)

一、本实验要学什么?

  • 残差块(Residual Block):如何让网络更深而不退化。

  • 批量归一化(BN):加速训练、稳定梯度。

  • 1×1卷积:改变通道数和空间尺寸。

  • 全局平均池化(GAP):替代全连接层,减少参数量。

  • ResNet-18结构:用残差块搭建18层网络。

  • 对比实验:有无残差连接的区别。

二、核心概念详解

2.1 残差块(最重要的概念)

问题:普通网络堆叠很多层后,训练误差反而变大(退化问题)。
解决:让网络学习“残差”F(x) = H(x) - x,而不是直接学习H(x)
公式:输出 =F(x) + x,其中x是输入(恒等映射)。

残差块的结构(以两个3×3卷积为例):

输入 x (形状: C_in, H, W) | +---> 主路径: | Conv2d(C_in, C_out, 3, stride=s, padding=1) | BatchNorm2d | ReLU | Conv2d(C_out, C_out, 3, stride=1, padding=1) | BatchNorm2d | +---> 捷径(shortcut): | 如果 C_in != C_out 或 s != 1:使用 1×1卷积 + stride=s 调整 | 否则:直接传递 x | +---> 相加:Y = 主路径输出 + 捷径输出 | ReLU 输出

关键点

  • 只有当主路径输出与捷径输出的形状完全相同时,才能相加。

  • 形状包括:通道数、高、宽。

  • 当需要改变通道数或下采样时,捷径使用1×1卷积且步幅与主路径相同。

2.2 批量归一化(BN)

为什么要BN?
训练时每层输入的分布变化(内部协变量偏移),导致训练慢、梯度不稳定。

BN怎么做?
对每个小批量(batch)的每个通道,计算均值和方差,然后归一化:

最后乘以可学习的gamma(缩放)加beta(偏移):

放在哪里?
卷积/全连接层之后,激活函数(如ReLU)之前。

训练与测试的区别

  • 训练:用当前batch的均值和方差。

  • 测试:用训练过程中记录的滑动平均均值和方差(因为测试时可能只有一个样本)。

2.3 1×1 卷积

作用

  • 改变通道数:例如从64通道变成128通道。

  • 改变空间尺寸:设stride=2可使高宽减半(类似于降采样)。

  • 增加非线性:1×1卷积后接BN和ReLU,增加网络深度。

2.4 全局平均池化(GAP)

操作AdaptiveAvgPool2d(1)将每个特征图(通道)的所有像素值取平均,得到一个1×1的值。
输出形状(batch, channels, 1, 1)→ 然后用reshape变成(batch, channels)

优势

  • 极大减少参数量(因为不再需要将大特征图展平后接全连接层)。

  • 防止过拟合(参数少)。

  • 空间不变性(平移不影响输出)。

2.5 ResNet-18 结构(以CIFAR-10 32×32输入为例)

操作输入→输出通道输出尺寸(高×宽)
b1Conv7×7, stride=2, pad=3 → BN → ReLU → MaxPool3×3, stride=2, pad=13→648×8
b22个残差块(64→64, stride=1)64→648×8
b3第一个块:64→128, stride=2;第二个块:128→128, stride=164→1284×4
b4第一个块:128→256, stride=2;第二个块:256→256, stride=1128→2562×2
b5第一个块:256→512, stride=2;第二个块:512→512, stride=1256→5121×1
GAP全局平均池化512→5121×1
FC全连接512→1010

三、为什么残差网络能训练很深?

从梯度传播角度
反向传播时,损失对浅层参数的梯度 = 主路径梯度 + 恒等映射梯度(直接传递)。恒等映射保证了梯度至少可以直接流回浅层,不会因为多层卷积的相乘而消失。所以可以训练上百层。


《人工智能概论》实验6 考试题(新手超详细版)

一、单选题(每题3分,共15分)

  1. 残差块中的跳跃连接主要作用是( )
    A. 增加模型参数量
    B. 提供恒等映射,缓解梯度消失
    C. 替换激活函数
    D. 降低计算复杂度

  2. 关于批量归一化(BN),下列说法正确的是( )
    A. BN在训练和测试时行为完全相同
    B. BN的γ和β是不可学习的固定参数
    C. BN通常放在激活函数之后
    D. BN可以加速训练并允许使用更大的学习率

  3. 下列哪个操作可以实现同时改变通道数空间尺寸减半?( )
    A. 3×3卷积,stride=1,padding=1
    B. 1×1卷积,stride=1
    C. 3×3卷积,stride=2,padding=1
    D. 最大池化,kernel=2,stride=2

  4. 在ResNet-18中,全局平均池化层(GAP)的输出形状是( )
    A. (batch, 512, 1, 1)
    B. (batch, 512)
    C. (batch, 512, 7, 7)
    D. (batch, 10)

  5. 以下关于1×1卷积的描述,错误的是( )
    A. 可以改变特征图的通道数
    B. 1×1卷积不能改变特征图的空间尺寸
    C. 可以增加非线性(配合激活函数)
    D. 它的感受野是1×1


二、填空题(每空2分,共20分)

  1. 实验准备中,device = torch.device(______ if torch.cuda.is_available() else ______),第一个空应该填 ______,第二个空填 ______。

  2. 残差块中,当需要调整输入形状时,捷径(shortcut)使用的是______ × ______卷积,其作用是调整输入的 ______(填“通道数”或“空间尺寸”或“两者”)。

  3. 残差块中,两个3×3卷积的kernel_size应设为 ______。

  4. 当需要降采样且改变通道数时,残差块的use_1x1conv应设为 ______,strides应设为 ______。

  5. 批量归一化中的可学习参数是 ______ 和 ______。

  6. 全局平均池化使用nn.AdaptiveAvgPool2d(______)实现输出形状为(batch, channels, 1, 1)


三、判断题(正确打“√”,错误打“×”,每题2分,共10分)

  1. ( )残差网络可以训练到上百层而不会出现梯度消失,完全归功于批量归一化。

  2. ( )1×1卷积不能改变特征图的高和宽,只能改变通道数。

  3. ( )在训练阶段,BN使用的是当前batch的均值和方差;在测试阶段,使用的是训练阶段记录的滑动平均均值和方差。

  4. ( )全局平均池化会增加模型参数量,因为它引入了额外的全连接层。

  5. ( )残差块的输出是Y = F(X) + X,其中F(X)必须和X形状相同,否则不能相加。


四、简答题(共30分)

简答题1(4分)为什么要对图像数据进行Normalize操作?CIFAR-10的均值和标准差是如何确定的?

简答题2(4分)在残差块中,当use_1x1conv=True时,conv3stride应该设为什么?为什么?

简答题3(4分)批量归一化(BN)在残差块中放在什么位置?它的主要作用是什么?

简答题4(4分)BN中的gammabeta代表什么?初始值通常设为多少?

简答题5(4分)什么是全局平均池化(GAP)?它与Flatten后接全连接层相比有什么优势?

简答题6(4分)残差网络为什么能训练到上百层而普通网络不行?从梯度传播角度解释。

简答题7(6分)对比 ResNet18 和 PlainNet18(无残差连接)的训练过程,残差连接带来了哪些优势?从收敛速度和最终准确率两方面回答。


五、计算题(15分)

5.1 残差块输出维度计算(6分)

假设输入特征图形状为(batch, 64, 32, 32),经过以下残差块:
Residual(64, 128, use_1x1conv=True, strides=2)
请写出输出形状,并详细说明计算过程(包括主路径和捷径的尺寸变化)。

5.2 ResNet-18 输出尺寸推导(9分)

输入为3×32×32的CIFAR-10图像,计算经过以下各层后的输出形状,填写下表:

操作输出形状(batch, 通道, 高, 宽)
b1Conv2d(3→64, 7×7, stride=2, padding=3) + BN + ReLU + MaxPool2d(3×3, stride=2, padding=1)______
b22个残差块(64→64, stride=1)______
b32个残差块(64→128, 第一个stride=2)______
b42个残差块(128→256, 第一个stride=2)______
b52个残差块(256→512, 第一个stride=2)______
GAP全局平均池化______
FC全连接层(512→10)______

六、代码填空题(每空2分,共10分)

代码填空1(设备与数据加载)

import torch import torchvision import torchvision.transforms as transforms from torch.utils.data import DataLoader # 设置设备:如果有GPU就用cuda,否则用cpu device = torch.device(______ if torch.cuda.is_available() else ______) print("使用设备:", device) # 图像预处理:转换为张量 + 归一化 transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)) ]) # 加载CIFAR-10训练集(需要下载) trainset = torchvision.datasets.CIFAR10(root='./data', train=______, download=True, transform=transform) # 加载CIFAR-10测试集 testset = torchvision.datasets.CIFAR10(root='./data', train=______, download=True, transform=transform) # 创建数据加载器 trainloader = DataLoader(trainset, batch_size=128, shuffle=______) # 训练集需要打乱顺序 testloader = DataLoader(testset, batch_size=128, shuffle=______) # 测试集不需要打乱

代码填空2(残差块中的残差连接)

import torch.nn as nn import torch.nn.functional as F class Residual(nn.Module): def __init__(self, input_channels, num_channels, use_1x1conv=False, strides=1): super().__init__() # 第一个卷积层:3x3卷积,填充1保持尺寸(如果步幅为1),步幅由参数决定 self.conv1 = nn.Conv2d(input_channels, num_channels, kernel_size=3, padding=1, stride=strides) # 第二个卷积层:3x3卷积,步幅固定为1 self.conv2 = nn.Conv2d(num_channels, num_channels, kernel_size=3, padding=1) # 批量归一化层 self.bn1 = nn.BatchNorm2d(num_channels) self.bn2 = nn.BatchNorm2d(num_channels) # 捷径:如果需要改变通道数或下采样,则使用1x1卷积 if use_1x1conv: self.conv3 = nn.Conv2d(input_channels, num_channels, kernel_size=1, stride=strides) else: self.conv3 = None def forward(self, X): # 主路径:卷积 -> BN -> ReLU -> 卷积 -> BN Y = F.relu(self.bn1(self.conv1(X))) Y = self.bn2(self.conv2(Y)) # 捷径:如果需要,则调整X的形状 if self.conv3: X = self.conv3(X) # 残差连接:将主路径输出与捷径输出相加 Y = Y ______ X # 填空:这里应该用什么运算符? # 最后经过ReLU激活 return F.relu(Y)

参考答案与超详细解析(新手必读)

一、单选题

1. B
解析:跳跃连接就是恒等映射+X。没有它时,深层网络梯度反向传播要经过很多层,每层梯度都小于1,乘积后梯度消失。有了恒等映射,梯度可以直接从输出传到输入,不会消失。

2. D
解析:A错:训练用batch统计量,测试用滑动平均;B错:γ和β可学习;C错:BN放在卷积/线性层之后、激活之前;D正确。

3. C
解析:3×3卷积,stride=2,padding=1,输出尺寸减半,且可设置out_channels改变通道数。B选项(1×1卷积,stride=1)不能改变尺寸。D选项只改变尺寸不改变通道数。A选项尺寸不变。所以选C。

4. A
解析AdaptiveAvgPool2d(1)输出形状为(batch, channels, 1, 1)。ResNet-18最后通道512,所以是(batch,512,1,1)

5. B
解析:1×1卷积设stride>1可以改变空间尺寸,所以B说法错误,是本题要选的错误选项。A、C、D正确。


二、填空题

第6题答案

  • 空1'cuda'

  • 空2'cpu'

超详细解析

  • torch.cuda.is_available()会检测当前环境是否有可用的 NVIDIA GPU。如果有,返回True,否则False

  • 如果为True,则'cuda' if True else 'cpu'结果为'cuda',表示将模型和数据放到 GPU 上运行,可以大幅加速训练。

  • 如果为False,则结果为'cpu',所有计算在 CPU 上完成。

  • 注意'cuda''cpu'都是字符串,必须加引号。


第7题答案

超详细解析

  • 第一空:1

  • 第二空:1

  • 第三空:两者(或“通道数和空间尺寸”)

  • 在残差块中,当输入输出通道数不同或需要下采样(空间尺寸减半)时,捷径(shortcut)会使用1×1 卷积来调整X的形状。

  • 1×1 卷积可以改变通道数(通过设置不同的out_channels),也可以通过设置stride>1来改变空间尺寸(高和宽减半)。

  • Residual类的__init__中,conv3 = nn.Conv2d(input_channels, num_channels, kernel_size=1, stride=strides)。当strides=2num_channelsinput_channels不同时,它同时改变了通道数和空间尺寸。

  • 因此,填空应写1×1卷积,作用是调整两者(通道数和空间尺寸)。


第8题答案

  • 答案3

超详细解析

  • 标准残差块(如 ResNet-18 中使用的)由两个3×3卷积组成。

  • 卷积核大小(kernel_size)设置为 3,表示滤波器是 3 行 3 列。

  • 使用 3×3 卷积是因为它能够捕捉局部特征,且参数量适中。

  • 如果填 5 或 7,参数量会变大,且不是经典设计。


第9题答案

  • 答案True2

超详细解析

  • 当需要降采样(使特征图高宽减半)并且改变通道数(例如从 64 通道变为 128 通道)时,主路径的第一个卷积会设置stride=2

  • 此时捷径也必须调整输入X的形状,使其与主路径输出形状一致。

  • 调整方法:使用1×1 卷积,并且步幅也设为2,这样输出尺寸也会减半。

  • use_1x1conv=True表示启用捷径上的 1×1 卷积;strides=2让该卷积也进行下采样。


第10题答案

  • 答案gammabeta

超详细解析

  • 批量归一化(BN)的公式:y = gamma * (x - mean)/sqrt(var + eps) + beta

  • gamma缩放参数(scale),初始值通常为 1,可学习。

  • beta偏移参数(shift),初始值通常为 0,可学习。

  • 这两个参数让网络可以恢复或调整归一化后的分布,增加表达能力。

  • 注意:meanvar不是可学习的,它们是统计量。


第11题答案

  • 答案1

超详细解析

  • nn.AdaptiveAvgPool2d(output_size)会将每个特征图的空间尺寸(高和宽)自适应地池化到指定的output_size

  • output_size=1时,无论输入是多大(如 7×7 或 8×8),输出都会是 1×1。

  • 因此输出形状为(batch, channels, 1, 1)

  • 后续通常使用x = x.view(x.size(0), -1)将其展平为(batch, channels),再送入全连接层。

  • 这样做极大减少了参数量,且实现了全局感受野。


三、判断题

  1. ×(残差连接才是关键,BN辅助但不是根本原因)

  2. ×(1×1卷积设stride>1可改变尺寸)

  3. ×(GAP大幅减少参数量)

  4. (形状必须相同才能相加)


四、简答题(超详细)

简答题1
为什么要Normalize?神经网络训练时,希望输入数据均值为0、方差为1,这样梯度在不同维度上尺度一致,训练更稳定、收敛更快。
均值和标准差怎么来的?预先在整个CIFAR-10训练集上,对每个颜色通道(R,G,B)分别计算所有像素值的均值和标准差,然后固定使用。

简答题2
stride应设为主路径的stride(这里是2)
原因:主路径的第一个卷积可能设置了stride=2(为了降采样),导致其输出空间尺寸减半;捷径也必须以相同的stride进行1×1卷积,才能让输出尺寸与主路径匹配,从而相加。

简答题3
位置:每个卷积层之后、ReLU激活函数之前。
主要作用:加速训练(允许更大学习率)、缓解梯度消失、减少过拟合。

简答题4

  • gamma:缩放因子,初始为1。

  • beta:偏移量,初始为0。
    它们可学习,让网络能够恢复或调整归一化后的分布。

简答题5
GAP:对每个特征图的所有像素取平均值,得到一个1×1的值。
优势

  • 参数极大减少(原来展平后可能有成千上万个输入到全连接层,现在直接是通道数)。

  • 降低过拟合风险。

  • 具有空间平移不变性。

简答题6
梯度传播角度:普通网络的梯度反向传播时,每层都要乘以该层的导数(通常<1),多层累乘后梯度消失。
残差网络中,梯度可以通过恒等映射直接传到浅层,不受卷积层导数影响,因此能保持梯度不消失,可以训练上百层。

简答题7

  • 收敛速度:ResNet更快,因为梯度直接流动,优化容易。

  • 最终准确率:ResNet更高,因为可以训练更深而不退化,而PlainNet加深后准确率反而下降。


五、计算题

5.1 残差块输出形状

已知:输入 (batch, 64, 32, 32),残差块:Residual(64, 128, use_1x1conv=True, strides=2)

主路径

  • 第一个卷积:输入64通道,输出128通道,kernel=3,stride=2,padding=1
    输出高宽 =(32 + 2*1 - 3)//2 + 1 = (32+2-3)//2+1 = 31//2+1 = 15+1=16
    输出形状 (batch, 128, 16, 16)

  • 第二个卷积:输入128,输出128,kernel=3,stride=1,padding=1
    尺寸不变,仍16×16。

捷径:1×1卷积,输入64→128,stride=2
输出高宽 =(32 + 2*0 - 1)//2 + 1 = (32-1)//2+1 = 31//2+1 = 15+1=16
形状 (batch, 128, 16, 16)

相加后形状相同:(batch, 128, 16, 16)

5.2 ResNet-18各层输出形状

计算步骤(逐层手算):

计算过程输出形状
b1Conv: (32+6-7)//2+1=16 → MaxPool: (16+2-3)//2+1=8(batch, 64, 8, 8)
b2stride=1,尺寸不变(batch, 64, 8, 8)
b3第一个块 stride=2: (8+2-3)//2+1=4(batch, 128, 4, 4)
b4第一个块 stride=2: (4+2-3)//2+1=2(batch, 256, 2, 2)
b5第一个块 stride=2: (2+2-3)//2+1=1(batch, 512, 1, 1)
GAP自适应平均池化(batch, 512, 1, 1)
FC全连接层(batch, 10)

六、代码填空题答案

代码填空1 答案解析

空1'cuda'
空2'cpu'
解析torch.device('cuda' if torch.cuda.is_available() else 'cpu')的意思是:如果检测到GPU可用,就用'cuda',否则用'cpu'。这样模型和数据会自动运行在GPU上(如果有),否则退化为CPU。

空3True
空4False
解析train=True表示加载训练集(50000张),train=False表示加载测试集(10000张)。

空5True
空6False
解析shuffle=True会在每个epoch打乱训练集顺序,避免模型记住顺序,提高泛化能力。测试集不需要打乱(shuffle=False),因为评估时顺序无关紧要,且打乱会浪费计算。


代码填空2 答案解析

空7+(加法运算符)
解析:残差网络的核心思想就是将主路径的输出与捷径(恒等映射)的输出相加。所以Y = Y + X。如果写成Y = Y - XY = Y * X,就完全改变了残差块的定义。加法是唯一正确的运算符。

为什么是加法?
残差块公式:H(x) = F(x) + x,其中F(x)是两个卷积层的输出。让网络学习残差F(x) = H(x) - x比直接学习H(x)更容易优化。所以代码中必须用加法。

http://www.gsyq.cn/news/1488014.html

相关文章:

  • 终极实战:深度解析OpCore-Simplify如何实现OpenCore EFI配置的完全自动化
  • 支持训练安全帽识别、抽烟识别、人员跌倒、明火检测等多种模型;自主训练 想训练什么模型训练什么模型; 新增自动标注功能 省去大量标注劳动力;升级yolo11 训练速度极快
  • Kronos金融预测模型深度实战:从基础应用到量化策略部署
  • 收藏!小白程序员必看:AI时代高薪IT岗位全解析与进阶指南
  • 2026 杭州西湖区卡地亚梵克雅宝首饰回收测评,7家门店走访估价全公开 - 奢侈品回收评测
  • 衢州本地黄金回收指南 专业回收各类黄金珠宝奢侈品 - 润富黄金回收
  • 福州手表回收报价大不同?2026最新行情教你卖高价 - 奢侈品回收评测
  • 用Audacity开启你的声音创作之旅:从录音小白到音频魔法师
  • 别再傻傻分不清了!用PyTorch代码实战带你搞懂上采样与反卷积(附避坑指南)
  • 2026优质风口风阀厂家推荐及行业选择参考 - 品牌排行榜
  • 南通黄金回收哪家靠谱?2026年6月金价参考,上门回收现场检测秒到账 - 润富黄金回收
  • 2026论文降AI率网站:11款工具实测谁才是真神器?
  • 2026广州包包回收|5家店实测,这家真的可以冲! - 奢侈品回收评测
  • 大模型已至,但企业生产力革命为何迟迟未到?从通用智能到行业智能的跨越之道
  • 嵌入式软件移植实战:从C/汇编混合代码到新平台的高效迁移
  • 闲置香奈儿包包出手选哪家?深圳收的顶,全品类轻奢顶奢专业估价 - 奢侈品回收测评
  • Pose-Search:3分钟学会人体姿势智能搜索的终极指南
  • 2026年 镇江公考/考公/公务员/省考/事业编/事业单位培训机构推荐榜单:本地高分口碑与实战技巧深度解析 - 企业推荐官【官方】
  • Scrcpy Mask开发指南:如何为项目贡献代码和扩展功能的完整教程
  • 碧蓝航线智能挂机助手:3步配置解放双手的终极自动化脚本
  • Windows终极优化指南:WinUtil一键解决系统臃肿和软件管理难题
  • 小米平板5变身Windows工作站:完整ARM64驱动包安装指南
  • PHP内存管理与垃圾回收机制
  • 2026海口奢侈品包包回收实测测评|本地正规回收平台添价收包包回收深度对比攻略 - 薛定谔的梨花猫
  • 山西医院商用净水设备怎么挑?2026年6月实用推荐,家用直饮净水/全屋净水方案/净水维修服务,商用净水设备直销厂家有哪些 - 品牌推荐师
  • 鸣潮自动化助手:如何让游戏自己玩自己,解放你的双手与时间
  • 2026重庆4大本地靠谱导游推荐|选对领路人,畅玩8d山城 - 资讯速览
  • 如何用VideoFusion解决短视频创作难题:一站式视频批量处理工具
  • 如何实现3倍性能突破:Chromium深度编译优化与架构重构技术解析
  • 2026年数据可视化分析软件哪家强?五款主流产品横向对比 - 科技焦点