本文介绍: 在介绍之前,我们先来说一下。

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

decoder结构

在这里插入图片描述

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

这里我们详细说一下多头掩码注意力模块,其他的和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预测到结束标志。

原文地址:https://blog.csdn.net/weixin_42596778/article/details/134619316

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_13417.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注