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的训练过程,网上搜了很多,没有找到谁具体讲过,所以我就借助“文心一言”来进行了询问,大概了解了这个过程,但是不能保证正确,如果有知道同学看到了,欢迎给我留言。
-
先有encoder的输入“你好吗”(也就是问题)和decoder的输入“好的很”(也就是答案)。
-
把encoder的输入“你好吗”输入encoder中,把“你好吗“转化为Embedding,然后对Embedding添加position信息,decoder也同理。
-
把添加了pos的Em,做成6组QKV,那么总共就是18个QKV,然后每组都送入一个注意力模块,总共有6组注意力模块,这6组就称为多头注意力模块,然后把这6组的输出经过一个conact和Linear(具体可以看上一篇文章)合并后输出,这个输出就是注意力矩阵。
-
把注意力矩阵经过残差链接和归一化后,放入一个Feed Forward中后再使用一次残差链接和归一化,encoder的输出就有了。
-
接下来我们看decoder的输入,在transformer的训练中,我们使用的是Teacher Forcing方法,我们是告诉了transformer正确的答案是什么的,也就是“好得很”。
-
首先decoder会把encoder的输入做成QK,然后放入一个多头注意力模块中,接下来一直到Linear的操作,和encoder的一样。
-
decoder中的Linear输入的方法和encoder的一样,可以参考上篇文章最后,不过linear的输出,最后是使用了softmax做分类器。从下图可以看出,Linear的输出,是和你的词向量类别有关,假设你的词向量类别有1w个,那么这里就会输出1w的类别,如下图
然后使用softMax对着些输出做概率计算,就可以算出概率最大的词向量是哪个,softMax的计算,可以参考我的BP神经网络,大概方式类似于下面
-
假如现在经过softMax的运算后,最大概率的字是"好",那么就把这个字和标准答案中的"好得很"对比一下,如果不是"好"字,那么就使用梯度下降法,反向去更新两个Feed forward和所有的QKV,更新完后回到decoder输入。
-
接下来把标准答案中的“好”直接输入到decoder的输入,下面是带有掩码的多头注意力

