Transformer——decoder

上一篇文章,我们介绍了encoder,这篇文章我们将要介绍decoder
Transformer-encoder

decoder结构:

在这里插入图片描述

如果看过上一篇文章的同学,肯定对decoder的结构不陌生,从上面框中可以明显的看出:

  • 每个Decoder Block有两个Multi-Head Attention层

  • 第一个Multi-Head Attention层采用了Masked操作,所以叫多头掩码注意力模块

  • 第二个Multi-Head Attention就是和encoder的一样,不过他的K、V矩阵输入源来自Encoder的输出编码矩阵,而Q矩阵是由多头掩码注意力层,经过Add &Norm层之后的输出计算来的

  • Add &Norm,和前面encoder的一样

  • feed forward,它包含一个全连接层,对输入特征进行非线性变换,并产生输出。在训练过程中,Feed Forward会根据损失函数的梯度进行参数更新,以优化模型的性能。他的输入层参数和Embedding的维度一样。

  • Linear,是一种简单的神经网络组件,通常用于处理线性可分的问题。它包含一个全连接层和一个激活函数,对输入进行线性变换,并产生输出。与Feed Forward不同,Linear在训练过程中不会根据损失函数的梯度进行参数更新,因为它的输出取决于输入的线性组合。Linear的长度,实际上就是你词向量的种类数量。

  • softMax,把linear的输出做分类概率运算,算出每种词向量的概率。

这里我们详细说一下多头掩码注意力模块,其他的和encoder中都一样,就不详细介绍了。

Masked Multi-Head Attention

在下面第9点介绍多头掩码注意力
在介绍之前,我们先来说一下transformer的训练过程,网上搜了很多,没有找到谁具体讲过,所以我就借助“文心一言”来进行了询问,大概了解了这个过程,但是不能保证正确,如果有知道同学看到了,欢迎给我留言。

  1. 先有encoder的输入“你好吗”(也就是问题)和decoder的输入“好的很”(也就是答案)。

  2. 把encoder的输入“你好吗”输入encoder中,把“你好吗“转化为Embedding,然后对Embedding添加position信息,decoder也同理

  3. 把添加了pos的Em,做成6组QKV,那么总共就是18个QKV,然后每组都送入一个注意力模块,总共有6组注意力模块,这6组就称为多头注意力模块,然后把这6组的输出经过一个conact和Linear(具体可以看上一篇文章)合并后输出,这个输出就是注意力矩阵。

  4. 把注意力矩阵经过残差链接和归一化后,放入一个Feed Forward中后再使用一次残差链接和归一化,encoder的输出就有了。

  5. 接下来我们看decoder的输入,在transformer的训练中,我们使用的是Teacher Forcing方法,我们是告诉了transformer正确的答案是什么的,也就是“好得很”。

  6. 首先decoder会把encoder的输入做成QK,然后放入一个多头注意力模块中,接下来一直到Linear的操作,和encoder的一样。

  7. decoder中的Linear输入的方法和encoder的一样,可以参考上篇文章最后,不过linear的输出,是把所有的向量数据库中的数据给输出出来,最后是使用了softmax做分类器。从下图可以看出,Linear的输出,是和你的词向量类别有关假设你的词向量类别有1w个,那么这里就会输出1w的类别,如下图在这里插入图片描述然后使用softMax对着些输出做概率计算,就可以算出概率最大的词向量是哪个,softMax的计算,可以参考我的BP神经网络,大概方式类似于下面在这里插入图片描述

  8. 假如现在经过softMax的运算后,最大概率的字是"好",那么就把这个字和标准答案中的"好得很"对比一下,如果不是"好"字,那么就使用梯度下降法,反向去更新两个Feed forward和所有的QKV,更新完后回到decoder输入。

  9. 接下来把标准答案中的“好”直接输入到decoder的输入,下面是带有掩码的多头注意力在这里插入图片描述
    经过EM+pos,还有QKV后,我们把他输入了多头掩码注意力模块,这里为什么要加个掩码呢?掩码又是什么呢?我们看下面这张图在这里插入图片描述
    我们需要把"好"字加入到”你好吗”的后面,但是我们又不能让多头注意到“好”字后面“得很”,所以我们就需要把后面的字给遮起来,这个就是掩码。经过softMax的变化,可以看到下图在这里插入图片描述
    比如“好”字,后面的“得很”,都是0,说明好字只和前面的内容有关系,则接下来就是“好”字的[0.37,0.62,0,0]作为多头掩码的输出,也可以抽象的看成,是把“好”拼在了“你好吗”的后面,但是其实是“你好吗”作为QK,"好"作为V。

  10. 接下来就和上面的3一样,一直到softMax做出预测,如果是预测的不是“尼”,就反向更新梯度下降,如果是“尼”,则把“好尼”送入多头掩码中,然后把“好尼”拼在“你好吗”的后面。一直循环到softMax预测到结束标志。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
引用和引用[2]提到了Transformer模型,它是一种在自然语言处理(NLP)领域中非常流行的特征处理器。与传统的CNN和RNN神经网络不同,Transformer完全由Attention机制和前馈神经网络组成。Transformer最早起源于Google的一篇论文,并且Google还开源了一个基于TensorFlow的第三方库供人们使用。 Transformer的整体架构被称为Seq2Seq模型,其中使用了一种称为"self attention"的机制。"self attention"可以理解为模型对输入序列中的每个元素进行关注和权重分配,以便更好地捕捉输入之间的关系。相比之下,传统的RNN在处理序列信息时不容易进行并行计算。 在Transformer中,输入序列首先经过一个Encoder,然后再经过一个Decoder。Encoder负责将输入序列转换为一系列的隐藏表示,而Decoder则根据Encoder的输出和之前的预测结果来生成输出序列。在Decoder中,使用了一种称为Masked Multi-Head Attention的Attention模块,这是因为Decoder的输入过程是一个逐步进行的过程,必须先有一部分输入才能得到后面的输出。 总之,Transformer是一种使用Attention机制和前馈神经网络构成的特征处理器,用于处理序列数据,尤其在NLP领域中广泛应用。它的设计使得模型能够更好地处理序列之间的关系,并且具有较高的并行计算能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [图解Transformer](https://download.csdn.net/download/weixin_38745434/15448408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [变形金刚——Transformer入门刨析详解](https://blog.csdn.net/m0_67505927/article/details/123209347)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Transformer概述](https://blog.csdn.net/weixin_42756682/article/details/120923453)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛像话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值