Transformer 中的 Decoder 机制

一文搞懂Transformer解码器(图文详解) 本系列文章致力于用最简单的语言讲解Transformer架构,帮助朋友们理解它的强大,本文是第七篇:Transformer解码器图文详解。 阅读详情

大家好,今天和各位分享一下 Transformer 中的 Decoder 部分涉及到的知识点:计算 self-attention 时用到的两种 mask。

本文是对前两篇文章的补充,强烈建议大家先看一下:

1.《Transformer代码复现》:https://blog.youkuaiyun.com/dgvv4/article/details/125491693

2.《Transformer中的Encoder机制》:https://blog.youkuaiyun.com/dgvv4/article/details/125507206


1. Decoder 的 self-attention 中的 mask

本节介绍的 mask 对应模型结构图中的位置:

如下图,decoder 的 self-attention 中使用的 mask 是一个下三角矩阵,当 decoder 预测第一个单词时,给它的输入是一个特殊字符 x1,当 decoder 预测第二个位置时,给它的输入是特殊字符 x1 和目标序列的第一个单词 x2

下面举一个例子:

encoder的输入:  i love you

decoder的输入:  /f 我 爱 你

此时的 decoder 是由4个词组成的向量,Mask 是一个 4*4 大小的矩阵

当 decoder 预测第一个单词 '我' 时, decoder 的输入是一个特殊字符 '/f',mask为[1,0,0,0]

当 decoder 预测第二个单词 '爱' 时, decoder 的输入是一个特殊字符 '/f' 和第一个单词 '我',mask为[1,1,0,0]

代码如下:


   
  1. import torch
  2. from torch.nn import functional as F
  3. # ------------------------------------------------------ #
  4. #(1)构建下三角形状的mask
  5. # ------------------------------------------------------ #
  6. # 目标序列中有两个句子,分别包含3、4个单词
  7. tgt_len = torch.Tensor([ 3, 4]).to(torch.int32)
  8. # 目标序列有效单词矩阵 shape=[3,3], shape=[4,4]
  9. tgt_matrix = [torch.ones(L, L) for L in tgt_len]
  10. # 对每个元素全为1句子矩阵构造一个下三角矩阵
  11. tri_matrix = [torch.tril(mat) for mat in tgt_matrix]
  12. # 第一个句子长度为3,生成3*3大小且下三角区域的元素权威1,其余全为0的矩阵
  13. print(tri_matrix) # 每个mask的shape=[seq_len,seq_len]
  14. # 构建有效单词的矩阵,通过padding将每个句子的矩阵大小调整成一样的
  15. new_tri_matrix = [] # 保存padding后mask矩阵
  16. for seq_len, matrix in zip(tgt_len, tri_matrix): # 遍历每个下三角矩阵mask
  17. matrix = F.pad(matrix, pad=( 0, max(tgt_len)-seq_len, 0, max(tgt_len)-seq_len)) # 在矩阵的下方和右侧padding成相同相撞
  18. matrix = torch.unsqueeze(matrix, dim= 0) # 维度扩充[seq_len,seq_len]==>[1,seq_len,seq_len]
  19. new_tri_matrix.append(matrix)
  20. # 将列表类型变成tensor, 其中值为0对应的元素代表需要mask掉
  21. valid_tri_matrix = torch.cat(new_tri_matrix, dim= 0)
  22. print( '有效下三角矩阵mask:', valid_tri_matrix) # shape=[2,4,4]
  23. # 将需要mask的元素用布尔类型表示,True代表需要mask
  24. invalid_tri_matrix = ( 1 - valid_tri_matrix).to(torch. bool)
  25. print( '布尔mask:', invalid_tri_matrix)
  26. # ------------------------------------------------------ #
  27. #(2)对decoder的输入张量做mask
  28. # ------------------------------------------------------ #
  29. # 随机初始化一个 Q @ K^T 的计算结果 [batch, tgt_seq_len, tgt_seq_len]
  30. score = torch.randn( 2, max(tgt_len), max(tgt_len))
  31. # 将mask中True元素对应score中的值变成非常小的值
  32. masked_score = score.masked_fill(invalid_tri_matrix, value=- 1e10)
  33. # 将mask后的结果经过softmax,得到注意力矩阵
  34. softmax_score = F.softmax(masked_score, dim=- 1)
  35. print( '原始输入:', score)
  36. print( 'mask后的输入:', masked_score)

