Skip to content

Latest commit

 

History

History
1733 lines (1356 loc) · 171 KB

File metadata and controls

1733 lines (1356 loc) · 171 KB

目录

卷积神经网络及相关模型知识点目录

第一章 卷积神经网络

一、卷积层

1.1、卷积操作基本原理

1.2、卷积核设计与参数计算

1.3、不同类型卷积(普通卷积、深度可分离卷积等)

二、池化层

2.1、池化操作的作用与原理

2.2、常见池化类型(最大池化、平均池化等)

2.3、池化层的参数设置

三、全连接层

3.1、全连接层的结构与作用

3.2、全连接层的参数计算

3.3、全连接层的优缺点

第二章 CNN结构与可视化

第三章 RNN循环网络

第四章 生成对抗网络

一、多头注意力层

二、前馈神经网络层

三、层归一化与残差连接层

第一章 卷积层(CNN 核心层)

01.01_卷积操作基本原理

01.02_卷积核设计与参数计算

01.03_不同类型卷积(普通卷积、深度可分离卷积等)

第二章 池化层高频考点

02.01_池化操作的作用与原理

02.02_常见池化类型(最大池化、平均池化等)

02.03_池化层的参数设置

第三章 全连接层

03.01_全连接层的结构与作用

03.02_全连接层的参数计算

03.03_全连接层的优缺点

第四章 全连接层Transformer核心层面试问题

04.01_多头注意力层

04.02_前馈神经网络层

04.03_层归一化与残差连接层

第一章 卷积层高频考点

1.卷积有什么特点

卷积主要有三大特点

  1. 局部连接。比起全连接,局部连接会大大减少网络的参数。在二维图像中,局部像素的关联性很强,设计局部连接保证了卷积网络对图像局部特征的强响应能力。

  2. 权值共享。参数共享也能减少整体参数量,增强了网络训练的效率。一个卷积核的参数权重被整张图片共享,不会因为图像内位置的不同而改变卷积核内的参数权重。

  3. 下采样。下采样能逐渐降低图像分辨率,实现了数据的降维,并使浅层的局部特征组合成为深层的特征。下采样还能使计算资源耗费变少,加速模型训练,也能有效控制过拟合。

2.不同层次的卷积都提取什么类型的特征

  1. 浅层卷积 $\rightarrow$ 提取边缘特征

  2. 中层卷积 $\rightarrow$ 提取局部特征

  3. 深层卷积 $\rightarrow$ 提取全局特征

3.卷积核大小如何选取

最常用的是 $3\times3$ 大小的卷积核,两个 $3\times3$ 卷积核和一个 $5\times5$ 卷积核的感受野相同,但是减少了参数量和计算量,加快了模型训练。与此同时由于卷积核的增加,模型的非线性表达能力大大增强。

不过大卷积核( $7\times7, 9\times9$ )也有使用的空间,在GAN,图像超分辨率,图像融合等领域依然有较多的应用,大家可按需切入感兴趣的领域查看相关论文。

4.卷积感受野的相关概念

目标检测和目标跟踪很多模型都会用到RPN层,anchor是RPN层的基础,而感受野(receptive field,RF)是anchor的基础。

感受野的作用:

  1. 一般来说感受野越大越好,比如分类任务中最后卷积层的感受野要大于输入图像。

  2. 感受野足够大时,被忽略的信息就较少。

  3. 目标检测任务中设置anchor要对齐感受野,anchor太大或者偏离感受野会对性能产生一定的影响。

感受野计算:

增大感受野的方法:

  1. 使用空洞卷积

  2. 使用池化层

  3. 增大卷积核

5.网络每一层是否只能用一种尺寸的卷积核

常规的神经网络一般每层仅用一个尺寸的卷积核,但同一层的特征图可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一尺寸卷积核的要好,如GoogLeNet 、Inception系列的网络,均是每层使用了多个不同的卷积核结构。如下图所示,输入的特征图在同一层分别经过 $1\times 1$$3\times3$$5\times5$ 三种不同尺寸的卷积核,再将各自的特征图进行整合,得到的新特征可以看作不同感受野提取的特征组合,相比于单一尺寸卷积核会有更强的表达能力。

6.1*1卷积的作用

$1 * 1$ 卷积的作用主要有以下几点:

  1. 实现特征信息的交互与整合。

  2. 对特征图通道数进行升维和降维,降维时可以减少参数量。

  3. $1*1$ 卷积+ 激活函数 $\rightarrow$ 增加非线性,提升网络表达能力。

升维与降维

1 * 1卷积在GoogLeNet中的应用

$1 * 1$ 卷积首发于NIN(Network in Network),后续也在GoogLeNet和ResNet等网络中使用。感兴趣的朋友可追踪这些论文研读细节。

7.转置卷积的作用

转置卷积通过训练过程学习到最优的上采样方式,来代替传统的插值上采样方法,以提升图像分割,图像融合,GAN等特定任务的性能。

转置卷积并不是卷积的反向操作,从信息论的角度看,卷积运算是不可逆的。转置卷积可以将输出的特征图尺寸恢复卷积前的特征图尺寸,但不恢复原始数值。

转置卷积的计算公式:

我们设卷积核尺寸为 $K\times K$ ,输入特征图为 $i \times i$

(1)当 $stride = 1,padding = 0$ 时:

输入特征图在进行转置卷积操作时相当于进行了 $padding = K - 1$ 的填充,接着再进行正常卷积转置之后的标准卷积运算。

输出特征图的尺寸 = $i + (K - 1)$

(2)当 $stride > 1,padding = 0$ 时:

输入特征图在进行转置卷积操作时相当于进行了 $padding = K - 1$ 的填充,相邻元素间的空洞大小为 $stride - 1$ ,接着再进行正常卷积转置之后的标准卷积运算。

输出特征图的尺寸 = $stride * (i - 1) + K$

8.空洞卷积的作用

空洞卷积的作用是在不进行池化操作损失信息的情况下,增大感受野,让每个卷积输出都包含较大范围的信息。

空洞卷积有一个参数可以设置dilation rate,其在卷积核中填充dilation rate个0,因此,当设置不同dilation rate时,感受野就会不一样,也获取了多尺度信息。

(a) 图对应 $3\times3$ 的1-dilated conv,和普通的卷积操作一样。(b)图对应 $3\times3$ 的2-dilated conv,实际的卷积kernel size还是 $3\times3$ ,但是空洞为 $1$ ,也就是对于一个 $7\times7$ 的图像patch,只有$9$个红色的点和 $3\times3$ 的kernel发生卷积操作,其余的点的权重为 $0$ 。(c)图是4-dilated conv操作。

9.什么是转置卷积的棋盘效应

造成棋盘效应的原因是转置卷积的不均匀重叠(uneven overlap)。这种重叠会造成图像中某个部位的颜色比其他部位更深。

在下图展示了棋盘效应的形成过程,深色部分代表了不均匀重叠:

棋盘效应

接下来我们将卷积步长改为2,可以看到输出图像上的所有像素从输入图像中接收到同样多的信息,它们都从输入图像中接收到一个像素的信息,这样就不存在转置卷带来的重叠区域。

我们也可以直接进行插值Resize操作,然后再进行卷积操作来消除棋盘效应。这种方式在超分辨率重建场景中比较常见。例如使用双线性插值和近邻插值等方法来进行上采样。

10.什么是有效感受野

感受野的相关知识在上面的第四节中中介绍过。

我们接着再看看有效感受野(effective receptive field, ERF)的相关知识。

一般而言,feature map上有效感受野要小于实际感受野。其有效性,以中心点为基准,类似高斯分布向边缘递减。

总的来说,感受野主要描述feature map中的最大信息量,有效感受野则主要描述信息的有效性。

11.分组卷积的相关知识

分组卷积(Group Convolution)最早出现在AlexNet网络中,分组卷积被用来切分网络,使其能在多个GPU上并行运行。

分组卷积和普通卷积的区别

普通卷积进行运算的时候,如果输入feature map尺寸是 $C\times H \times W$ ,卷积核有N个,那么输出的feature map与卷积核的数量相同也是N个,每个卷积核的尺寸为 $C\times K \times K$ ,N个卷积核的总参数量为 $N \times C \times K \times K$

分组卷积的主要对输入的feature map进行分组,然后每组分别进行卷积。如果输入feature map尺寸是 $C\times H \times W$ ,输出feature map的数量为 $N$ 个,如果我们设定要分成G个group,则每组的输入feature map数量为 $\frac{C}{G}$ ,则每组的输出feature map数量为 $\frac{N}{G}$ ,每个卷积核的尺寸为 $\frac{C}{G} \times K \times K$ ,卷积核的总数仍为N个,每组的卷积核数量为 $\frac{N}{G}$ ,卷积核只与其同组的输入map进行卷积,卷积核的总参数量为 $N \times \frac{C}{G} \times K \times K$ ,易得总的参数量减少为原来的 $\frac{1}{G}$

分组卷积的作用:

  1. 分组卷积可以减少参数量。

  2. 分组卷积可以看成是稀疏操作,有时可以在较少参数量的情况下获得更好的效果(相当于正则化操作)。

  3. 当分组数量等于输入feature map通道数量,输出feature map数量也等于输入feature map数量时,分组卷积就成了Depthwise卷积,可以使参数量进一步缩减。

