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

【深度学习】计算机视觉(18)——从应用到设计

文章目录

  • 1 不同的注意力机制
    • 1.1 自注意力
    • 1.2 多头注意力
    • 1.3 交叉注意力
      • 1.3.1 基础
      • 1.3.2 进阶

1 不同的注意力机制

在学习的过程中,发现有很多计算注意力的方法,例如行/列注意力、交叉注意力等,如果对注意力机制本身不是特别实现,很难进行自己的网络设计。

1.1 自注意力

在这里插入图片描述

又拿出这张快被我盘包浆的图。假设输入序列的维度为(batch_size, seq_len, d_model),通过线性变换矩阵 W Q , W K , W V ∈ R d m o d e l × d m o d e l W^Q, W^K, W^V ∈ \mathbb{R}^{d_{model}×d_{model}} WQ,WK,WVRdmodel×dmodel生成 Q Q Q/ K K K/ V V V,形状为(batch_size, seq_len, d_model)。注意到, Q ⋅ K T Q·K^T QKT再通过Softmax操作得到了Attention Map,是注意力权重矩阵(后续用 A A A表示)。通过之前的学习可以知道,注意力权重矩阵A的格式为二维矩阵,形状为(batch_size, n,n),其中 n n n是输入序列的长度(即token数量)。假设输入序列长度为3,每个token的长度为4:
在这里插入图片描述
那么 A A A中红色格子表示第二个token与第三个token的关联,即 A [ i ] [ j ] A[i][j] A[i][j]每个元素表示输入序列中第 i i i个序列对第 j j j个序列的注意力权重。这里要注意,是否 A A A是一个以对角线为对称轴的对称矩阵呢?虽然 Q ⋅ K T Q·K^T QKT是对称的,但是经过Softmax后,每一行都会转换为概率分布,这样“位置3对位置2的影响”与“位置2对位置3的影响”就不同了。
接下来要计算 A ⋅ V A·V AV,表示每个位置综合其他位置的加权求和。
在这里插入图片描述

1.2 多头注意力

若使用多头注意力,只是列的长度发生改变,被均分成头的数量。假设输入序列的维度为(batch_size, seq_len, d_model),通过线性变换矩阵 W Q , W K , W V ∈ R d m o d e l × d k W^Q, W^K, W^V ∈ \mathbb{R}^{d_{model}×d_{k}} WQ,WK,WVRdmodel×dk生成 Q Q Q/ K K K/ V V V,形状为(batch_size, seq_len, d_k),其中 d k = d m o d e l h d_k=\frac{d_model}{h} dk=hdmodel(h为多头注意力头数)。

在多头注意力(Multi-Head Attention)中, A A A的格式会扩展为四维张量:(batch_size, num_heads, n, n),batch_size表示样本批次大小,num_heads表示注意力头数,n表示序列长度。

1.3 交叉注意力

1.3.1 基础

标准的自注意力机制中, Q Q Q/ K K K/ V V V通常由同一个输入矩阵 x x x通过不同的线性变换生成。自注意力机制关注于单一输入序列内部元素之间的关系,通过同源输入捕捉序列内部依赖关系。

交叉注意力(Cross-Attention)则关注于两个不同输入序列之间的相互作用。 Q Q Q K K K可以分布来自不同的输入序列,常见于编码器-解码器架构。

在Transformer模型中,CrossAttention通常用于编码器和解码器之间的交互。编码器负责将输入序列编码为一系列特征向量,而解码器则根据这些特征向量逐步生成输出序列。为了使解码器能够更有效地利用编码器的信息,CrossAttention层被引入其中。解码器的每个位置会生成一个查询向量(query),该向量用于在编码器的所有位置进行注意力权重计算。编码器的每个位置则生成一组键向量(keys)和值向量(values)。通过计算查询向量与键向量的相似度,并经过softmax函数归一化后,得到注意力权重。最后,注意力权重与值向量相乘并求和,得到编码器调整后的输出,供解码器使用。