然后构造一个 decoder 的输入 Q@K^T,它的 shape=[batch, seq_len, seq_len],如下面的第三个矩阵。

将输入张量 score 中与 mask 中True元素对应的位置变成一个非常小的数,如下面的第四个矩阵。


   
  1. # 有效下三角矩阵mask:
  2. tensor([[[ 1., 0., 0., 0.],
  3. [ 1., 1., 0., 0.],
  4. [ 1., 1., 1., 0.],
  5. [ 0., 0., 0., 0.]],
  6. [[ 1., 0., 0., 0.],
  7. [ 1., 1., 0., 0.],
  8. [ 1., 1., 1., 0.],
  9. [ 1., 1., 1., 1.]]])
  10. # 布尔mask:
  11. tensor([[[ False, True, True, True],
  12. [ False, False, True, True],
  13. [ False, False, False, True],
  14. [ True, True, True, True]],
  15. [[ False, True, True, True],
  16. [ False, False, True, True],
  17. [ False, False, False, True],
  18. [ False, False, False, False]]])
  19. # 原始输入scorce:
  20. tensor([[[ 0.5266, - 0.7873, - 0.2481, 0.5554],
  21. [- 1.3146, 0.1668, - 1.6488, - 0.5159],
  22. [- 0.1590, - 2.1458, 0.0217, 0.4044],
  23. [ 1.0169, 0.8640, - 0.9029, 0.5957]],
  24. [[- 0.6277, 0.0611, - 1.3732, - 0.6897],
  25. [- 1.3523, 0.6712, 0.0491, 2.2301],
  26. [ 0.4627, 0.1737, 1.0111, - 1.4099],
  27. [ 0.1994, 0.2538, 0.5689, - 0.2558]]])
  28. # mask后的输入:
  29. tensor([[[ 5.2655e-01, - 1.0000e+10, - 1.0000e+10, - 1.0000e+10],
  30. [- 1.3146e+00, 1.6676e-01, - 1.0000e+10, - 1.0000e+10],
  31. [- 1.5899e-01, - 2.1458e+00, 2.1674e-02, - 1.0000e+10],
  32. [- 1.0000e+10, - 1.0000e+10, - 1.0000e+10, - 1.0000e+10]],
  33. [[- 6.2770e-01, - 1.0000e+10, - 1.0000e+10, - 1.0000e+10],
  34. [- 1.3523e+00, 6.7119e-01, - 1.0000e+10, - 1.0000e+10],
  35. [ 4.6272e-01, 1.7366e-01, 1.0111e+00, - 1.0000e+10],
  36. [ 1.9943e-01, 2.5381e-01, 5.6886e-01, - 2.5576e-01]]])

2. Decoder 中特征序列和目标序列之间的 Mask

该部分的 mask 代码对应结构图中的区域如下。这部分的 mask 涉及到目标序列和特征序列,在计算 self-attention 时,是目标序列的 query 和特征序列的 key、value 做计算。其中 key 和 value 是 Encoder 的输出,query 是上一个 DecoderBlock 的输出。

首先分别构造一个特征序列和一个目标序列,特征序列中第一句话有2个单词,第二句话有4个单词;目标序列中的第一句话有3个单词,第二句话有5个单词。

接下来就需要把特征序列和目标序列的长度各自给统一起来,将特征序列的所有句子都填充成4个单词,目标序列的所有句子都填充成5个单词。有效单词区域的元素用 1 来表示,padding 的元素用 0 来表示。