12.什么是可变形卷积?

论文链接:https://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Networks_ICCV_2017_paper.pdf

可变形卷积(Deformable Convolution)是一种改进传统卷积神经网络(CNN)能力的新型卷积方法,旨在解决CNN在建模几何变换方面的固有限制。传统的卷积操作在固定的几何结构上进行采样,这使得它们在面对不同对象的尺度、姿态、视角和部分变形时表现不佳。

可变形卷积的工作原理

可变形卷积通过在标准卷积的采样网格位置上添加2D偏移量,使得卷积核能够在自由形式的采样位置上进行操作。这些偏移量通过前面的特征图生成,并通过额外的卷积层进行学习,从而使得变形是基于输入特征局部和自适应的。

如下图所示:

  1. 输入特征图(Input Feature Map):传统卷积在输入特征图上以固定网格采样。
  2. 卷积核(Conv):在标准卷积中,卷积核在特征图上滑动,生成输出特征图。
  3. 偏移场(Offset Field):在可变形卷积中,偏移量由前一层特征图生成,并与卷积核一起应用于输入特征图。
  4. 输出特征图(Output Feature Map):最终生成的输出特征图具有更强的适应性,能够更好地捕捉图像中的几何变换。

image-20240524120850631

image-20240524120918705

标准卷积(a)和可变形卷积(b)中固定感受野和自适应感受野的示意图如上图所示。

13.什么是3D卷积?

3D卷积(3D Convolution)是一种用于处理三维数据的卷积运算。与我们常见的2D卷积不同,3D卷积不仅在图像的宽和高两个空间维度上滑动,还在第三个维度上滑动,通常是时间或深度维度。因此,3D卷积通常用于处理如视频、医学影像(如MRI或CT扫描)或任何具有时间、深度信息的三维数据。

3D卷积的基本原理

要理解3D卷积的原理,我们可以从2D卷积入手。假设我们有一个2D卷积核(kernel),它在图像上滑动,生成一个特征图(Feature Map)。这个过程可以类比为在图片上用滤镜移动,提取特定的特征,例如边缘、纹理等。

现在,想象一下,我们不仅在图像的宽度和高度方向滑动卷积核,还在第三个维度上滑动,这个维度可以是时间(如视频中的帧)、深度(如CT扫描中的层)、或者颜色通道的组合。

3D卷积的过程

  1. 输入数据

    • 3D卷积的输入通常是一个三维特征,例如一个视频可以表示为 (帧数, 高度, 宽度),或一个立体图像(如3D医疗图像)表示为 (深度, 高度, 宽度)
  2. 卷积核(Filter/Kernels)

    • 3D卷积核是一个三维的小块。例如,一个 $3\times3\times3$ 的卷积核在三个维度上分别有3个单元。
    • 卷积核在输入数据的三个维度上滑动,在每一个位置进行点积运算(每个元素相乘再整体相加),生成一个输出值。
  3. 输出特征图

    • 输出特征也是一个三维特征图,它记录了卷积核在输入数据上每个位置滑动时的运算结果。输出的深度由输入数据的深度和卷积核的深度决定。

类比:用模具制作巧克力

想象一下,我们在制作巧克力,模具就是我们的卷积核。我们有一个厚厚的巧克力板(3D输入数据),你要在这块板上用模具压出不同形状的巧克力(输出特征图)。

  • 2D卷积:就像在一块平面的巧克力上用模具压出形状,我们只能在平面上移动模具(左右、上下),每次我们都会得到一个平面巧克力的形状。

  • 3D卷积:现在我们不仅可以在平面上移动模具,还可以把模具往巧克力的厚度方向压进去。这样,我们每次压出的是一个立体的巧克力块。这块立体巧克力反映了我们在厚度方向(如时间、深度)上也进行了一次处理。

3D卷积的应用场景

  1. AI视频领域

    • 在AI视频领域中,3D卷积的作用非常明显,Sora、CogVideoX等主流AI视频大模型中都用到了3D卷积。视频数据通常是多个连续的帧序列,通过在时间维度上进行卷积,AI视频模型可以捕捉到动作的动态特征
  2. 医学影像

    • 在医学影像中,如MRI或CT扫描,3D卷积可以在扫描的多个切片上滑动,以捕捉人体内部结构的三维特征,这对于诊断和分析非常重要。
  3. 人体姿态估计

    • 3D卷积可以用于从多帧图像中提取人体的姿态,帮助模型理解姿态变化和动作。

3D卷积的计算公式

3D卷积的输入通常是一个四维张量,形状为 (D, H, W, C),其中:

  • D 是深度(例如视频中的帧数或医学图像中的切片数)。
  • H 是高度。
  • W 是宽度。
  • C 是通道数(例如,RGB图像的通道数为3)。

假设我们有一个输入张量 X,其形状为 (D_in, H_in, W_in, C_in),其中 C_in 是输入的通道数。我们还有一个卷积核 W,其形状为 (D_k, H_k, W_k, C_in, C_out),其中 C_out 是输出的通道数。

计算过程步骤如下:

  1. 滑动卷积核

    • 卷积核 W 在输入张量 X 上按步长(stride)滑动。在每个位置,卷积核的每个元素与对应位置的输入数据相乘,并将这些乘积相加得到一个输出值。
  2. 点积运算

    • 在每个滑动位置,对输入张量与卷积核进行点积运算。具体地,对于某个位置 (i, j, k) 的输出值,计算公式为:

      $$Y(i, j, k, m) = \sum_{d=0}^{D_k-1} \sum_{h=0}^{H_k-1} \sum_{w=0}^{W_k-1} \sum_{c=0}^{C_in-1} X(i+d, j+h, k+w, c) \cdot W(d, h, w, c, m)$$

      其中:

      • Y(i, j, k, m) 是输出张量在位置 (i, j, k) 和通道 m 上的值。
      • X(i+d, j+h, k+w, c) 是输入张量 X 在位置 (i+d, j+h, k+w) 和通道 c 上的值。
      • W(d, h, w, c, m) 是卷积核 W 在位置 (d, h, w) 和输入通道 c、输出通道 m 上的权重。
  3. 应用偏置

    • 对于每个输出通道,可以添加一个偏置 b[m],使得最终的输出为:

      $$Y(i, j, k, m) = Y(i, j, k, m) + b[m]$$

  4. 输出张量

    • 经过上述操作后,得到的输出张量 Y 的形状为 (D_out, H_out, W_out, C_out),其中 D_outH_outW_out 分别是深度、高度和宽度方向上的输出尺寸。

举例说明:

假设我们有一个输入张量 X,其形状为 (4, 4, 4, 1),即深度、高度、宽度均为4,且有一个输入通道。我们有一个卷积核 W,其形状为 (2, 2, 2, 1, 1),即大小为2x2x2的立方体卷积核,有1个输入通道和1个输出通道。步长为1,无填充(padding)。

  1. 卷积核在输入张量上滑动

    • 卷积核首先覆盖输入张量的前2x2x2部分,与这部分的输入数据进行点积运算,得到一个输出值。
    • 然后,卷积核滑动到下一个位置,重复上述过程,直到覆盖所有可能的位置。
  2. 计算每个位置的输出

    • 例如,对于第一个位置(顶点)上的输出值,计算公式为:

      $$Y(0, 0, 0, 0) = X(0, 0, 0, 0) \cdot W(0, 0, 0, 0, 0) + X(0, 0, 1, 0) \cdot W(0, 0, 1, 0, 0) + \ldots + X(1, 1, 1, 0) \cdot W(1, 1, 1, 0, 0)$$

  3. 得到最终输出

    • 经过所有位置的计算后,得到的输出张量 Y 的形状为 (3, 3, 3, 1)

3D卷积的优缺点

优点

  • 能够捕捉到输入数据的三维特征,尤其适合处理视频数据和3D图像数据。
  • 能够捕捉时间维度(或深度维度)的变化,适用于动态特征提取。

缺点

  • 计算复杂度更高,训练时间更长。
  • 需要更多的内存和计算资源。

14.分析一下卷积层的时间复杂度和空间复杂度

一、复杂度定义与计算公式

1. 时间复杂度(计算量)
时间复杂度衡量卷积层的计算资源消耗,通常用**浮点运算次数(FLOPs)**表示。
公式
$$\text{FLOPs} = 2 \times K^2 \times C_{\text{in}} \times C_{\text{out}} \times H_{\text{out}} \times W_{\text{out}}$$

其中:

  • $K$ :卷积核尺寸(假设为正方形核)
  • $C_{\text{in}}$ :输入通道数
  • $C_{\text{out}}$ :输出通道数
  • $H_{\text{out}}, W_{\text{out}}$ :输出特征图的高度和宽度
    :乘法和加法各计1次运算,因此系数为2。

2. 空间复杂度(参数量与内存占用)
空间复杂度包含两部分:

  • 参数量:模型存储的权重参数数量
    $$\text{Params} = K^2 \times C_{\text{in}} \times C_{\text{out}}$$

  • 激活内存:前向传播中特征图的存储需求
    $$\text{Memory} = C_{\text{out}} \times H_{\text{out}} \times W_{\text{out}} \times \text{bytes-per-element}$$

    (通常每个元素为4字节的float32类型)

