《PyTorch面试精华》


1 前言
    1.1  PyTorch安装

    1.2  显卡驱动的困惑

    1.3  CUDA安装注意事项

    1.4  cuDNN的介绍

    1.5  Pytorch Lightning介绍

    1.6  PyTorch学习之道

    1.7  PyTorch快速入门

    1.8  PyTorch调参之道

    1.9  PyTorch调参套件

    1.10  手动创建虚拟环境

2 深度学习之数学基础
    2.1  希腊字母解读

    2.2  梯度的物理意义

    2.3  图解梯度下降法

    2.4  图解梯度上升法

    2.5  自然梯度

    2.6  泰勒公式的介绍

    2.7  信息与信息熵

    2.8  重要性采样

    2.10  欧几里得范数

    2.11  特征值和特征向量

    2.12  似然函数的理解

    2.13  矩阵秩的深刻理解

3 PyTorch入门疑难点
4 PyTorch全局设置
    4.1  全局设置当前设备

    4.2  全局设置浮点精度

5 PyTorch GPU分布式训练
    5.1  PyTorch GPU基础操作

    5.2  DataParallel用法详解

    5.3  GPU分布式训练模型

    5.4  CUDA_VISIBLE_DEVICES

    5.5  device详细说明

    5.6  to(device)和.cuda()

    5.7  CUDA设备索引

    5.8  GPU设备索引

6 向量的基础与核心
    6.1  Tensor的组成与存储

    6.2  Tensor的grad属性

    6.4  Tensor的叠加

    6.5  禁用梯度计算

    6.6  向量的保存和加载

    6.7  参数向量

    6.8  叶子节点

    6.9  detach原理

    6.10  requires_grad属性

    6.11  Tensor与Numpy互换

    6.12  张量cat操作

    6.13  零维张量

    6.15  squeeze/unsqu...函数

    6.16  argmax和max的区别

    6.17  torch.as_tensor的应用

7 神经网络基础
    7.2  PyTorch计算图

    7.3  查看网络权重参数

    7.4  保存模型

    7.5  Adam相关面试题

    7.6  Train模式和Eval模式

    7.7  线性网络

    7.8  双线性网络

    7.9  惰性线性层

    7.10  PyTorch中的自动微分

    7.12  Dropout机制

    7.13  半精度训练

    7.14  Xavier初始化

    7.15  注意力机制

    7.16  Dataset数据处理

    7.17  StepLR学习率调度器

    7.18  词嵌入的理解

    7.19  TensorDataset的使用

    7.20  模型的保存与加载

    7.21  ModuleList和Sequential

    7.22  Batch Normalization介绍

8 计算机视觉基础知识
    8.1  通道的深刻理解

    8.2  1x1卷积的作用

    8.3  特征提取和可视化

    8.4  反卷积的推导

    8.5  理解卷积

    8.7  空洞卷积

    8.8  池化层的作用

    8.9  感受野与特征图

    8.10  NMS算法

    8.11  特征图尺寸计算

9 循环神经网络基础
    9.2  RNN的介绍

10 注意力机制
    10.1  位置编码的作用

    10.2  位置编码的种类

    10.4  Embedding本质理解

    10.6  Transformer VS CNN/RNN

    10.7  ELMo介绍

11 PyTorch归一化
    11.2  层归一化技术详解

12 激活函数相关内容
    12.1  激活函数简介

    12.2  万能逼近定理

    12.3  指数函数的学习

    12.4  Sigmoid函数的介绍

    12.5  Tanh函数的介绍

    12.6  Softmax函数的实现

    12.7  ReLU函数的介绍

    12.8  Leaky Relu函数的介绍

    12.9  ReLu与非线性的理解

    12.10  Parametric ReLU函数

    12.11  ELU函数介绍

    12.12  神经元死亡的问题

13 思考题的答案
    13.1  思考题的答案解密

自注意力(Self-attention)与卷积神经网络(CNN)的对比

创建时间:2024-12-17 更新时间:2024-12-17 阅读次数:1635 次

自注意力(Self-attention)和卷积神经网络(CNN)是两种常见的神经网络结构,广泛应用于处理不同类型的输入数据。尽管它们有不同的设计初衷和计算方式,但是它们的本质是一样的,都是特征的提取工具。

下面我将从多个角度详细分析自注意力和CNN两者之间的关系,方便大家消除思维定势,毕竟很多新人都是以CNN为切入点开启深度学习的,我希望大家通过此文尽快进入注意力的世界。

1、自注意力与CNN的相似性

1.1、信息提取的机制

自注意力和卷积神经网络的核心目的是从输入数据中提取重要特征。它们都试图通过给定的输入生成更有意义的表示,从而用于后续任务(如分类、预测等)。 局部信息处理:在自注意力和卷积神经网络中,局部信息(即数据点之间的局部依赖关系)都非常重要。CNN通过卷积操作在局部感受野中提取信息,而自注意力机制则通过点积操作来衡量序列中不同位置之间的相似性,从而确定需要“关注”的元素。