代码如下:


   
  1. # Decoder部分的目标序列对特征序列的muti-head-attention中的mask
  2. # 目标序列和特征序列之间的长度不一样,需要将原序列中和目标序列中padding后的元素mask掉
  3. import torch
  4. from torch import nn
  5. from torch.nn import functional as F
  6. # ------------------------------------------------------ #
  7. #(1)构造序列
  8. # ------------------------------------------------------ #
  9. src_len = torch.Tensor([ 2, 4]).to(torch.int32) # 特征序列中有两个句子,分别包含2、4个单词
  10. tgt_len = torch.Tensor([ 3, 5]).to(torch.int32) # 目标序列中有两个句子,分别包含3、5个单词
  11. # 对序列编码,有效单词位置的元素为1
  12. valid_src_pos = [torch.ones(L) for L in src_len] # 特征序列 [tensor([1., 1.]), tensor([1., 1., 1., 1.])]
  13. valid_tgt_pos = [torch.ones(L) for L in tgt_len] # 目标序列 [tensor([1., 1., 1.]), tensor([1., 1., 1., 1., 1.])]
  14. # 在计算时需要保证特征序列的长度和目标序列的长度一致,因此将每句话的单词数padding成相同长度
  15. max_src_len = max(src_len) # 将特征序列的单词数统一成4个
  16. max_tgt_len = max(tgt_len) # 将目标序列的单词数统一成5个
  17. new_valid_pos = [] # 保存padding后的特征序列和目标序列
  18. for sent in valid_src_pos: # 遍历每个特征句子
  19. sent = F.pad(sent, pad=( 0, max_src_len - len(sent))) # 将每句话的长度填充到4
  20. sent = torch.unsqueeze(sent, dim= 0) # 维度扩充 [max_src_len]==>[1, max_src_len]
  21. new_valid_pos.append(sent)
  22. for sent in valid_tgt_pos: # 遍历每个目标句子
  23. sent = F.pad(sent, pad=( 0, max_tgt_len - len(sent))) # 将每句话的长度填充到5
  24. sent = torch.unsqueeze(sent, dim= 0) # 维度扩充 [max_tgt_len]==>[1, max_tgt_len]
  25. new_valid_pos.append(sent)
  26. # 前两个句子属于特征序列,后两个句子属于目标序列。将列表类型在axis=0维度上堆叠
  27. valid_src_pos = torch.cat(new_valid_pos[: 2], dim= 0) # tensor([[1., 1., 0., 0.], [1., 1., 1., 1.]])
  28. valid_tgt_pos = torch.cat(new_valid_pos[ 2:], dim= 0) # tensor([[1., 1., 1., 0., 0.], [1., 1., 1., 1., 1.]])
  29. # ------------------------------------------------------ #
  30. #(2)构造mask
  31. # Q @ K^T 的shape为 [batch, tgt_seq_len, src_seq_len]
  32. # 因此mask的shape也为 [batch, tgt_seq_len, src_seq_len]
  33. # ------------------------------------------------------ #
  34. # 有效特征序列[2,4]==>[2,4,1], 有效目标序列[2,5]==>[2,5,1]
  35. valid_src_pos = torch.unsqueeze(valid_src_pos, dim=- 1) # 值为1的元素代表有效单词,值为0的元素代表padding后的区域
  36. valid_tgt_pos = torch.unsqueeze(valid_tgt_pos, dim=- 1)
  37. # 计算目标序列对特征序列有效性关系的矩阵,元素为0代表是padding后的单词
  38. # [b, tgt_seq_len, 1] @ [b, 1, src_seq_len] = [b, tgt_seq_len, src_seq_len]
  39. valid_cross_pos_matrix = torch.bmm(valid_tgt_pos, valid_src_pos.transpose( 1, 2))
  40. print( '有效关系矩阵:', valid_cross_pos_matrix) # torch.Size([2, 5, 4])
  41. # 得到无效矩阵,1代表需要mask的元素,变成布尔类型,True代表需要mask的元素
  42. invalid_cross_pos_matrix = 1 - valid_cross_pos_matrix
  43. invalid_cross_pos_matrix = invalid_cross_pos_matrix.to(torch. bool)
  44. print( 'mask矩阵:', invalid_cross_pos_matrix) # torch.Size([2, 5, 4])
  45. # ------------------------------------------------------ #
  46. #(3)对输入张量做mask
  47. # ------------------------------------------------------ #
  48. # 随机初始化一个 Q @ K^T 的计算结果 [batch, tgt_seq_len, src_seq_len]
  49. score = torch.randn( 2, 5, 4)
  50. # mask中True元素对应的score中的元素值变成一个非常小的数
  51. masked_score = torch.masked_fill(score, mask=invalid_cross_pos_matrix, value=- 1e10)
  52. print( '原输入:', score)
  53. print( '打上mask后的输入:', masked_score)