二、通俗案例解析

案例:手机端图像分类模型
假设输入为RGB图像(3×224×224),使用一个卷积层:

  • 卷积核:3×3,输出通道64,步长1,padding=1
  • 输出尺寸:64×224×224

复杂度计算

  • 时间复杂度
    $$2 \times 3^2 \times 3 \times 64 \times 224 \times 224 = 1.73 \times 10^9 , \text{FLOPs}$$

  • 参数量

    $$3^2 \times 3 \times 64 = 1,728 , \text{参数}$$

  • 激活内存

    $$64 \times 224 \times 224 \times 4 , \text{Bytes} = 12.58 , \text{MB}$$

优化对比
若改用深度可分离卷积(Depthwise Separable Convolution):

  • 参数量降至 $3^2 \times 3 + 3 \times 64 = 27 + 192 = 219$
  • FLOPs降至 $3^2 \times 3 \times 224^2 + 3 \times 64 \times 224^2 = 0.13 \times 10^9 , \text{FLOPs}$ 计算量减少约13倍,适用于移动端部署。

15.AIGC时代一共有多少种主流卷积类型?

我们都知道,卷积是AI领域的核心模块之一,通过不同结构的卷积核提取输入数据的多层次特征。以下是Rocky总结的常见卷积类型及其在AIGC、传统深度学习、自动驾驶中的应用:

1. 标准卷积(Standard Convolution)

  • 原理:使用固定大小的滑动窗口(如3×3、5×5)逐区域计算加权和,提取局部特征。

  • 公式

    $$y(i,j) = \sum_{m}\sum_{n} x(i+m, j+n) \cdot k(m,n)$$

  • 案例:图像分类任务中,CNN通过多层标准卷积提取边缘→纹理→物体部件等特征。

  • 应用

    • AIGC:Stable Diffusion的基础卷积层生成图像细节。
    • 传统深度学习:ResNet、VGG等模型的核心操作。
    • 自动驾驶:摄像头图像中的车辆/行人检测。

2. 深度可分离卷积(Depthwise Separable Convolution)

  • 原理:拆分标准卷积为深度卷积(逐通道) + 1×1卷积(通道融合),减少计算量。
  • 计算量对比
    标准卷积: $D_K \times D_K \times M \times N$ 深度可分离: $D_K \times D_K \times M + M \times N$$D_K$ 为卷积核尺寸, $M$ 输入通道, $N$ 输出通道)
  • 案例:MobileNet通过此卷积在手机端实时运行图像分类。
  • 应用
    • AIGC:轻量化文本生成模型部署到移动端。
    • 传统深度学习:移动端/嵌入式设备模型优化。
    • 自动驾驶:车载芯片实时处理多摄像头输入。

3. 空洞卷积(Dilated Convolution)

  • 原理:在卷积核元素间插入空洞(间隔),扩大感受野且不增加参数量。
    # PyTorch示例(空洞率=2)
    nn.Conv2d(in_channels, out_channels, kernel_size=3, dilation=2)
  • 案例:DeepLab系列使用空洞卷积保持高分辨率特征图,提升语义分割精度。
  • 应用
    • AIGC:高清图像生成时捕捉长程依赖(如头发纹理)。
    • 传统深度学习:视频动作识别中建模时序跨度。
    • 自动驾驶:LiDAR点云中的大范围障碍物检测。

4. 转置卷积(Transposed Convolution / Deconvolution)

  • 原理:通过填充和步长实现上采样,重建高分辨率特征图。
  • 操作示例:输入2×2 → 转置卷积(kernel=3, stride=2)→ 输出5×5。
  • 案例:GAN生成器将低维噪声转换为高清图像。
  • 应用
    • AIGC:图像超分辨率重建、风格迁移。
    • 传统深度学习:U-Net解码器恢复医学影像细节。
    • 自动驾驶:BEV(鸟瞰图)特征解码生成道路拓扑。

5. 分组卷积(Grouped Convolution)

  • 原理:将输入通道分组,每组独立卷积后拼接结果,减少计算量。
    # ResNeXt的分组卷积(组数=32)
    nn.Conv2d(64, 128, kernel_size=3, groups=32)
  • 案例:ResNeXt通过分组卷积提升模型容量而不显著增加计算量。
  • 应用
    • AIGC:多任务生成模型(如同时生成图像和描述)。
    • 传统深度学习:大规模分类模型加速训练。
    • 自动驾驶:多传感器(摄像头+雷达)特征分组处理。

6. 可变形卷积(Deformable Convolution)

  • 原理:通过偏移量学习动态调整卷积核采样位置,适应不规则形状。
    # 可变形卷积层
    from torchvision.ops import DeformConv2d
    DeformConv2d(in_channels, out_channels, kernel_size=3)
  • 案例:DCN(可变形卷积网络)提升COCO数据集目标检测AP 3%~5%。
  • 应用
    • AIGC:生成非刚性物体(如衣服褶皱、流体)。
    • 传统深度学习:复杂场景下的实例分割。
    • 自动驾驶:处理遮挡或形变的行人/车辆检测。

7. 3D卷积(3D Convolution)

  • 原理:在三维空间(长、宽、时间/深度)滑动,提取时空特征。
    # 视频处理中的3D卷积
    nn.Conv3d(in_channels, out_channels, kernel_size=(3,3,3))
  • 案例:C3D网络分析视频中的动作时序特征。
  • 应用
    • AIGC:视频生成(如动态纹理合成)。
    • 传统深度学习:CT/MRI医学影像分析。
    • 自动驾驶:多帧LiDAR序列处理预测运动轨迹。

8. 1×1卷积(Pointwise Convolution)

  • 原理:仅融合通道信息,不改变空间尺寸,用于升维/降维。
    # Inception模块中的1×1卷积
    nn.Conv2d(256, 128, kernel_size=1)
  • 案例:SqueezeNet通过1×1卷积压缩参数,模型体积减少50倍。
  • 应用
    • AIGC:StyleGAN中的风格向量通道调制。
    • 传统深度学习:ResNet瓶颈层减少计算量。
    • 自动驾驶:多模态特征通道融合(图像+点云)。

9. 动态卷积(Dynamic Convolution)

  • 原理:根据输入动态生成卷积核权重,增强模型适应性。
    # 动态卷积示例
    weights = generate_weights(x)  # 输入相关
    output = dynamic_conv(x, weights)
  • 案例:CondConv在ImageNet分类任务中提升精度1.2%。
  • 应用
    • AIGC:个性化图像生成(根据用户输入调整风格)。
    • 传统深度学习:小样本学习动态适配新类别。
    • 自动驾驶:动态调整卷积核以适应不同天气条件。

总结

卷积类型 核心作用 AIGC应用 传统深度学习应用 自动驾驶应用
标准卷积 基础特征提取 图像生成 ResNet分类 目标检测
深度可分离卷积 轻量化计算 移动端生成模型 MobileNet 实时多摄像头处理
空洞卷积 扩大感受野 高清细节生成 DeepLab分割 大范围障碍物检测
转置卷积 上采样重建 GAN生成器 U-Net解码器 BEV地图生成
分组卷积 多分支特征学习 多任务生成模型 ResNeXt 多传感器融合
可变形卷积 适应不规则形状 非刚性物体生成 DCN检测 遮挡目标检测
3D卷积 时空建模 视频生成 C3D动作识别 LiDAR序列分析
1×1卷积 通道维度调整 风格调制 通道压缩 多模态特征融合
动态卷积 输入自适应计算 个性化生成 CondConv 环境自适应模型

16.卷积神经网络的本质是什么?

Rocky总结的核心答案:卷积神经网络的本质是——利用具有“局部连接”、“权值共享”和“空间/时序层次化特征提取”能力的卷积操作,高效地从网格化数据(如图像、视频、音频频谱图)中自动学习具有平移不变性的层次化特征表示。