Q Q Q是来自解码器的当前状态(例如翻译任务中的目标语言词, K K K V V V是来自编码器的输出(例如源语言的特征)。
Softmax仅要求 Q Q Q K K K的维度匹配,并不限制来源。

假设 Q Q Q的输入形状为(batch_size, seq_len_q, d_model),seq_len_q为目标序列长度; K K K/ V V V的输入形状为(batch_size, seq_len_kv, d_model),seq_len_kv为源序列长度,输出的形状为(batch_size, h, seq_len_q, seq_len_kv)

最终输出的注意力权重矩阵 A A A作用于 V V V矩阵,生成融合跨序列信息的输出 O u t p u t = A ⋅ V Output=A·V Output=AV

Q Q Q由解码器的自注意力层输出生成,解码器在生成目标序列的每一步时,会将已生成的部分序列通过掩码自注意力层处理,生成当前步的上下文表示,这一表示作为 Q Q Q的输入。

以机器翻译为例,将“我喜欢狼”由中文翻译成英文。每次生成一个词,假设当前已经生成了"I"、“LIKE”,接下来要进行后面的词的翻译,如下图。 x 1 ′ x1' x1是已经生成的上下文表示,由解码器的自注意力层输出。 x 2 ′ x2' x2是源序列“我喜欢狼”经编码器输出的特征向量。
在这里插入图片描述
图示红色问号表示待生成的词语,当生成第三个目标词时,原矩阵新增一行,该行表示问号词对源序列所有三个词的关注权重,而该行的初始值是基于已生成的词的嵌入向量和位置编码生成。对于A,表示接下来要生成的词与源序列的相关度,比如红色阴影部分表示问号词与“我”的语义依赖强度。

​强对齐​​:目标词与源词存在直接翻译关系(如"WOLVES"→"狼"),对应权重接近1。
​​弱对齐​​:目标词依赖源序列的上下文(如生成冠词 “THE” 时可能关注源序列的主语位置)。
​​零权重​​:源词与当前目标词无关(如生成英文标点时,权重集中于源序列的句尾词)。

1.3.2 进阶

编码器的 K K K V V V在推理时是固定不变的,但解码器的 Q Q Q随着目标序列生成动态扩展。例如,生成“WOLVES”时, Q 3 Q_3 Q3需与编码器的 K K K计算相似度,而历史 Q Q Q和编码器的 K K K可能已经被缓存,然后只需要计算 ∑ j = 0 4 A 3 ⋅ V j \sum_{j=0}^{4}A_3·V_j j=04A3Vj即可。

训练阶段,不需要考虑生成词的先后顺序,模型并行处理整个目标序列而非逐词生成,此时所有目标词的 Q Q Q必须同时计算,以利用GPU的并行计算能力加速训练。同时,需要通过反向传播更新所有Q的权重矩阵 W Q W_Q WQ,这要求通过计算完整的 Q Q Q矩阵计算所有注意力权重 A A A,才能正确更新权重矩阵 W Q W_Q WQ,如果仅计算 Q 3 ⋅ K T Q_3·K^T Q3KT,将导致 W Q W_Q WQ的梯度无法涵盖历史位置的语义关联。

每个注意力头的 W Q W_Q WQ矩阵是固定维度的(d_model×d_k),将每行向量从原来指定的特征向量长度转换为分多头之后的特征向量长度,无论目标序列长度如何,所有 Q Q Q向量均通过同一组 W Q W_Q WQ进行投影。这种设计使得模型能够处理任意长度的目标序列,但要求所有 Q Q Q的投影逻辑一致。

解码器隐状态 H i H_i Hi指的是解码器在第 i i i步生成的动态时序表示,包含目标序列的生成进度(如已生成的词数 i i i)、上下文语义、目标序列内部依赖,计算公式为 s i = g ( s i − 1 , y i − 1 , c ) s_i=g(s_{i-1}, y_{i-1}, c) si=g(si1,yi1,c),其中 g g g是解码器的更新函数, c c c是编码器的上下文向量。


参考来源:
AIGC
深入理解CrossAttention:交叉注意力机制的奥秘
【深度学习】Cross-Attention(交叉注意力)机制详解与应用

相关文章:

  • 【大模型MCP协议】MCP官方文档(Model Context Protocol)一、开始——1. 介绍
  • Java—— 集合 Set
  • 【Spark】使用Spark集群搭建-Standalone
  • 在Web应用中集成Google AI NLP服务的完整指南:从Dialogflow配置到高并发优化
  • FFmpeg 项目中的三大核心工具详解
  • 企业管理软件:数字化转型的核心引擎
  • spdlog日志器(logger)的创建方法大全
  • 从0到1:Python机器学习实战全攻略(8/10)
  • 03.Golang 切片(slice)源码分析(二、append实现)
  • 循环语句:for、range -《Go语言实战指南》
  • 【layout组件 与 路由镶嵌】vue3 后台管理系统
  • uniapp(微信小程序)>关于父子组件的样式传递问题(自定义组件样式穿透)
  • 涨薪技术|0到1学会性能测试第58课-垃圾回收器
  • 【Pandas】pandas DataFrame cummax
  • 【LeeCode】1.两数之和
  • 读取.ini后缀类型的马达配置文件并进行赋值
  • 【操作系统】零拷贝技术
  • LearnOpenGL02:绘制三角形和矩形
  • 【办公类-99-06】20250512用Python制作PPT的GIF照片动图(统一图片大小、自定义不同切换秒数,以蝴蝶为例)
  • 家具制造行业的现状 质检LIMS如何赋能家具制造企业质检升级
  • 高波︱忆陈昊:在中年之前离去
  • 欧阳娜娜担任江西吉安文化旅游大使
  • 美国长滩港货运量因关税暴跌三成,港口负责人:货架要空了
  • 图集︱“中国排面”威武亮相
  • 逆境之上,万物生长
  • 71岁导演詹姆斯・弗雷病逝,曾执导《纸牌屋》、麦当娜MV