接下来构造 mask,它的 shape 是和 Q@K^T 计算后的矩阵的 shape 相同,即 [batch, tgt_seq_len, src_seq_len],其中 tgt_seq_len 代表目标序列中每个句子包含多少个单词,src_seq_len 代表特征序列中每个句子包含多少个单词。

下面的第一个矩阵代表对目标序列和特征序列计算关系矩阵,元素为1代表有效单词,0 代表是经过padding 后得到的单词。

之后计算一个无效区域矩阵,将所有 padding 得到的单词区域像素值变成 True,代表需要将这个元素 mask 掉。如下面的第二个矩阵。

然后构造一个和 self-attention 中 Q@K^T 计算结果 shape 相同的输入 source,如下面的第三个矩阵。

然后对输入 source 添加 mask,将 mask 中元素 True 对应的 source 元素变成一个非常小的值,这样在梯度反向传播过程中 padding 的元素梯度更新非常小,降低 padding 区域对有效单词区域的影响。如下面的第四个矩阵。


   
  1. # 有效关系矩阵:
  2. tensor([[[ 1., 1., 0., 0.],
  3. [ 1., 1., 0., 0.],
  4. [ 1., 1., 0., 0.],
  5. [ 0., 0., 0., 0.],
  6. [ 0., 0., 0., 0.]],
  7. [[ 1., 1., 1., 1.],
  8. [ 1., 1., 1., 1.],
  9. [ 1., 1., 1., 1.],
  10. [ 1., 1., 1., 1.],
  11. [ 1., 1., 1., 1.]]])
  12. # mask矩阵:
  13. tensor([[[ False, False, True, True],
  14. [ False, False, True, True],
  15. [ False, False, True, True],
  16. [ True, True, True, True],
  17. [ True, True, True, True]],
  18. [[ False, False, False, False],
  19. [ False, False, False, False],
  20. [ False, False, False, False],
  21. [ False, False, False, False],
  22. [ False, False, False, False]]])
  23. # 原输入:
  24. tensor([[[ 1.4030, - 0.0176, - 2.9678, - 0.5551],
  25. [ 2.6138, - 0.8088, 0.6641, - 0.0128],
  26. [- 0.0370, - 0.3206, - 0.6634, 0.3626],
  27. [ 1.1978, 1.9831, - 0.3541, - 0.8766],
  28. [ 0.0655, 0.4267, - 0.3459, 1.8217]],
  29. [[- 0.2351, - 1.3515, 0.4783, - 0.9379],
  30. [ 0.2302, - 1.5482, - 0.0825, 1.0711],
  31. [- 0.3793, - 0.9595, 0.9457, - 1.5746],
  32. [ 0.3685, 1.1116, - 2.3528, - 0.3916],
  33. [- 1.2416, 0.9410, - 0.5407, 0.8035]]])
  34. # 打上mask后的输入:
  35. tensor([[[ 1.4030e+00, - 1.7624e-02, - 1.0000e+10, - 1.0000e+10],
  36. [ 2.6138e+00, - 8.0884e-01, - 1.0000e+10, - 1.0000e+10],
  37. [- 3.7038e-02, - 3.2057e-01, - 1.0000e+10, - 1.0000e+10],
  38. [- 1.0000e+10, - 1.0000e+10, - 1.0000e+10, - 1.0000e+10],
  39. [- 1.0000e+10, - 1.0000e+10, - 1.0000e+10, - 1.0000e+10]],
  40. [[- 2.3507e-01, - 1.3515e+00, 4.7825e-01, - 9.3789e-01],
  41. [ 2.3023e-01, - 1.5482e+00, - 8.2474e-02, 1.0711e+00],
  42. [- 3.7931e-01, - 9.5949e-01, 9.4568e-01, - 1.5746e+00],
  43. [ 3.6855e-01, 1.1116e+00, - 2.3528e+00, - 3.9157e-01],
  44. [- 1.2416e+00, 9.4099e-01, - 5.4066e-01, 8.0347e-01]]])