详细拆解这个本质:

  1. 核心操作:卷积 (Convolution)

    • 数学上: 本质是滤波器(Kernel/Filter) 在输入数据(如图像)上滑动,进行局部区域的点积运算。滤波器是一组可学习的权重参数。
    • 直观上: 想象用一个带小窗口(滤波器)的放大镜在图片上移动。在每个位置,窗口只看到图片的一小块(局部区域),计算这个小块与窗口内部图案(滤波器权重)的匹配程度。匹配程度高,输出值就大。
    • 作用: 检测输入数据中的局部模式,如边缘、角点、纹理、基本形状等。
  2. 关键特性:

    • 局部连接 (Local Connectivity):
      • 是什么: 输出特征图上的一个像素点(神经元),只与输入数据中对应位置附近的一个小区域(感受野)内的输入值相连,而不是与整个输入相连(像全连接层那样)。
      • 为什么是本质: 这完美契合了图像等数据的特性——像素点的重要性主要取决于其邻近像素,远处的像素影响很小。极大减少了参数量和计算量,让处理高分辨率图像成为可能。
    • 权值共享 (Parameter Sharing):
      • 是什么: 同一个滤波器在整个输入数据上滑动并重复使用相同的权重参数。无论滤波器滑到图像的哪个位置,它都在检测相同的模式(比如垂直边缘)。
      • 为什么是本质:
        • 进一步显著减少参数量: 一个滤波器只有 Kernel_Width * Kernel_Height * Input_Channels 个参数,无论输入图像有多大。
        • 赋予平移不变性 (Translation Invariance): 这是CNN最强大的特性之一!无论目标物体(如猫)出现在图像的左上角还是右下角,只要用于检测“猫耳朵”或“猫胡须”的滤波器学到了这个模式,它就能在图像的任何位置将其检测出来。模型学会了关注“有什么特征”,而不是“特征具体在哪个绝对坐标位置”。
    • 层次化特征提取 (Hierarchical Feature Learning):
      • 是什么: CNN通常由多个卷积层堆叠而成。浅层卷积层学习低级、简单的特征(边缘、角点、颜色斑点)。这些低级特征被输入到下一层。深层卷积层组合低级特征,学习中级特征(纹理、基本部件如眼睛、轮子)。更深层则组合中级特征,学习高级、抽象、语义化的特征(整个物体如人脸、汽车、特定场景)。
      • 为什么是本质: 这种由简单到复杂、由局部到全局的层次化结构,模拟了人类视觉系统处理信息的方式(V1 -> V2 -> V4 -> IT区),使得CNN能够理解图像中复杂的结构和语义信息。
    • 对网格化数据的天然适配:
      • 是什么: CNN特别擅长处理具有规则网格结构的数据,如图像(2D像素网格)、视频(2D空间+1D时间网格)、语音(1D时间序列或2D频谱图)。
      • 为什么是本质: 卷积操作的滑动特性天然利用了数据点在空间或时间上的邻近性结构关系

通俗易懂的实际案例:指纹识别

想象我们要设计一个程序,通过指纹图像识别不同的人。指纹的核心是脊线(Ridge)和谷线(Valley)构成的独特纹理模式

  1. 低级特征检测(浅层卷积):

    • 使用第一个卷积层,滤波器就像一个小型“边缘探测器”。它在指纹图像上滑动。
    • 当它滑过脊线和谷线交界的地方(即脊线边缘)时,由于像素值变化剧烈(暗变亮或亮变暗),滤波器的点积运算会输出一个高响应值(表明检测到了边缘)。
    • 这个滤波器在整个图像上共享权重,所以无论脊线边缘出现在指纹的哪个位置(中心还是边缘),它都能被检测到(平移不变性)。
    • 这一层输出一个“边缘激活图”,亮的地方表示检测到了脊线边缘。
  2. 中级特征检测(中层卷积):

    • 第二层卷积接收第一层的“边缘激活图”作为输入。
    • 它的滤波器更大一些,可以覆盖第一层输出的一个小区域(即原始图像中更大的区域)。
    • 这一层的滤波器学习识别由多个边缘片段构成的基本纹理单元,比如一小段弯曲的脊线、一个短的分叉点、或者一个小环。
    • 同样,这些检测脊线分叉、小环的滤波器在整个图像上权值共享,无论这些特征出现在哪里都能被检测到。
  3. 高级特征与识别(深层卷积 + 全连接):

    • 更深层的卷积层组合中层检测到的纹理单元(分叉、环、端点),学习识别更复杂的指纹特征,如一个完整的“斗型纹”、“箕型纹”的核心区域,或者一个显著的“三角区”。
    • 最后,这些高级的、抽象的特征图会被展平,送入全连接层。
    • 全连接层学习这些高级特征的特定组合模式,每种模式对应一个特定的人(或指纹ID)。它判断检测到的斗型核心、三角区位置、脊线流向等特征组合是否与数据库中张三的指纹模式高度匹配。

在这个过程中,CNN的本质体现得淋漓尽致:

  • 卷积操作: 逐层滑动滤波器,检测局部模式。
  • 局部连接 & 权值共享: 每个特征检测器只关注一小块区域,且同一模式检测器(如边缘、分叉点检测器)在整个指纹上复用,大大降低了计算量和参数量。
  • 平移不变性: 无论指纹图像在输入时是居中还是稍微偏移,只要脊线模式相同,CNN都能正确识别张三,因为检测关键特征的滤波器在图像任何位置都有效。
  • 层次化特征: 从边缘(低级) -> 分叉/环(中级) -> 斗型/三角区(高级) -> 个体指纹模式(语义级),逐步抽象。

在三大领域中的应用:

  1. AIGC (生成式人工智能):

    • 应用场景: 图像生成(Stable Diffusion, DALL-E)、视频生成(Sora)、音乐生成(频谱图)、图像超分辨率、图像修复、风格迁移。
    • CNN本质的应用:
      • 核心骨干: 大多数生成模型(如GAN的判别器/生成器、Diffusion Model的U-Net)深度依赖CNN(或其变体如ConvNeXt)作为特征提取器。
      • 空间特征理解: 在图像/视频生成中,CNN编码器负责理解输入文本描述或噪声图像的空间结构和语义内容(低级纹理到高级物体)。解码器(通常是转置卷积)则利用学到的层次化特征在空间上“绘制”出符合语义和结构的像素,从粗糙轮廓到精细细节。
      • 平移不变性 & 局部性: 确保生成的物体可以合理地出现在画面的不同位置,并且局部细节(如毛发、砖缝)是连贯的。
      • 案例: Stable Diffusion 的 U-Net 使用CNN层处理图像潜空间表示,在去噪过程中逐步恢复图像的层次化结构(从模糊的全局结构到清晰的局部细节),同时条件机制(如文本嵌入)通过交叉注意力引导CNN特征生成符合描述的特定内容。
  2. 传统深度学习 (计算机视觉为主):

    • 应用场景: 图像分类(ResNet, ViT虽流行但CNN仍是基础)、目标检测(YOLO, Faster R-CNN)、语义分割(U-Net, DeepLab)、人脸识别、图像描述生成(CNN + RNN/LSTM)。
    • CNN本质的应用:
      • 基石模型: CNN是计算机视觉领域近十年爆发的核心驱动力。ImageNet竞赛的优胜者(AlexNet, VGG, GoogLeNet, ResNet)都是CNN架构的演进。
      • 高效特征提取: 利用局部连接、权值共享和层次化结构,CNN能从海量图像数据中高效地自动学习强大的视觉特征表示,替代了手工设计特征(如SIFT, HOG)。
      • 平移不变性: 这是CV任务的关键需求。CNN天然保证检测到的物体(如猫、车)在图像中发生平移时,仍能被正确识别。
      • 层次化理解: 从像素级边缘到物体级语义,CNN的特征图天然适合不同粒度的任务:分类(高级特征)、检测(中级特征定位+高级特征分类)、分割(需要保留空间信息的各级特征)。
      • 案例: YOLO目标检测器。其骨干网络(如DarkNet)是CNN,负责从输入图像提取层次化特征图。不同尺度的特征图用于检测不同大小的物体(浅层特征图分辨率高,利于检测小物体;深层特征图语义强,利于检测大物体)。检测头利用这些特征图上的卷积操作,直接在网格单元上预测边界框和类别。
  3. 自动驾驶:

    • 应用场景: 环境感知(摄像头/激光雷达目标检测、分割、车道线检测)、可行驶区域分割、传感器融合(图像+雷达/激光雷达)、端到端驾驶(输入图像直接输出控制指令)。
    • CNN本质的应用:
      • 感知的核心: 基于摄像头的感知系统几乎完全建立在CNN(及其3D/时序扩展)之上。处理激光雷达点云(投影为2D俯视图或多视图)也常用CNN。
      • 处理高维空间数据: 摄像头图像是2D网格,激光雷达投影图也是2D网格。CNN的局部连接和权值共享特性使其成为处理这些高分辨率、高维度传感器数据的首选架构,能在有限的车载计算资源下高效运行。
      • 平移不变性 & 空间理解: 对自动驾驶至关重要!无论车辆、行人、交通标志出现在视野中的哪个位置(左/右/远/近),CNN都能可靠地检测和识别它们。CNN强大的空间特征提取能力对于理解道路结构(车道线、路沿)、可行驶区域至关重要。
      • 层次化特征用于不同任务: 低级特征(边缘)用于车道线检测;中级特征(车轮、车窗)用于车辆检测;高级特征(整个车辆、行人轮廓)用于目标分类和跟踪。多任务学习常共享CNN骨干提取的丰富特征。
      • 时序/3D扩展: 处理视频流(时序信息)使用3D卷积或CNN+RNN,在空间卷积基础上增加时间维度,检测运动物体。处理原始点云使用3D稀疏卷积或投影后2D卷积。
      • 案例: Tesla的HydraNet。它使用一个大型共享的CNN骨干网络(如ResNet变体)同时处理多个摄像头输入。骨干网络提取丰富的空间特征。然后,多个不同的任务特定“头”(也是CNN结构)连接到骨干的不同层次特征上,并行执行各种感知任务(车辆检测、行人检测、车道线分割、交通灯识别、深度估计等)。CNN的效率和层次化特征提取能力是实现这种高效多任务感知系统的关键。

总结:

卷积神经网络的本质优势在于其利用卷积操作,通过局部连接、权值共享实现了参数效率和计算效率,并赋予了模型关键的平移不变性。其层次化堆叠的结构使其能够从数据中自动学习从低级到高级的抽象特征表示,特别适合于处理具有空间或时序局部相关性和网格结构的数据(图像、视频、语音、点云等)。