1.2、并行处理能力

二者都能够很好地进行并行计算。CNN中的卷积操作可以并行处理每个卷积核与局部感受野的计算。自注意力机制同样可以并行处理序列中所有查询与键之间的点积计算。

1.3、可堆叠性

CNN可以通过多层卷积来逐层提取更复杂的特征,自注意力机制也可以通过堆叠多个注意力层来逐步提高特征表示的丰富性和表达能力。多层注意力机制允许模型从输入数据的全局和局部特征中同时获取信息。

2、自注意力与CNN的区别

尽管它们在某些方面相似,但自注意力和卷积神经网络在处理方式和应用场景上有着显著的区别:

2.1、感受野的固定性与灵活性

CNN的感受野是固定的。在卷积神经网络中,每个神经元的感受野是预定义的,通常由卷积核的大小决定。一个卷积核只能在其定义的局部区域内(如 (3 × 3 3 \times 33×3) 或 (5 × 5 5 \times 55×5))提取特征,因此CNN擅长捕捉局部的空间结构特征。卷积操作本质上是一种局部操作,并且依赖于逐层卷积来增加感受野的范围。由于感受野的固定,CNN对于远距离依赖关系的捕捉能力较弱,必须通过多层卷积来逐步增加局部信息的聚合,从而间接捕捉长距离依赖。

自注意力机制的感受野是动态和可学习的。自注意力机制能够直接计算每个输入与所有其他输入之间的依赖关系,不论它们在序列中的距离如何。它通过计算查询和键之间的点积来确定每个位置的注意力得分,这使得自注意力机制可以有效捕捉全局依赖关系。自注意力机制的感受野是全局的且动态可调整的,依赖于输入的上下文,允许模型根据任务需求关注到输入序列中的任意位置。

2.2、局部性与全局性

CNN强调局部特征。CNN通过卷积核提取局部的空间特征,这使得它在处理图像等数据时非常有效,特别是在捕捉边缘、纹理等局部结构时。由于其局部操作性质,CNN擅长处理具有明显局部相关性的任务,如图像处理中的边缘检测、物体识别等。

自注意力机制更倾向于全局特征。自注意力机制没有局部感受野的限制。它通过计算序列中每个位置的注意力得分,直接对整个序列中的所有元素进行加权组合,从而提取全局特征。因此,自注意力在处理语言、时间序列等数据时表现出色,尤其是在捕捉长距离依赖关系方面。在处理语言模型或序列任务时,自注意力能够自然地建模序列中各个位置的依赖,无论这些依赖的距离有多远。这种特性在机器翻译、文本生成等自然语言处理任务中表现得尤为突出。

2.3、 计算复杂度:

CNN的计算复杂度较低。CNN的计算复杂度通常较低。卷积操作的计算复杂度主要由卷积核的大小和步幅决定,它们只涉及局部的输入区域,计算量随输入大小线性增长。这使得CNN在处理较大图像时仍然可以保持较高的计算效率。

自注意力的计算复杂度较高。自注意力机制的复杂度较高,尤其是当输入序列很长时。由于自注意力需要计算每个输入元素与所有其他元素之间的依赖关系,计算复杂度为$O(n ^2)$,n是输入序列的长度)。在处理长序列时,计算开销和存储需求都会显著增加。这也是为什么在一些场景中(如长序列处理),需要设计更加高效的自注意力机制,如截断自注意力或稀疏注意力。

2.4、 空间维度与序列维度。

CNN通常用于空间结构数据。卷积神经网络最初设计用于处理图像等具有空间结构的数据。卷积操作能够非常有效地提取图像的空间特征,因此CNN被广泛应用于图像分类、目标检测等任务中。 在图像处理任务中,CNN可以通过滑动的卷积核提取二维空间中的局部特征。

自注意力通常用于序列数据。自注意力机制最初被设计用于处理序列数据,如自然语言处理中的句子、时间序列分析中的信号等。其灵活的结构使得它能够处理各种长度的序列数据,尤其在捕捉序列中长距离的上下文依赖时表现出色。自注意力机制擅长处理一维序列数据,但在经过调整后也可以用于处理图像等二维数据(如视觉Transformer)。

3、总结

相似性:自注意力机制和卷积神经网络都是提取输入特征的机制,都可以堆叠多层以获得更加复杂的特征表示,且都能够进行并行计算。

区别:两者在处理数据的方式和捕捉特征的范围上有显著区别。CNN使用固定的局部感受野来处理空间信息,擅长捕捉局部特征,但难以直接建模长距离依赖。自注意力机制则具有全局感知能力,通过动态调整注意力权重,可以有效捕捉全局依赖,但计算复杂度较高,特别是在处理长序列时。

自注意力和CNN代表了两种不同的信息提取方式,它们在各自的应用场景中都表现出卓越的性能。随着神经网络架构的不断发展,它们的结合(如视觉Transformer和混合网络)也成为了研究的热点。

本教程共117节,当前为第99节!
本教程最新修订时间为:2026-05-08 11:10:53