Transformer中的encoder和decoder在训练和推理过程中究竟是如何工作的 Transformer中的encoder和decoder在训练和推理过程中究竟是如何工作的苦苦冲浪,找不到答案Transformer结构(随便冲浪均可查到)Transformer推理过程Transformer训练过程 苦苦冲浪,找不到答案 之前学习transformer的时候就不是很理解encoder和decoder在训练和推理过程中是如何工作的,四处查询也没有讲的很详细,很多文章和视频都是encoder讲很多,到了decoder就一带而过了,后来在b站看了大佬讲解的transformer源码,终于明白了e 阅读详情

相关推荐

李宏毅 Transformer(Decoder部分)

Transformer P2_Decoder Decoder – Autoregressive (AT) Autoregressive (AT )😗 利用前期若干时刻的随机变量的线性组合来描述以后某时刻随机变量的线性回归模型。即已知N个数据,可由模型推出第N点前面或后面的数据(设推出P点)

missgrass的博客 5092

大白话Transformer结构-从此爱上Transformer

以通俗的语言讲解Transformer的整体流程和思想,让你了解Transformer的来龙去脉。资料:

【深度解析】Transformer中Encoder与Decoder的交互机制及其在NLP任务中的应用

本文深度解析了Transformer模型中Encoder与Decoder的交互机制,重点探讨了注意力机制在两者协作中的关键作用。通过机器翻译、文本摘要等NLP任务的实际案例,展示了这种交互机制如何动态捕捉输入输出的关联,提升模型性能。文章还分享了注意力头专业化、交互效率优化等高级技巧,为开发者提供实用参考。

weixin_29250403的博客 610

Transformer Decoder

本文主要讲解Transformer中的Decoder部分,后续其他部分会逐渐补充 首先,我们先定义几个常用的变量(以翻译为例): emb_dim:表示词嵌入的维度 input_length:表示输入单词的个数 target_length:表示翻译出单词的个数 + 1,为什么会加1会在后面详细说明 vocab_size:表示所有单词的总个数,其实就是词库的意思 本文主要从以下三个方面进行介绍: 1.transformer主要解决的的问题 2.信息在transformer中的流动 3.Deco

weixin_42418688的博客 1万+

深入解析Transformer的Decoder:训练与推理中的输入输出机制

本文深入解析了Transformer模型中Decoder的训练与推理机制,详细介绍了其自回归生成过程、Teacher Forcing技术以及注意力掩码的应用。通过对比不同解码策略的优缺点,帮助开发者更好地理解Decoder在文本生成、机器翻译等任务中的核心作用,提升模型性能与生成质量。

weixin_29084111的博客 324

Transformer Decoder 中的掩码多头自注意力机制:防止未来信息泄露的关键

掩码多头自注意力机制中的掩码主要用于防止模型在生成当前词时看到未来的词,确保生成过程的因果性。通过将未来位置的注意力权重设置为负无穷大,掩码确保模型只关注当前词及之前的词。此外,掩码还可以用于处理变长序列,屏蔽填充部分。

weixin_41544125的博客 1383

对于Transformer的Mask机制的再思考--Decoder部分

前言 之前我曾经在一篇博客中有介绍关于Transformer模型的Encoder部分的mask,在这篇文章中,我打算将Decoder部分的mask机制也补充完整。OK,那么我们进入正题。 Decoder结构 首先我们先来看一下Decoder的结构,下面这张图取自google在2017年发的著名文章:Attention Is All You Need,也就是最初提出Transformer结构的文章。 为了专注于Decoder的部分,关于原图中Encoder的部分我并没有截取。如果我们仔细观察D

weixin_44607838的博客 5339

Transformer模型结构分析:Encoder、Decoder以及注意力机制详解

Transformer模型由论文[1]提出,其基本思想是使用注意力机制代替循环神经网络(RNN)或卷积神经网络(CNN),是一种基于序列到序列(Seq2seq)的机器翻译、文本摘要、对话系统等任务的成功范例。Transformer模型使用全连接层代替RNN和CNN的门控结构,并用多头注意力机制进行了改进,能够在捕捉全局上下文信息的同时,还保持输入输出序列之间的独立性。本文将从原理上和代码实现两个角度出发,详细解析Transformer模型的编码器、解码器及注意力机制的设计原理和具体操作步骤。