AIGC领域,CNN是理解和生成空间内容(图像、视频)的骨干,实现从文本到像素的精确空间映射和细节合成。在传统深度学习(CV) 领域,CNN是基石,彻底革新了特征提取方式,推动了图像理解任务的飞跃。在自动驾驶领域,CNN是环境感知系统的核心引擎,高效处理高维传感器数据,实现对周围世界可靠的空间理解,是行车安全的关键保障。理解CNN的本质,是驾驭现代AI,尤其在视觉相关领域,不可或缺的基础。

第二章 池化层高频考点

1.CNN中池化的作用

池化层的作用是 <font color=DeepSkyBlue>对感受野内的特征进行选择,提取区域内最具代表性的特征,能够有效地减少输出特征数量,进而减少模型参数量 </font>。按操作类型通常分为最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling),它们分别提取感受野内最大、平均与总和的特征值作为输出,最常用的是最大池化和平均池化。

2.全局池化的作用

全局池化主要包括全局平均池化和全局最大池化。

全局最大池化

全局平均池化

接下来,Rocky以全局平均池化为例,讲述其如何在深度学习网络中发挥作用。

刚才已经讲过,全局平均池化就是对最后一层卷积的特征图,每个通道求整个特征图的均值。如下图所示:

全局平均池化

一般网络的最后会再接几个全连接层,但全局池化后的feature map相当于一像素,所以最后的全连接其实就成了一个加权相加的操作。这种结构比起直接的全连接更加直观,参数量大大幅下降,并且泛化性能更好:

全局池化的作用:

1.降低信息冗余

  • 池化层有助于提取输入特征图中的主要信息,同时抑制次要信息。这种操作使得模型更专注于重要特征,减少冗余或不相关的特征,有利于模型的训练和泛化能力。

2.特征降维与下采样

  • 池化操作导致输出特征图的尺寸减小,实现了特征降维和下采样的效果。这有助于减少计算量,并提高后续层对图像特征的感知范围,使得一个池化后的像素对应前面图片中的一个区域。

3.特征压缩与网络简化

  • 池化层能够对特征图进行压缩,减少计算资源的消耗,简化网络结构,降低模型复杂度,有助于防止过拟合,提高模型的泛化能力。

4.提升模型的不变性

  • 池化操作有助于提升模型对尺度、旋转和平移的不变性。经过池化后的特征图,在输入特征图的大小或旋转角度发生变化时,输出特征图的大小和旋转角度保持不变。这种不变性有助于提高模型的泛化能力和鲁棒性。

5.实现非线性。

3.池化的分类

A. 一般池化(General Pooling):

在CNN中,池化层用于减小特征图的空间尺寸,以降低计算量并减少过拟合的可能性。最常见的池化操作有两种:

平均池化(Average Pooling):

  • 计算图像区域的平均值作为该区域池化后的值。
  • 能够抑制由于邻域内大小受限造成估计值方差增大的现象。
  • 其特点是对于背景的保留效果更好。

最大池化(Max Pooling):

  • 选取图像区域的最大值作为该区域池化后的值。
  • 能够抑制网络参数误差造成估计均值偏移的现象。
  • 其特点是更好地提取纹理信息。

随机池化(Stochastic Pooling):

  • 根据概率对局部的值进行采样,采样结果便是池化结果。

B. 重叠池化(Overlapping Pooling):

在某些情况下,相邻的池化窗口之间可以有重叠区域。这种情况下一般会设置池化窗口的大小(size)大于步幅(stride)。

重叠池化的特点是相比于常规池化操作,它可以更充分地捕获图像特征,但也可能导致计算量增加。

这些池化方法是CNN中常用的技术手段,用于在保留重要信息的同时减少数据尺寸和参数量,从而改善模型的性能和泛化能力。

4.池化的进阶使用---SPP结构介绍

论文名称:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 下载地址:https://arxiv.org/abs/1406.4729

空间金字塔池化(Spatial Pyramid Pooling,SPP)层的引入解决了在传统卷积神经网络(CNN)中需要固定输入图像尺寸的限制。传统的全连接层对于输入要求固定大小的特征向量,这意味着所有输入图像需要统一尺寸,通常需要进行裁剪或拉伸,导致图像失真。SPP层允许网络接受不同尺寸的输入图像,通过金字塔形状的池化区域对不同大小的特征图进行整合和提取特征。其作用在于将不同大小的特征图转换成固定大小的特征向量,使得在连接全连接层之前,所有输入都具有相同的大小,无需提前处理图像。这种灵活性提高了网络的适用性和泛化能力,使得模型能够更灵活地处理各种尺寸的输入。

SPP(空间金字塔池化)的显著特点有:

固定大小的输出:无论输入尺寸如何,SPP能够产生固定大小的输出,克服了全连接层要求固定长度输入的限制。

多个窗口的池化:SPP采用多个窗口的池化,使其能够在不同尺度下提取特征。

尺度不变性和特征一致性:可以处理不同纵横比和尺寸的输入图像,增强了模型的尺度不变性,降低了过拟合的风险。

其他特点包括:

多样性训练图像对网络收敛更容易:SPP允许训练使用不同尺寸的图像,相较于单一尺寸的训练图像,这种多样性训练更有利于网络的收敛。

独立于特定网络设计和结构:SPP可用作卷积神经网络的最后一层,不会影响网络结构,仅替换了原本的池化层。

适用于图像分类和目标检测:SPP不仅适用于图像分类,还可用于目标检测等任务,扩展了其应用领域。

SPP的这些特点使得它成为一个强大的工具,在处理不同尺寸、不同纵横比的图像时,保持固定长度特征向量的输出,提高了模型的灵活性和泛化能力。

5.介绍一下CLIP pooled embedding的作用

CLIP Pooled Embedding 的作用详细解析

CLIP(Contrastive Language-Image Pretraining)是强大的AI多模态模型,由 OpenAI 提出,用于将自然语言与图像相联系。CLIP 的核心是一个双塔结构,分别包含一个文本编码器和一个图像编码器,通过对比学习(contrastive learning)训练,使图像和文本在共享的嵌入空间中具有相似的表示。

其中,Pooled Embedding 是 CLIP 提供的一种高效的语义特征表示方法,主要用于提取文本或图像的全局特征,广泛用于AI多模态任务和下游应用。

什么是 Pooled Embedding?

在 CLIP 中:

  1. 图像编码器(如 ViT 或 ResNet)将图像输入转化为一组 token 的嵌入表示。
  2. 文本编码器(如 Transformer)将文本输入转化为一组 token 的嵌入表示。

这些编码器通常生成序列化的输出,表示输入的各个部分。但在很多任务中,我们需要一个全局的语义特征,这就是 Pooled Embedding 的作用。

生成 Pooled Embedding 的方法

  1. CLS Token([CLS] 标记):

    • 在 Transformer 架构中(例如 BERT 或 CLIP 的文本编码器),通常会在输入前加入一个特殊的 [CLS] 标记。
    • 编码完成后,CLS 的嵌入被视为全局语义表征。
    • CLIP 文本编码器会直接使用该 CLS Token 的嵌入作为文本的 Pooled Embedding。
  2. Global Average Pooling(全局平均池化):

    • 对于图像编码器(如 ViT 或 ResNet),CLIP 通常使用全局平均池化操作,将图像的每个 token 的嵌入取平均值,生成单一向量表示,作为图像的 Pooled Embedding。

Pooled Embedding 的作用

1. 全局语义表征

Pooled Embedding 提供了输入(文本或图像)的全局语义信息,适合于需要整体语义理解的任务。

  • 文本: 表示整段文字的语义。
  • 图像: 表示整张图片的视觉语义。

2. 对比学习中的对齐

CLIP 的训练目标是将相关的图像-文本对拉近,而将不相关的对拉远。

  • 文本和图像分别通过其编码器生成 Pooled Embedding。
  • 通过对比学习(Contrastive Loss),CLIP 在高维空间中优化,使图像和对应文本的 Pooled Embedding 尽可能接近。

3. 下游任务的输入特征

Pooled Embedding 是许多下游任务的基础特征,常用于:

  • 分类任务: 提取图像或文本的嵌入后,输入分类器。
  • 检索任务: 用于图像到文本、文本到图像的检索匹配。
  • 多模态任务: 如视觉问答(VQA)和视觉-文本生成,使用 Pooled Embedding 作为全局上下文。

4. 高效表征

Pooled Embedding 通过一个固定大小的向量(如 512 维)表示输入,能够大幅简化计算,适合后续的处理和存储。

Pooled Embedding 的计算过程

图像编码器(Image Encoder)

假设图像编码器使用的是 ViT(Vision Transformer):

  1. 输入图像被分成固定大小的 patch。
  2. 每个 patch 转换为 token,输入到 Transformer。
  3. 输出的 token 是一个序列,其中包括了 [CLS] token。
  4. CLIP 使用 全局平均池化(Global Average Pooling) 对所有 token 取平均值,得到图像的 Pooled Embedding。

文本编码器(Text Encoder)

假设文本编码器使用的是 Transformer:

  1. 输入文本被分解为 token(如单词或子词)。
  2. 特殊的 [CLS] token 被添加到输入序列的开头。
  3. Transformer 输出序列的表示,其中 [CLS] token 的嵌入被用作文本的 Pooled Embedding。