经过EM+pos,还有QKV后,我们把他输入了多头掩码注意力模块,这里为什么要加个掩码呢?掩码又是什么呢?我们看下面这张图
我们需要把"好"字加入到”你好吗”的后面,但是我们又不能让多头注意到“好”字后面“得很”,所以我们就需要把后面的字给遮起来,这个就是掩码。经过softMax的变化,可以看到下图
比如“好”字,后面的“得很”,都是0,说明好字只和前面的内容有关系,则接下来就是“好”字的[0.37,0.62,0,0]作为多头掩码的输出,也可以抽象的看成,是把“好”拼在了“你好吗”的后面,但是其实是“你好吗”作为QK,"好"作为V。 -
接下来就和上面的3一样,一直到softMax做出预测,如果是预测的不是“尼”,就反向更新梯度下降,如果是“尼”,则把“好尼”送入多头掩码中,然后把“好尼”拼在“你好吗”的后面。一直循环到softMax预测到结束标志。
相关文章:
Transformer——decoder
上一篇文章,我们介绍了encoder,这篇文章我们将要介绍decoder Transformer-encoder decoder结构: 如果看过上一篇文章的同学,肯定对decoder的结构不陌生,从上面框中可以明显的看出: 每个Decoder Block有两个…...
基于 STM32 的温度测量与控制系统设计
本文介绍了如何基于 STM32 微控制器设计一款温度测量与控制系统。首先,我们将简要介绍 STM32 微控制器的特点和能力。接下来,我们将详细讨论温度传感器的选择与接口。然后,我们将介绍如何使用 STM32 提供的开发工具和相关库来进行温度测量和控…...
python之pyqt专栏3-QT Designer
从前面两篇文章python之pyqt专栏1-环境搭建与python之pyqt专栏2-项目文件解析,我们对QT Designer有基础的认识。 QT Designer用来创建UI界面,保存的文件是"xxx.ui"文件,"xxx.ui"可以被pyuic转换为"xxx.py",而&…...
【鸿蒙应用ArkTS开发系列】- 云开发入门实战二 实现省市地区三级联动地址选择器组件(下)
文章目录 概述端云调用流程端侧集成AGC SDK端侧省市地区联动的地址选择器组件开发创建省市数据模型创建省市地区视图UI子组件创建页面UI视图Page文件 打包测试总结 概述 我们在前面的课程,对云开发的入门做了介绍,以及使用一个省市地区联动的地址选择器…...
HCIA题目解析(1)
1、【多选题】关于动态 MAC 地址表说法正确的是? A、通过报文中的源MAC地址学习获得的动态MAC表项会老化 B、通过查看指定动态MAC地址表项的个数,可以获取接口下通信的用户数 C、在设备重启后,之前的动态表项会丢失 D、在设备重启后&…...
运维高级-day02
一、编写系统服务启动脚本 RHEL6风格 1、Linux运行级别 Linux运行有七个级别 级别 描述 0 停机状态,系统默认运行级别不能设置为0,否则系统不能正常启动。使用init0命令,可关闭系统 1 单用户状态,此状态仅root用户可登录。用…...
虹科分享 | 平衡速度和优先级:为多样化的实时需求打造嵌入式网络(2)——实时通信系统的需求
现代实时应用的复杂性和需求不断增加,需要强大而可靠的通信系统。正如本系列第一部分所述,这些应用涵盖从秒到毫秒的广泛响应时间要求,它们的成功通常取决于其响应的精确时间。因此,所选的通信系统必须能够满足这些严格的时序限制…...
佳易王各行业收银管理系统软件,企业ERP管理软件,企业或个体定制开发软件以及软件教程资源下载总目录,持续更新,可关注收藏查阅
系统简介 1、佳易王软件功能实用、操作简单、软件绿色免安装,解压即可使用,软件已经内置数据库,不需再安装其他数据库文件。 2、佳易王软件,已经形成系列,上百款管理系统软件涵盖多个行业。 3、已为多个企业个体定制…...
C_4练习题
一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 定义如下变量和数组: int i; int x[3][3]{1,2,3,4,5,6,7,8,9}; 则下面语句的输…...
自动化测试-Selenium
一. Selenium介绍 selenium 是用来做web自动化测试的框架,支持各种浏览器,各种,支持各种语言 原理: 二. 元素定位 2.1 XPath 定位 绝对路径: /html/head/title 相对路径以双斜杠开头,常见的相对路径定位有以下几种: <1>相对路径索引: 索引是从1开始的 <2>相…...
基于单片机的温湿度检测系统设计
目录 摘 要... 2 第一章 绪论... 5 1.1 研究课题背景... 5 1.2 国内外发展概况... 7 1.3 课题研究的目的... 8 1.4 课题的研究内容及章节安排... 8 第二章 温湿度检测系统控制系统的设计方案... 10 2.1 设计任务及要求... 10 2.2 温湿度检测系统总体设计方…...
C# 关于异常处理 try-catch语句的使用
在实际应用中,比如涉及文件读写、网络通信时,会因为文件不存在、权限不够、网络异常等原因引发异常,或者对数据库连接、查询、更新等操作,会因为连接超时、语法错误、唯一约束冲突等引发异常。 看过去的代码,当进行上…...
【LeeCode】26.删除有序数组中的重复项
给你一个 非严格递增排列 的数组 nums ,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需…...
4-Docker命令之docker create
1.docker create介绍 docker create命令是用于创建一个新的容器,等价于docker run -d命令,但是与docker run -d不同的是,docker create创建的容器并未实际启动,需要指定docker start命令启动。 2.docker create用法 docker create [参数] [root@centos79 ~]# docker cr…...
leetcode每日一题33
86.分隔链表 因为对链表中的一个节点进行更换位置的操作需要知道该节点的上一个节点 所以建立一个虚拟头节点 ListNode* pnew ListNode(-201,head);根据题意,我们需要找到第一个大于x或等于x的节点large 并且将第一个大于或等于x的节点large后的所有小于x的节点都…...
性能测试【一】:Jmeter的常用操作
性能测试【一】:Jmeter的常用操作 一、使用命令行方式运行Jmeter1、为什么2、怎么用3、示例4、结果文件 二、生成动态报告1、准备2、命令3、报告示例4、报告释义 三、使用问题汇总 推荐使用命令行运行,GUI方式会经常卡死,尤其跑稳定性 一、使…...
【JAVA】SpringBoot + mongodb 分页、排序、动态多条件查询及事务处理
【JAVA】SpringBoot mongodb 分页、排序、动态多条件查询及事务处理 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mongodb ↓ -->&…...
nrm安装及使用
一、介绍 nrm 是一个 Node.js 的 registry 管理工具,它允许你快速地在不同的 npm registry 之间进行切换。通过使用 nrm,你可以方便地将 npm 的 registry 切换为淘宝镜像、npm 官方镜像或者其他定制的镜像,以加快包的下载速度。nrm仓库请点击…...
docker报错standard init linux.go:228 exec user process caused: exec format error
1、报错 使用Dockerfile自己做的服务镜像,docker run时启动失败,报错如下: standard init linux.go:228 exec user process caused: exec format error2、原因一 当前服务器的CPU架构和构建镜像时的CPU架构不兼容。比如做镜像是在arm机器下…...
Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
Docker 是一种容器化技术,它将一个应用程序及其所有依赖项打包在一起,形成一个独立的、可移植的容器。这个容器可以在任何支持 Docker 的操作系统上运行,而且具有很好的可移植性和可扩展性。以下是 Docker 的基本概念和优势: 镜像…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