AI天才研究院 2581

Transformer架构中Encoder与Decoder的核心差异与协作机制

自注意力机制是Transformer模型的核心技术,通过计算序列元素间的关联权重实现上下文建模。其工程价值体现在并行计算能力和长距离依赖捕捉上,广泛应用于机器翻译、文本生成等序列转换任务。Transformer采用Encoder-Decoder双模块架构,其中Encoder通过多头自注意力实现双向编码,Decoder则结合掩码注意力和跨模态注意力完成自回归生成。在BERT、GPT等预训练模型中,这种分工协作模式展现出强大的特征提取和序列生成能力。关键技术实现包含位置编码、残差连接等设计,有效解决了传统RNN

weixin_30765505的博客 391

[nlp] transformer中的mask机制(encoder:mask pad=inf,decoder:mask下三角矩阵为true)

对于Transformer中的mask理解_weixin_44729115的博客-优快云博客 transformer中的mask操作,可以分成encoder端和decoder端 Enocoder中的mask mask的size 是 batch_size*seq_length 对于小于最大长度的句子进行补0操作,对于大于最大长度的句子进行截断操作。 将mask中的0变成负无穷,与计算的注意力矩阵相加,原来有单词的注意力不变,没有单词的位置变换成负无穷,进行softmax运算时exp()的结果变为0。

心宝的博客 1516

数据标注的下一代SOP,可能不是Word,而是一段Prompt

再给几个反例:“这个只是正常纹理,不算。真正用于数据生产的Prompt,可能至少包含:任务定义、正例、反例、边界案例、优先级、输出格式、验收逻辑。一个项目100个人,如果100个人对这句话有100种理解,最后返工的就不是一个框,而可能是几十万帧数据。一个项目启动以后,项目经理先研究SOP,培训组长,组长再培训标注员,最后几百个人按照同一套规则干活。实际上一个成熟的项目经理,最重要的能力之一,就是:把客户的业务语言翻译成生产规则。真正让项目难交付的,从来不是80%的普通数据,而是那20%的长尾数据。

AI数据标注猿 296

【Transformer】Decoder 的自回归生成机制与并行训练策略

本文深入解析了Transformer Decoder的自回归生成机制与并行训练策略,详细介绍了掩码自注意力机制和交叉注意力的工作原理,以及Teacher Forcing在训练阶段的并行化优势。同时探讨了推理阶段的串行生成挑战及优化技巧,如束搜索和长度惩罚,并提供了实际工程中的经验之谈,帮助开发者高效应用Decoder技术。

garlic的博客 778

手把手教你使用YOLOv11模型,训练自己数据集,百分百成功(无废话)

YOLOV11百分百成功训练自己的数据集并进行图像、视频流脚本预测

chenhenGzzz的博客 1952

[博学谷学习记录] 超强总结,用心分享|人工智能深度学习Transformer中Decoder端机制总结分享

ransformer中Decoder端机制总结分享

weixin_46515036的博客 521

IEEE Access投稿全流程解析:从初次提交到最终接收的完整指南

本文详细解析了IEEE Access期刊从初次投稿到最终接收的全流程,包括ORCID注册、论文投稿七步法、回稿再投流程及最终版提交等关键步骤。特别强调了4-6周快速同行评审的特点,为研究者提供了一份实用的投稿指南,帮助高效完成IEEE Access期刊投稿。

weixin_29273849的博客 915

从UE4到Unity:双叶高光技术在角色皮肤渲染中的移植全流程

本文详细解析了将UE4中的双叶高光技术移植到Unity引擎的全流程。该技术通过模拟皮肤油脂层和真皮层的不同反射特性,能显著提升角色皮肤渲染的真实感。文章从核心原理、贴图资产处理、Shader代码重构到参数调校,提供了完整的跨引擎移植实战指南,帮助开发者实现高质量的皮肤质感还原。

alice7model的博客 478

8.1 LLM 原理:Transformer、注意力机制、Encoder/Decoder