应用场景

1. 多模态检索

通过 Pooled Embedding,可以实现图像与文本的相互检索:

  • 将图像的 Pooled Embedding 与文本的 Pooled Embedding 在共享空间中匹配。
  • 相似度较高的嵌入被认为是相关的。

2. 分类任务

  • 提取图像的 Pooled Embedding,作为输入特征传递给分类器。
  • 可用于物体分类、情感分析等任务。

3. 内容生成

  • 在生成任务中(如文本生成、图像生成),Pooled Embedding 可以作为条件输入,指导生成过程。

4. 语义搜索

  • 使用文本 Pooled Embedding,快速进行语义相关内容的检索。
  • 如基于文本描述搜索图像。

优点与局限性

优点

  1. 简洁高效:Pooled Embedding 是固定大小的向量,便于存储和后续计算。
  2. 语义丰富:对输入的全局语义有良好概括。
  3. 适用广泛:适合检索、分类等多种任务。

局限性

  1. 上下文丢失:对于复杂输入,可能丢失部分局部细节。
  2. 固定长度限制:特征向量维度固定,可能不足以表达某些复杂场景的全部信息。

6.AI模型的池化层包含可学习参数吗?

AI模型的池化层(Pooling Layer)不包含可学习的参数

池化层的作用

池化层的主要功能是对输入特征图进行下采样,减小特征图的尺寸,降低计算复杂度,同时保留重要的特征信息。常见的池化操作包括:

  1. 最大池化(Max Pooling):取池化窗口中的最大值。
  2. 平均池化(Average Pooling):计算池化窗口中的平均值。

