Transformer学习记录与CNN思考

Transformer学习与CNN思考

文章目录

  • Transformer学习与CNN思考
  • [1 结构](#1 结构)
  • [2 Transformer输入](#2 Transformer输入)
    • [2.1 Embedding(嵌入)](#2.1 Embedding(嵌入))
    • [2.2 位置编码](#2.2 位置编码)
  • [2 编码](#2 编码)
    • [2.1 注意力机制](#2.1 注意力机制)
      • [2.1.1 注意力机制运行原理](#2.1.1 注意力机制运行原理)
      • [2.1.2 注意力函数(注意力汇聚实现方式)](#2.1.2 注意力函数(注意力汇聚实现方式))
      • [2.1.3 注意评分函数](#2.1.3 注意评分函数)
      • [2.1.4 例子](#2.1.4 例子)
      • [2.1.5 多头注意力](#2.1.5 多头注意力)
    • [2.2 Add & Norm](#2.2 Add & Norm)
    • [2.3 Feed Forward](#2.3 Feed Forward)
    • [2.4 encode block](#2.4 encode block)
  • [3 解码](#3 解码)
    • [3.1 decode block](#3.1 decode block)
    • [3.2 第一个Multi-Head Attention](#3.2 第一个Multi-Head Attention)
    • [3.2 第二个Multi-Head Attention](#3.2 第二个Multi-Head Attention)
  • [4 Transformer输出](#4 Transformer输出)
  • [5 CNN vs Transformer](#5 CNN vs Transformer)
  • [6 关于CNN思考](#6 关于CNN思考)
  • 参考

1 结构

标准的 Transformer 模型主要由两个模块构成: Encoder(左边):负责理解输入文本,为每个输入构造 对应的语义表示(语义特征); Decoder(右边):负责生成输出,使用 Encoder 输出的语义表示结合其他输入来生成目标序列。

Encoder 模型(例如 BERT),又称自编码模型,适用于只需要理解输入语义的任务,例如句子分类、命名实体识别;纯 Decoder 模型(例如 GPT),又称自回归模型,适用于生成式任务,例如文本生成;Encoder-Decoder 模型(例如 BART、T5),又称 Seq2Seq 模型。适用于需要基于输入的生成式任务,例如翻译、摘要。

如何区分这个编码--解码器

特征 编码器(Encoder) 解码器(Decoder)
自-attention 有,且通常允许全向上下文关注(如图像中所有位置互相关) 有,但常使用 因果掩码(causal mask),防止"看未来"
Cross-attention ✅ 有,用于关注编码器输出的特征
输入来源 原始输入(如图像、文本) 上一时刻的输出 + 编码器的上下文特征
层数堆叠 多层自-attention 提升特征提取能力 多层自-attention + cross-attention,逐步生成输出

📌 关键点Cross-attention 是解码器的标志性结构 。如果某模块明确使用 query 去"查询"另一个特征序列(如图像特征图、历史BEV特征),那就是在做解码任务。

Transformer是一种自监督学习。自监督学习(Self-Supervised Learning, SSL )将无监督学习的框架监督学习的目标结合,通过从数据本身自动生成标签(无需人工标注),学习通用的数据表示。

2 Transformer输入

2.1 Embedding(嵌入)

Embedding(嵌入) 是机器学习和深度学习中的核心概念,指将高维、离散或复杂的数据(如文字、图像、类别等)转换为低维、连续的数值向量表示的过程。这种表示能保留原始数据的语义或结构信息,便于计算机处理。

类似序列化数据的过程,像protobuf一样,把数据打包成计算机认识的模样。但Embedding核心价值在于保留语义关系 。例如,在词嵌入中,"猫"和"狗"的向量距离会比"猫"和"汽车"更近。Protobuf等序列化工具的目标是无损还原数据 ,而Embedding有损转换 ------它更注重保留数据间的潜在关系(如语义相似性),而非精确存储原始信息。

除此,Embedding通常是通过模型动态学习得到的 ,而非静态的编码规则。对于文本输入,Embedding就是用BERT这种,如果是图像输入,可以利用Resnet网络提取特征向量


1. 文本Embedding(如BERT)

  • 输入:离散的单词序列(如"深度学习")
  • 处理方式:
    • 通过Transformer网络学习上下文感知的表示
    • 输出固定长度的向量(如768维),其中相近语义的文本向量距离更近
    • 例如:"猫""喵星人"的向量余弦相似度会很高

2. 图像Embedding(如ResNet)

  • 输入 :高维像素矩阵(如224x224x3的图片)
  • 处理方式:
    • CNN的卷积层逐级提取局部特征(边缘→纹理→物体部件)
    • 最终通过全局池化得到紧凑向量(如2048维)
    • 例如:不同角度的猫图片会映射到向量空间的邻近区域

2.2 位置编码

对于文本序列

显式地告诉模型每个 token(或像素/点)在序列中的位置 ,使 Transformer 能够建模顺序关系。

p i , 2 j = sin ⁡ ( i 1000 0 2 j / d ) , p i , 2 j + 1 = cos ⁡ ( i 1000 0 2 j / d ) . \begin{align*} p_{i,2j} &= \sin\left(\frac{i}{10000^{2j/d}}\right), \\ p_{i,2j+1} &= \cos\left(\frac{i}{10000^{2j/d}}\right). \end{align*} pi,2jpi,2j+1=sin(100002j/di),=cos(100002j/di).

对于图像序列,CNN不需要显式位置编码,如

  • 操作
    将CNN输出的特征图(假设为 H×W×D)展平为 (H×W)×D 的序列,每个空间位置(共 H×W 个)对应一个可学习的嵌入向量(类似BERT的[POS] token)。
  • 例子
    Vision Transformer(ViT)将图像分块为16×16patch,每个patch视为一个"词",并添加可学习的位置编码。

2 编码

2.1 注意力机制

2.1.1 注意力机制运行原理

首先声明几个名词,用来描述人类的注意力行为,自主性提示是人主动意识,而非自主性提示是非主观意识

查询 query:自主性提示

key:非自主性提示

value:感官输入

注意力机制的框架 如下图所示,注意力机制通过 注意力汇聚查询query和键key 结合在一起,实现对 值 的选择倾向。注意力汇聚就是用神经网络表征选择倾向这一行为的过程。

2.1.2 注意力函数(注意力汇聚实现方式)

下图展示整个注意力函数过程:

""注意力机制通过 注意力汇聚 将查询query和键key结合在一起,实现对值value的选择倾向。""----这一过程可以用注意力函数表示:

f ( q , ( k 1 , v 1 ) , ... , ( k m , v m ) ) = ∑ i = 1 m α ( q , k i ) v i ∈ R u , f(\mathbf{q}, (\mathbf{k}_1, \mathbf{v}_1), \ldots, (\mathbf{k}_m, \mathbf{v}m)) = \sum{i=1}^{m} \alpha(\mathbf{q}, \mathbf{k}_i) \mathbf{v}_i \in \mathbb{R}^u, f(q,(k1,v1),...,(km,vm))=i=1∑mα(q,ki)vi∈Ru,

注意力函数的本质就是对值value的加权和!注意力汇聚 通过 注意力评分函数 a ( q , k i ) a(q,k_{i}) a(q,ki) + softmax 组成,汇聚querykey,生成对应值value注意力权重,如图中红色框选部分。权重公式如下:

α ( q , k i ) = softmax ( a ( q , k i ) ) = exp ⁡ ( a ( q , k i ) ) ∑ j = 1 m exp ⁡ ( a ( q , k j ) ) ∈ R . \alpha(\mathbf{q}, \mathbf{k}_i) = \text{softmax}(a(\mathbf{q}, \mathbf{k}_i)) = \frac{\exp(a(\mathbf{q}, \mathbf{k}i))}{\sum{j=1}^{m} \exp(a(\mathbf{q}, \mathbf{k}_j))} \in \mathbb{R}. α(q,ki)=softmax(a(q,ki))=∑j=1mexp(a(q,kj))exp(a(q,ki))∈R.

补充:softmax公式

y ^ = softmax ( o ) 其中 y ^ j = exp ⁡ ( o j ) ∑ k exp ⁡ ( o k ) \hat{y} = \text{softmax}(\mathbf{o}) \quad \text{其中} \quad \hat{y}j = \frac{\exp(o_j)}{\sum{k} \exp(o_k)} y^=softmax(o)其中y^j=∑kexp(ok)exp(oj)

2.1.3 注意评分函数

使用点积得到计算效率更高的评分函数,但是点积操作要求查询query和键value具有相同的长度d

a ( q , k ) = q ⊤ k / d . a(\mathbf{q}, \mathbf{k}) = \mathbf{q}^\top \mathbf{k} / \sqrt{d}. a(q,k)=q⊤k/d .

softmax ( Q K ⊤ d ) V ∈ R n × v . \text{softmax}\left(\frac{\mathbf{QK}^\top}{\sqrt{d}}\right)\mathbf{V} \in \mathbb{R}^{n \times v}. softmax(d QK⊤)V∈Rn×v.

2.1.4 例子

注意力就是不同位置之间关联有多紧密的权重。两个向量点积,模的最大值产生于向量夹角为0。也就是说,如果两个word意义相近,embedding向量也就相近,那自然注意力就大。这是最简单的一种情况,不用考虑位置向量。

原始论文中图示-----缩放的点积注意力机制

Q,K,V是由原始输入经过Embedding(嵌入)以及位置编码后,成为一个 向量x,长度为d,然后x乘以相应的权重得到的。注意,X,Q,K,V每一行都代表一个单词,或者说特征。

② 然后,我们就可以基于上面提到的注意力函数实现注意力机制!

首先计算注意力得分,基于2.3节公式,公式中计算矩阵Q和K每一行向量的内积,同时为了防止内积过大,会除以向量长度d的平方根。得到的这个矩阵维度都是n,n就是单词数量(特征数量),也就是说,这个矩阵表示了单词之间的attention强度!(相关联度)

③ 对每一行向量进行softmax计算,即每一行总和都为1

④ 与值value相乘,得到输出Z

而且,Z每一行可以拆分如下,单词1的输出 Z 1 Z_{1} Z1等于所有单词i的值 V i V_{i} Vi根据attention的系数比例加在一起。

2.1.5 多头注意力

多头注意力其实就是给定相同的Q、K、V时,基于相同的注意力机制学习到不同的行为,然后把不同的行为线性组合,捕获序列内各种范围的依赖关系。

公式如下

h i = f ( W i ( q ) q , W i ( k ) k , W i ( v ) v ) ∈ R p v , \mathbf{h}_i = f(\mathbf{W}_i^{(q)} \mathbf{q}, \mathbf{W}_i^{(k)} \mathbf{k}, \mathbf{W}_i^{(v)} \mathbf{v}) \in \mathbb{R}^{p_v}, hi=f(Wi(q)q,Wi(k)k,Wi(v)v)∈Rpv,

∣ h 1 ∣ ⋮ ∣ h h ∣ \] ∈ R p o . \\begin{bmatrix} \| h_1 \| \\\\ \\vdots \\\\ \| h_h \| \\end{bmatrix} \\in \\mathbb{R}\^{p_o}. ∣h1∣⋮∣hh∣ ∈Rpo. > 如图所示,在`h`个注意力机制下,会生成`h`个输出`z`,称为头 ![](https://i-blog.csdnimg.cn/direct/33652b55cfcb4056a1dff4b1363788b0.png) > 将每个头叠加后,基于全连接层(线性变换,无激活函数)生成最终的输出`Z` ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ab66cd2cd8fb42c081d0158b33c94963.png) ### 2.2 Add \& Norm > ① 首先,`Add`是一种残差结构,类似于`Resnet`,改善了深层网络的训练效率,包括收敛速度和模型性能。从`transformer`结构图来看,是`X + MultiHeadAttention(X)`或者`X + FeedForward(X)`。而且,从上面的例子可以看出,输入X和经过变换后的输出是可以直接相加的,它们维度一致。 > ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/40c7c0fa748d47db8f2e76658eb4b72e.png) > ② `Norm`类似于批量归一化`BN`,对每一层神经元输入转换到同一个均值和方差下,加速收敛 ### 2.3 Feed Forward > `Feed Forward`是一个两层的全连接层(MLP无隐藏),第一层使用`Relu`激活函数,第二层不使用激活函数 max ⁡ ( 0 , X W 1 + b 1 ) W 2 + b 2 \\max(0, XW_1 + b_1) W_2 + b_2 max(0,XW1+b1)W2+b2 ### 2.4 encode block   通过上面描述的 `Multi-Head Attention, Feed Forward, Add & Norm` 就可以构造出一个`Encoder block`, `Encoder block` 接收输入矩阵 X ( n × d ) X_{(n×d)} X(n×d) , 并输出一个矩阵 O ( n × d ) O_{(n×d)} O(n×d) 。通过多个 `Encoder block` 叠加就可以组成 `Encoder`。   第一个 `Encoder block` 的输入为句子单词的表示向量矩阵,后续 `Encoder block` 的输入是前一个 `Encoder block` 的输出,最后一个 `Encoder block` 输出的矩阵就是编码信息矩阵 C ( n × d ) C_{(n×d)} C(n×d) ,这一矩阵后续会在 `Decoder` 中的多头注意力机制中,生成对应的`K、V`。 ![](https://i-blog.csdnimg.cn/direct/4dae08d43e3e4d538b3136478a83b8c6.png) ## 3 解码 ### 3.1 decode block * 包含两个 `Multi-Head Attention` 层。 * 第一个`Multi-Head Attention` 层采用了 `Masked` 操作。 * 第二个 `Multi-Head Attention`层的 `K、V` 矩阵使用 `Encoder` 的编码信息矩阵 `C` 进行计算,而 `Q` 使用上一个 `Decoder block` 的输出计算。 ### 3.2 第一个Multi-Head Attention > 每一行表示一个单词向量,所以时候是遮挡是对于每一行来讲的,比如说,第一行只有0,那么后面只能有0;第二行存在0,1,那么这一行对应列就可以存在0,1;以此类推,就可以得到掩膜 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/13bbf7aba2df47779afd2e263b6c50f1.png) > 然后就是同样的`QK`相乘 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1f82dd4076614e0fb447cd1fd2cfb8f0.png) > 乘以掩膜矩阵 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/785aaa0cda0747c78a27c6cb09624291.png) > 获取最终输出Z ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/130c8325bfa9475097de918f9a5d32bb.png) ### 3.2 第二个Multi-Head Attention   `Decoder block` 第二个 `Multi-Head Attention` 变化不大,主要的区别在于其中 `Self-Attention` 的 `K, V` 矩阵不是使用上一个 `Decoder block` 的输出计算的,而是使用 `Encoder` 的编码信息矩阵 `C` 计算的。   根据 `Encoder` 的输出 `C` 计算得到 `K, V`,根据上一个 `Decoder block` 的输出 `Z` 计算 `Q`(如果是第一个 Decoder block 则使用输入矩阵 X 进行计算)。这样做的好处是在 `Decoder` 的时候,每一位单词都可以利用到 `Encoder` 所有单词的信息(这些信息无需 `Mask`)。 ## 4 Transformer输出 > 因为掩膜的存在,单词0的输出`Z0`只包含单词0的信息 ![](https://i-blog.csdnimg.cn/direct/76045a44c4b4450699252b03307e4b36.png) > 根据输出矩阵每一行预测下一个单词 ![](https://i-blog.csdnimg.cn/direct/8de3418b91174a2881ea37a39126450f.png) ## 5 CNN vs Transformer **CNN优点:** 1. 适合并行计算 2. 适合视觉 3. 参数少(比MLP) **CNN缺点:** 1. 没有全局联系,只能靠最后的全连接层(MLP),但MLP不能太深 2. 不适合做(时间)序列,不像RNN,所以滤波什么的不擅长。 **Transformer优点:** 1. 适合并行计算(和CNN差不多) 2. 适合做(时间)序列,所以BEV有了这个能力 3. 对于大模型容易训练(因为参数冗余多,不容易陷入局部最优),CNN也比较容易训练(自动驾驶适用大小的模型)。 4. 可以建立长距离的联系(CNN不行,MLP可以但是太臃肿) **Transformer缺点:** 1. 不适合视觉。所以backbone还是CNN 所以说,`CNN+Transformer`可以利用图像序列的时空信息 ## 6 关于CNN思考 **目标检测和语义分割任务通常可以用相同的CNN网络结构实现,区别主要在于标签形式(如检测用边界框,分割用像素级掩码)。** 这一现象的本质是否源于标签差异? > 回答:① 底层特征的通用性 * **CNN的层次化特征提取**:无论是检测还是分割,底层网络(如ResNet、VGG)的作用都是提取通用视觉特征(边缘、纹理、形状等)。这些特征对两类任务均适用。 * **共享Backbone**:现代网络设计(如Mask R-CNN)通常用同一Backbone(如ResNet)同时支持检测和分割,仅通过不同任务头(Head)适配不同输出。Yolo-v8也可以同时检测与分割。 > 回答:② 任务差异与标签形式 * 标签形式的区别 : * **检测**:标签是边界框(Bounding Box)+类别,输出需回归坐标和分类。 * **分割**:标签是像素级类别掩码(Mask),输出需密集预测每个像素的类别。 * **本质差异** :检测关注**物体实例的定位与分类** ,分割关注**像素级语义或实例区分**。标签形式反映了任务目标的不同,但二者共享对物体和场景的理解需求。 > 最后,感觉NN本质就是一种优化模型,类似最小二乘优化,里面的参数远大于我们拟合一条线这种情况,不停的梯度下降去找到最优解。从线性回归到拥有非线性激活函数的MLP以及更复杂的网络,本质就是利用强大算力+巨额参数寻找非线性问题最优解的过程。 > > 但是,不同之处,CNN强大的还是其学习特征的能力,对于常规非线性问题,特征x是已知的,而基于网络,都是直接仍一堆图片,等待CNN去提取。 ## 参考 [知乎参考链接1](https://zhuanlan.zhihu.com/p/338817680) [知乎参考链接2](https://zhuanlan.zhihu.com/p/683031075) 原始论文`Attention Is All You Need` 李沐大神《动手深度学习》

相关推荐
warm3snow2 天前
AI 核心技能系列:12 篇文章带你系统掌握大模型岗位必备技能
ai·transformer·agent·skill·mcp·fine-tunning
西岸行者3 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
homelook3 天前
Transformer与电池管理系统(BMS)的结合是当前 智能电池管理 的前沿研究方向
人工智能·深度学习·transformer
悠哉悠哉愿意3 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码3 天前
嵌入式学习路线
学习
毛小茛3 天前
计算机系统概论——校验码
学习
babe小鑫3 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms3 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下3 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。3 天前
2026.2.25监控学习
学习