文章摘要: 本文用直观类比解析Transformer架构的核心原理,避开复杂数学公式。传统RNN因顺序处理和长程依赖问题效率低下,Transformer通过自注意力机制实现全局并行计算,让每个词动态关注其他词(如通过Q/K/V向量建模关系)。多头注意力进一步捕捉多维度语义,位置编码解决词序问题(RoPE支持长文本)。Encoder(BERT)擅长理解任务,Decoder(GPT)主导生成领域,后者因预训练简单和生成能力成为主流。尽管Transformer存在O(n²)计算复杂度等问题,其设计思想仍是现代大模

慢慢 358

储能电池管理系统介绍(一)

介绍储能BMS的架构以及各模块功能

manjixingkong1234的专栏 1916

【技术解析】Transformer架构中Encoder与Decoder的“对话”机制:从注意力连接到信息流

本文深入解析了Transformer架构中Encoder与Decoder的核心交互机制。重点剖析了Encoder-Decoder Attention层如何作为动态“翻译官”,使解码器在生成每个词时都能精准检索并融合编码器输出的全部上下文信息,从而实现从注意力连接到信息流的有效“对话”。这一机制是Transformer在机器翻译、文本摘要等序列任务上取得卓越性能的关键。

plant的博客 165

【即插即用模块】卷积篇 | CVPR 2025 | LSConv:大核捕全局,小核提速度,替换 3×3 卷积/自注意力,精度效率双飙升

文章摘要: LSConv是一种新型卷积模块,采用"大核感知+小核聚合"策略,在轻量级视觉任务中表现出色。该模块由两部分组成:7×7深度可分离卷积(LKP)捕捉全局信息,动态3×3卷积(SKA)实现高效特征聚合。相比传统卷积和自注意力机制,LSConv在降低计算量的同时提升了精度,尤其适合高分辨率视觉任务。实验表明,在轻量化模型中用LSConv替代3×3卷积或自注意力,可显著减少计算量并提高准确率。模块支持即插即用,提供Triton优化实现,可直接集成到现有卷积或Transformer架构

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1119

EndNote导入文献出现带有大括号{}乱码的解决办法

进入word中的Endnote工具栏——Bibliography Preferences(位于Bibliography区块的右下角),就是那个输入杂志名的小三角形,在Temporary citation delimiters处修改变量的默认符号。将默认的大括号{}修改为文章中不回使用到的符号。原因:因为Endnote插入的参考文献在Word中的代码就是以大括号隔开的,当文章中出现了该符号,endnote就会自动比对Library中的书目,而此时endnote出现错误。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 4万+

【图文详解】Transformer架构详细解析:多头自注意力机制、qkv计算过程、encoder架构、decoder架构以及mask的意义

【图文详解】Transformer架构详细解析:多头自注意力机制、qkv计算过程、encoder架构、decoder架构以及mask的意义

独立思考,明辨是非 1975

华为od 面试八股文_前端_02_含答案

华为od 面试八股文_前端_02_含答案

MISAYAONE的博客 1998

【深度学习】(4) Transformer 中的 Decoder 机制,附Pytorch完整代码

大家好,今天和各位分享一下 Transformer 中的 Decoder 部分涉及到的知识点:计算 self-attention 时用到的两种 mask。本文是对前两篇文章的补充,强烈建议大家先看一下:1.《Transformer代码复现》:https://blog.youkuaiyun.com/dgvv4/article/details/1254916932.《Transformer中的Encoder机制》:https://blog.youkuaiyun.com/dgvv4/article/details/125507206本节

博观而约取,厚积而薄发 4926

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Encoder-Decoder、Seq2Seq、 以及Transformer之间的关系

结论写在前面: Encoder-Decoder 是一种架构,范围非常广泛,只要是用一个编码结构一个解码结构的模型都是Encoder-Decoder 架构 seq2seq 和 Encoder-Decoder基本相同,只不过后者是一种抽象概念,前者是具体的模型,seq2seq可以看做是一种结构,有很多这种结构的模型。seq2seq有多种类型,N VS N,N vs 1, 1vs N, N vs M。最后一种应用最广。同时还有基于RNN的seq2seq,基于CNN的seq2seq,基于LSTM的seq2seq

咖乐部 6802

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 目标检测算法发展综述
下一篇: Transformer 中的 Encoder 机制
onnx
博客等级 码龄5年 1万+粉丝 416原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值