池化层不包含参数的原因

  • 池化层没有权重或偏置参数

    • 与卷积层或全连接层不同,池化层的操作只是固定规则的计算(如取最大值或平均值),不需要学习任何权重或偏置。
    • 例如:
      • 最大池化:在窗口内取最大值,不涉及任何可学习的参数。
      • 平均池化:在窗口内取平均值,同样不需要参数。
  • 仅依赖于池化窗口大小和步幅

    • 池化层的行为由超参数决定,如:
      • 池化窗口大小(如 $2 \times 2$
      • 步幅(Stride):窗口移动的步长
    • 这些超参数是固定的,不需要通过训练学习。

池化层的参数总结

层类型 是否包含参数 说明
卷积层(Conv) ✅ 是 权重(Kernel)和偏置(Bias)
全连接层(FC) ✅ 是 权重矩阵和偏置向量
最大池化层(Max Pooling) ❌ 否 固定规则:取最大值
平均池化层(Avg Pooling) ❌ 否 固定规则:取平均值
Dropout 层 ❌ 否 用于随机丢弃神经元,无参数
批归一化(BatchNorm) ✅ 是 包含可学习的缩放和平移参数

7.常见的池化类型有哪些?它们之间的主要区别是什么?

常见的池化类型有最大池化(Max Pooling)、平均池化(Average Pooling)和全局平均池化(Global Average Pooling,GAP)。 最大池化:选取池化窗口内的最大值作为输出,能够突出显著特征,在图像识别任务中应用广泛。 平均池化:计算池化窗口内所有元素的平均值作为输出,对背景信息较为敏感,能够保留更多全局信息。 全局平均池化:将整个特征图的平均值作为输出,常用于网络的最后一层,替代全连接层,减少参数数量,防止过拟合。

8.池化层为什么能防止过拟合?请从原理角度解释。

答案:池化层通过降低特征图的空间维度,减少了模型的参数数量和计算量。这使得模型的复杂度降低,减少了模型对训练数据的过度拟合倾向。同时,池化操作具有一定的平移不变性,即使输入数据在空间位置上有小幅度的变化,池化后的结果也不会有太大差异,从而增强了模型的泛化能力 ,有助于防止过拟合。

9.假设输入特征图大小为8×8,池化窗口大小为2×2,步长为2,经过最大池化后,输出特征图的大小是多少?

根据公式:输出特征图大小 = (输入特征图大小 - 池化窗口大小)/ 步长 + 1 。将数值代入公式:(8 - 2)/ 2 + 1 = 4 ,所以输出特征图大小为 4×4 。 池化层为什么能防止过拟合?请从原理角度解释。

10.全局平均池化(GAP)在网络结构设计中的优势是什么?

答案:全局平均池化的优势主要体现在: 减少参数数量:相比全连接层,GAP 将整个特征图直接平均为一个值,避免了大量参数的连接,大大减少了模型的参数量,降低了计算成本。 防止过拟合:参数数量的减少降低了模型复杂度,从而有效防止过拟合现象的发生。 增强可解释性:GAP 将每个类别对应的特征图进行全局平均,输出直接对应每个类别,使网络结构更具可解释性 。

11.池化层的步长对输出特征图有什么影响?

答案:池化层的步长决定了池化窗口在输入特征图上移动的距离。当步长增大时,池化窗口在特征图上的覆盖范围更稀疏,输出特征图的尺寸会更小,下采样的程度更大,信息压缩更为明显;当步长减小时,池化窗口的覆盖范围更密集,输出特征图的尺寸相对较大,保留的信息更多。但如果步长过小,可能无法有效降低计算量和防止过拟合。

12.如何理解池化层的平移不变性?请举例说明。

答案:池化层的平移不变性是指输入数据在空间位置上发生小幅度平移时,池化后的输出结果基本保持不变。例如,在图像识别中,对于一个包含猫的图像,即使猫在图像中的位置稍微向左或向右移动,经过最大池化后,猫的关键特征(如眼睛、耳朵等)仍然会被保留,且池化后的特征图在数值和结构上不会有显著变化。这使得模型在识别图像时,不会因为物体位置的微小变化而产生误判,增强了模型的鲁棒性。

13.如果在池化操作中,池化窗口大小大于步长,会出现什么情况?

答案:如果池化窗口大小大于步长,会导致池化窗口在输入特征图上有重叠部分。这意味着部分区域会被多次计算和池化,输出特征图会保留更多的信息,相对地,下采样的程度会减弱。这种设置在一些需要保留更多细节信息的任务中可能会被采用,但同时也会增加一定的计算量。

14.在实际应用中,如何选择合适的池化类型和参数?

答案:选择合适的池化类型和参数需要考虑以下因素: 任务类型:对于图像分类等注重显著特征提取的任务,最大池化通常是较好的选择;对于需要考虑全局信息的任务,如场景分类,平均池化或全局平均池化可能更合适。 数据特点:如果数据噪声较多,平均池化可能有助于平滑噪声;对于包含大量细节信息的数据,较小的池化窗口和步长可以保留更多细节。 模型复杂度:如果希望降低模型复杂度,防止过拟合,可以适当增大池化窗口和步长,或者使用全局平均池化替代部分全连接层。此外,也可以通过实验对比不同池化设置下模型的性能指标(如准确率、损失值等),来确定最优的池化类型和参数 。

第三章 全连接层高频考点

1.全连接层的作用是什么?

  1. 全连接层(fully connected layers,FC)在整个卷积神经网络中起到分类器模块的作用。在深度学习中,卷积层、池化层和激活函数层等操作将原始数据映射到隐层高维特征空间,全连接层则将这些学到的隐层高维特征映射到样本标签(label)空间中。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为 $1\times1$ 的卷积;而前层是卷积层的全连接层可以转化为卷积核为 $h\times w$ 的全局卷积, $h$$w$ 分别为前层卷积结果的高和宽。

以VGG-16为例,对于224x224x3的输入,经过最后一层卷积的输出为7x7x512,如果后层是一个含4096个神经元的FC层,那么可用卷积核为7x7x512x4096的全局卷积来实现这一全连接运算过程,其中该卷积核参数如下:

“filter size = 7, padding = 0, stride = 1, D_in = 512, D_out = 4096”

经过此卷积操作后可得输出为1x1x4096的特征矩阵。如需再次叠加一个2048的FC层,则可设定参数如下的卷积层操作:

“filter size = 1, padding = 0, stride = 1, D_in = 4096, D_out = 2048”

  1. 由于全连接层参数存在冗余(仅全连接层参数就可占整个传统深度学习网络参数的80%左右)的情况,一些经典的传统深度学习模型(ResNet和GoogLeNet等)均用全局平均池化(global average pooling,GAP)层来取代FC层去融合模型学到的深度特征,后续再接softmax等损失函数作为传统深度学习模型的目标函数来指导训练过程。同时研究发现,用GAP层替代FC层的模型通常有较好的预测性能。

  2. 学术界研究发现FC层可在模型表示能力的迁移过程中充当“防火墙”的作用。具体来讲,假设在ImageNet上预训练得到的模型为 $\mathcal{M}$ ,则ImageNet可视为源域(迁移学习中的source domain)。微调(fine tuning)是深度学习领域最常用的迁移学习技术。针对模型的微调过程,如果目标域(target domain)中的图像与源域中图像差异巨大(假设相比ImageNet,目标域图像不是物体为中心的图像,而是智慧城市场景数据),不含FC层的网络微调后的结果要差于含FC层的网络。因此FC层可视作模型表达能力的“防火墙”,特别是在源域与目标域差异较大的情况下,FC层可保持较大的模型capacity从而保证模型表达能力的迁移,这是FC层冗余参数带来的优势。

  3. 在Transformers中,FC层重新繁荣,成为了Transformers架构模型的标配,成为AI领域中不可获取的关键部分。正是因为FC层能够保持大模型的capacity能力,如果没有全连接层,Self-Attention层输出的只有一些线性表达特征,表达能力有限,而全连接层可以自己学习复杂的特征表达。

2.介绍一下MLP网络

多层感知器(Multilayer Perceptron, MLP)可以说是最基本的神经网络,由Frank Rosenblatt于1957提出,一直广泛应用于各种机器学习和深度学习任务中。

在传统深度学习时代,由于卷积神经网络的出现,一定程度上MLP网络的使用频率有所减少,但是在Transformer发布后,MLP结构重新站上AI行业的舞台。在现在的AIGC时代中,MLP结构已经成为AIGC模型的重要组成部分

下面是Rocky对MLP网络的详细讲解:

1. MLP的基本结构

MLP由一个输入层、一个或多个隐藏层和一个输出层组成。每一层都包含多个神经元(或节点),这些神经元之间是全连接的,即每个神经元的输出连接到下一层的每个神经元。

1.1 输入层

输入层的神经元数等于输入数据的特征数。如果输入是一个包含28x28像素的图像,则输入层的神经元数为784。

1.2 隐藏层

隐藏层由一个或多个层组成,每层包含若干个神经元。隐藏层的数量和每层的神经元数是超参数,我们可以根据不同的场景进行对应的设置。隐藏层通过激活函数(如ReLU、Sigmoid、Tanh等)引入非线性,使得MLP能够学习复杂的分布和特征。

1.3 输出层

输出层的神经元数取决于具体的AI任务。例如,对于二分类任务,输出层通常包含一个神经元;对于多分类任务,输出层的神经元数等于类别数。

多层感知机示意图

2. MLP的工作原理

MLP的工作原理基于前向传播和反向传播两个过程。

2.1 前向传播

在前向传播过程中,输入数据通过网络层层传递,经过每一层的加权和激活函数计算,最终得到输出结果。具体步骤如下:

  1. 加权求和:每个神经元接收前一层的输出,通过权重进行加权求和,并加上一个偏置项。

$$z_j = \sum_i w_{ij} \cdot x_i + b_j$$

其中, $w_{ij}$ 是权重, $x_i$ 是输入, $b_j$ 是偏置项。

  1. 激活函数:对加权求和的结果应用激活函数,引入非线性。

$$a_j = \sigma(z_j)$$

其中, $\sigma$ 是激活函数,常见的激活函数包括ReLU、Sigmoid和Tanh等。

  1. 输出:将激活函数的输出传递给下一层,直到最后一层得到最终输出。

2.2 反向传播

在反向传播过程中,网络通过计算损失函数的梯度来更新权重和偏置项,以最小化预测误差。具体步骤如下:

  1. 损失函数:计算网络的输出与实际标签之间的损失。常见的损失函数包括均方误差(MSE)和交叉熵损失。

$$L = \frac{1}{2} \sum_i (y_i - \hat{y}_i)^2$$

其中, $y_i$ 是实际标签, $\hat{y}_i$ 是网络输出。

  1. 梯度计算:通过链式法则计算每个权重和偏置项的梯度。

$$\frac{\partial L}{\partial w_{ij}} = \frac{\partial L}{\partial a_j} \cdot \frac{\partial a_j}{\partial z_j} \cdot \frac{\partial z_j}{\partial w_{ij}}$$

  1. 权重更新:使用梯度下降算法更新权重和偏置项。

$$w_{ij} = w_{ij} - \eta \cdot \frac{\partial L}{\partial w_{ij}}$$

其中, $\eta$ 是学习率。

3.简述全连接层的定义与结构

全连接层是神经网络中一种常见的层结构。在结构上,它的每一个神经元都与上一层的所有神经元相连。假设前一层有\(n\)个神经元,当前全连接层有\(m\)个神经元,那么就存在\(m×n\)个连接权重。例如在一个简单的三层神经网络中,输入层有 4 个神经元,隐藏层(全连接层)有 3 个神经元,那么从输入层到隐藏层就会有3×4 = 12个连接权重。这种全连接的结构使得信息能够在层与层之间充分传递,每个神经元都能获取到上一层所有神经元的信息,进而对输入数据进行全面的特征组合与处理 。

4.全连接层的工作原理是什么,涉及哪些数学运算?

全连接层的工作原理基于线性变换与非线性激活。数学运算主要包括矩阵乘法和偏置加法,之后会接入一个非线性激活函数。通过这样的线性变换加上非线性激活,全连接层能够学习到数据中复杂的非线性关系。

5.在图像识别任务中,全连接层通常在卷积神经网络(CNN)的什么位置,起到什么作用?

在图像识别任务的 CNN 架构中,全连接层通常位于卷积层和池化层之后。卷积层和池化层主要负责提取图像的局部特征和对特征进行降维。全连接层在此基础上,将前面层提取到的局部特征进行整合与进一步抽象。例如,经过多个卷积层和池化层后,得到了图像的边缘、纹理等局部特征的特征图,全连接层将这些特征图中的所有特征信息进行综合,通过权重矩阵的学习,把这些局部特征组合成更高级的、能够代表整个图像类别的特征表示。最终全连接层的输出会作为分类器的输入,如在常见的图像分类任务中,最后一个全连接层的输出节点数量等于类别数,通过 Softmax 激活函数将输出转化为各类别的概率分布,从而实现对输入图像的分类 。

6.全连接层的参数数量如何计算?以输入层有 512 个神经元,隐藏层(全连接层)有 256 个神经元为例说明。

全连接层的参数包括权重参数和偏置参数。对于从输入层到全连接层的连接,权重参数数量为输入层神经元数量乘以全连接层神经元数量。偏置参数数量等于全连接层神经元数量。在输入层有 512 个神经元,隐藏层(全连接层)有 256 个神经元的例子中,权重参数数量为512×256 = 131072个。偏置参数数量为 256 个。那么该全连接层总的参数数量为131072 + 256 = 131328个。参数数量众多是全连接层的一个特点,这也意味着它具有很强的拟合能力,但同时在训练时容易出现过拟合问题,尤其是在数据量不足的情况下 。

7.如何缓解全连接层带来的过拟合问题?

可以通过以下几种方法缓解全连接层的过拟合问题: 数据增强:对训练数据进行变换,如在图像数据中进行旋转、翻转、裁剪、缩放等操作。这样可以增加数据的多样性,让模型学习到更具泛化性的特征。例如将一张猫的图片进行水平翻转后作为新的训练样本,模型就不会过度依赖于图片中猫的左右朝向等特定特征。 正则化: L1 和 L2 正则化:在损失函数中加入 L1 或 L2 正则化项。L1 正则化会使部分权重变为 0,起到特征选择的作用;L2 正则化会使权重趋于更小的值,防止权重过大导致过拟合。 Dropout:在训练过程中随机将部分神经元的输出设置为 0,这样每次训练时网络结构都是不同的,避免神经元之间的复杂协同适应,从而减少过拟合。比如设置 Dropout 率为 0.5,意味着每次训练时大约有一半的神经元会被随机失活。 早停法:在训练过程中监控验证集上的性能指标,如准确率或损失值。当验证集性能不再提升甚至开始下降时,停止训练,避免模型在训练集上过拟合。例如每训练一个 epoch,计算一次验证集上的损失,若连续 5 个 epoch 验证集损失都没有下降,则停止训练 。

8.全连接层与卷积层在连接方式上有何区别?这种区别对它们的功能和应用场景有什么影响?

全连接层中每个神经元与上一层所有神经元都相连,而卷积层通过卷积核在输入特征图上滑动进行局部连接。在功能上,全连接层擅长综合全局信息,对特征进行高度抽象和组合,适合对已提取特征进行最终分类或回归。卷积层则专注于提取局部特征,能捕捉图像等数据中的空间结构信息,对平移等变换具有不变性,适用于图像识别、目标检测等任务中对图像特征的初步提取和特征图生成。例如在图像分类中,卷积层先提取图像的边缘、纹理等局部特征,全连接层再将这些局部特征整合用于分类。这种连接方式的差异决定了卷积层更适合处理具有空间结构的数据,全连接层在需要综合全局信息的任务中发挥关键作用。

9.在一个多层全连接神经网络中,随着层数增加,会出现哪些问题?如何解决这些问题?

随着多层全连接神经网络层数增加,可能出现梯度消失或梯度爆炸问题。梯度消失是因为反向传播时梯度在各层不断相乘,若权重初始化值较小,经过多层传递后梯度会趋近于 0,导致参数无法有效更新。梯度爆炸则相反,若权重初始化值过大,梯度会在多层传递中不断增大,使参数更新不稳定。解决方法包括:采用合适的权重初始化方法,如 Xavier 初始化或 Kaiming 初始化,根据激活函数特性设置合理的权重初始值范围;使用 Batch Normalization,在每一层输入前对数据进行归一化处理,加速收敛,减少梯度问题影响;选择合适的激活函数,如 ReLU 函数在一定程度上可缓解梯度消失问题,因为其在正数部分梯度为 1。

10.全连接层的输出维度是由什么决定的?若要将全连接层的输出维度从100调整为50,需要改变哪些参数?

全连接层的输出维度由该层神经元数量决定。若要将输出维度从 100 调整为 50,需要改变权重矩阵的维度,使其行数从 100 变为 50,同时偏置向量的维度也应从 100 变为 50。在代码实现中,若使用框架如 PyTorch,重新定义全连接层时需将输出维度参数设置为 50,框架会自动调整权重和偏置的维度。

11.在训练全连接层时,如何选择合适的学习率?过大或过小的学习率会有什么影响?.如何缓解全连接层带来的过拟合问题?

答案:选择合适学习率可通过尝试不同值,观察训练过程中损失函数和模型性能变化。如从较大值开始(如 0.1)逐渐减小,或使用学习率调度策略(如指数衰减、余弦退火等)动态调整。过大学习率会使模型训练过程不稳定,损失值可能剧烈波动甚至不收敛,参数更新时可能跳过最优解,导致模型性能差。例如在梯度下降时,步长过大,参数在最优解附近反复振荡无法收敛。过小学习率则会使训练速度极慢,模型需要更多训练时间和迭代次数才能收敛,可能陷入局部最优解而无法找到全局最优,因为参数更新步伐过小,难以探索到更优解区域。

12.全连接层在自然语言处理任务(如文本分类)中是如何应用的?与在图像识别任务中的应用有何不同?

在文本分类任务中,首先需将文本数据通过词嵌入等方式转化为向量表示,如使用 Word2Vec 或 GloVe 获取词向量,再通过平均池化、最大池化等操作将多个词向量合并为文本向量。全连接层接收该文本向量,对其进行特征组合与分类,如最后一层全连接层输出节点数为类别数,经 Softmax 函数得到各类别概率。与图像识别不同,图像识别中全连接层接收的是卷积层和池化层提取的图像特征图经展平后的向量,处理的是图像的空间结构特征;而文本分类中全连接层处理的是文本的语义特征向量,且文本数据的预处理和特征提取方式与图像有很大差异,图像基于像素信息,文本基于词汇和语法语义。

13.请解释全连接层中的偏置(bias)的作用是什么?去掉偏置会对模型产生什么影响?

偏置(bias)的作用是为神经元的输出引入一个可学习的常数项。在全连接层中,输出计算为y=W*x+b,其中b就是偏置向量。偏置增加了模型的灵活性,使模型能够学习到更复杂的函数关系。例如,即使输入x为零向量,偏置也能使神经元有非零输出,这在一些情况下是必要的,比如在二分类问题中,偏置可以帮助模型更好地调整分类边界。去掉偏置后,模型的拟合能力会下降,因为它失去了一个可以独立调整神经元输出基准的参数。在复杂任务中,可能导致模型无法准确学习到数据中的规律,尤其当数据存在某种整体偏移或趋势时,去掉偏置会使模型难以捕捉到这种信息,从而降低模型的性能。

14.全连接层在生成对抗网络(GAN)中扮演什么角色?在生成器和判别器中,全连接层的设计有何不同?

在生成对抗网络(GAN)中,全连接层在生成器和判别器中都起到重要作用。生成器中的全连接层用于将随机噪声向量逐渐变换为具有特定结构的数据(如生成图像时变换为图像像素值向量)。它从低维噪声空间逐步生成高维数据,通过一系列全连接层和激活函数,学习到从噪声到数据分布的映射。判别器中的全连接层则用于对输入数据(真实数据或生成器生成的数据)进行特征提取和分类,判断数据是真实的还是生成的。在设计上,生成器的全连接层通常是从低维到高维,逐渐扩展数据维度以生成复杂数据;而判别器的全连接层一般是从高维到低维,对输入数据进行降维抽象,提取关键特征用于分类,最终输出一个标量表示数据为真实的概率。例如生成器可能从 100 维噪声向量开始,经多个全连接层变为 784 维图像向量(对于 MNIST 图像);判别器则将 784 维图像向量经全连接层逐步降维到 1 维输出。

15.如何评估全连接层在一个深度学习模型中的重要性?有没有一些指标或方法可以用来量化这种重要性?

模型性能变化:移除全连接层或改变其结构(如减少神经元数量),观察模型在训练集和验证集上的性能指标(如准确率、损失值)变化。若性能显著下降,说明全连接层对模型很重要。例如在图像分类模型中,移除全连接层后准确率大幅降低,表明全连接层在整合特征用于分类中起到关键作用。 参数敏感度分析:对全连接层的权重进行微小扰动,观察模型输出的变化。使用梯度信息,计算输出对全连接层权重的梯度大小,梯度越大说明该权重对模型输出影响越大,也就意味着全连接层越重要。例如通过计算相对于全连接层权重的梯度范数,范数越大表示该层权重对模型性能影响越显著。 特征重要性分析:利用一些特征重要性评估方法,如基于 Shapley 值的方法,分析全连接层输入特征(前一层输出特征)对最终输出的贡献。若某些特征在全连接层处理后对输出影响较大,说明全连接层在处理这些关键特征中具有重要作用。例如在一个预测任务中,通过 Shapley 值分析发现经全连接层后某些特征对预测结果贡献度高,体现了全连接层对这些特征的有效利用 。

16.全连接层有哪些主流变体?

全连接层(Fully Connected Layer,FC)是神经网络的核心组件之一,其每个输入节点与输出节点均相连,擅长捕捉全局特征。然而,传统全连接层存在参数过多、计算量大、易过拟合等问题,因此衍生出多种变体以适配不同任务需求。以下是主要变体及其应用场景:

1. 稀疏全连接层(Sparse FC)

  • 原理:通过剪枝或稀疏约束(如L1正则化)减少有效连接数,仅保留关键权重。
  • 案例
    • 图像分类:在ResNet中,对最后一层全连接进行剪枝,参数减少30%,精度损失<1%。
  • 应用领域
    • 传统深度学习:压缩模型大小,提升部署效率(如移动端图像分类)。
    • 自动驾驶:轻量化多任务感知模型(如车道线检测+目标检测)。

2. 动态全连接层(Dynamic FC)

  • 原理:根据输入动态调整权重,例如通过门控机制或条件计算。
  • 案例
    • 多语言翻译:动态调整不同语言对的翻译权重,提升小语种性能(如Meta的M2M-100模型)。
  • 应用领域
    • AIGC:生成多样化风格内容(如根据文本提示动态调整生成网络参数)。
    • 自动驾驶:动态融合多传感器数据(如雨天增强激光雷达权重)。

3. 分组全连接层(Grouped FC)

  • 原理:将输入/输出节点分组,组内全连接,组间隔离,减少参数量(类似分组卷积)。
  • 案例
    • 推荐系统:用户兴趣分组(如性别、年龄),每组独立建模(如阿里的Deep Interest Network)。
  • 应用领域
    • 传统深度学习:处理高维稀疏数据(如广告点击率预测)。
    • AIGC:多模态生成(如文本、图像分组处理后再融合)。

4. 低秩分解全连接层(Low-Rank FC)

  • 原理:将权重矩阵分解为两个低秩矩阵(如 $W=U \cdot V$ ),减少参数量。
  • 案例
    • 语音识别:在RNN-T模型中,低秩分解全连接层参数减少50%,推理速度提升20%。
  • 应用领域
    • AIGC:轻量化生成模型(如手机端Stable Diffusion)。
    • 自动驾驶:实时语义分割模型压缩。

5. 注意力增强全连接层(Attention-Augmented FC)

  • 原理:引入注意力机制,动态加权输入特征。
  • 案例
    • 机器翻译:在Transformer解码器中,全连接层结合自注意力,提升长距离依赖建模(如Google的T5模型)。
  • 应用领域
    • AIGC:生成连贯长文本(如小说续写)。
    • 自动驾驶:时序行为预测(如行人轨迹预测)。

6. 二值化全连接层(Binary FC)

  • 原理:权重或激活值二值化(+1/-1),减少计算资源。
  • 案例
    • 边缘设备图像分类:二值化ResNet-18在CIFAR-10上精度保持85%,功耗降低70%。
  • 应用领域
    • 自动驾驶:低功耗车载芯片实时推理。
    • 传统深度学习:物联网设备端模型部署。

7. 残差全连接层(Residual FC)

  • 原理:引入残差连接( $y = F(x) + x$ ),缓解梯度消失。
  • 案例
    • 图像超分辨率:残差全连接层堆叠,提升高频细节恢复能力(如ESRGAN)。
  • 应用领域
    • AIGC:高分辨率图像生成(如4K人脸合成)。
    • 自动驾驶:高精度地图重建。

8. 门控全连接层(Gated FC)

  • 原理:通过门控机制(如Sigmoid)控制信息流动。
  • 案例
    • 语音合成:门控全连接层调节音素与韵律特征(如WaveNet)。
  • 应用领域
    • AIGC:多风格语音生成(如情感化TTS)。
    • 自动驾驶:多模态信号融合(如语音指令+视觉导航)。

总结

全连接层的变体通过参数优化、动态计算、结构创新等方式,解决了传统FC层的局限性,广泛应用于以下场景:

  • AIGC:动态生成、轻量化部署;
  • 传统深度学习:模型压缩、多任务学习;
  • 自动驾驶:实时推理、多模态融合。