Bert基础(五)--解码器(下)

1、 多头注意力层

下图展示了Transformer模型中的编码器和解码器。我们可以看到,每个解码器中的多头注意力层都有两个输入:一个来自带掩码的多头注意力层,另一个是编码器输出的特征值。
在这里插入图片描述
让我们用R来表示编码器输出的特征值,用M来表示由带掩码的多头注意力层输出的注意力矩阵。由于涉及编码器与解码器的交互,因此这一层也被称为编码器−解码器注意力层

让我们详细了解该层究竟是如何工作的。多头注意力机制的第1步是创建查询矩阵、键矩阵和值矩阵。我们已知可以通过将输入矩阵乘以权重矩阵来创建查询矩阵、键矩阵和值矩阵。但在这一层,我们有两个输入矩阵:一个是R(编码器输出的特征值),另一个是M(前一个子层的注意力矩阵)。应该使用哪一个呢?

答案是:我们使用从上一个子层获得的注意力矩阵M创建查询矩阵Q,使用编码器输出的特征值R创建键矩阵和值矩阵。由于采用多头注意力机制,因此对于头 i i i,需做如下处理。

  • 查询矩阵Q通过将注意力矩阵M乘以权重矩阵 W i Q W_i^Q WiQ来创建。
  • 键矩阵和值矩阵通过将编码器输出的特征值R分别与权重矩阵 W i K W_i^K WiK W i V W_i^V WiV相乘来创建,如图所示。
    在这里插入图片描述
    为什么要用M计算查询矩阵,而用R 计算键矩阵和值矩阵呢?因为查询矩阵是从M求得的,所以本质上包含了目标句的特征。键矩阵和值矩阵则含有原句的特征,因为它们是用R计算的。为了进一步理解,让我们来逐步计算。

第1步是计算查询矩阵与键矩阵的点积。查询矩阵和键矩阵如下图所示。需要注意的是,这里使用的数值是随机的,只是为了方便理解.

在这里插入图片描述

查询矩阵与键矩阵的点积结果
在这里插入图片描述
通过观察图矩阵 Q i ⋅ K i T Q_i·K_i^T QiKiT,我们可以得出以下几点。

  • 从矩阵的第1行可以看出,其正在计算查询向量 q 1 q_1 q1(<sos>)与所有键向量 k 1 k_1 k1(I)、 k 2 k_2 k2(am)和 k 3 k_3 k3(good)的点积。因此,第1行表示目标词<sos>与原句中所有的词(I、am和good)的相似度。
  • 同理,从矩阵的第2行可以看出,其正在计算查询向量 q 2 q_2 q2(Je)与所有键向量 k 1 k_1 k1(I)、 k 2 k_2 k2(am)和 k 3 k_3 k3(good)的点积。因此,第2行表示目标词Je与原句中所有的词(I、am和good)的相似度。
  • 同样的道理也适用于其他所有行。通过计算 Q i ⋅ K i T Q_i·K_i^T QiKiT,可以得出查询矩阵(目标句特征)与键矩阵(原句特征)的相似度。

计算多头注意力矩阵的下一步是将 Q i ⋅ K i T Q_i·K_i^T QiKiT除以 d k \sqrt{d_k} dk ,然后应用softmax函数,得到分数矩阵 s o f t m a x ( Q i ⋅ K i T d k ) softmax(\frac{Q_i·K_i^T}{\sqrt{d_k}}) softmax(dk QiKiT)

接下来,我们将分数矩阵乘以值矩阵 V i V_i Vi,得到 s o f t m a x ( Q i ⋅ K i T d k ) V i softmax(\frac{Q_i·K_i^T}{\sqrt{d_k}})V_i softmax(dk QiKiT)Vi,即注意力矩阵 Z i Z_i Zi,如图所示。
在这里插入图片描述
假设计算结果如图
在这里插入图片描述
目标句的注意力矩阵 Z i Z_i Zi是通过分数加权的值向量之和计算的。为了进一步理解,让我们看看Je这个词的自注意力值 Z 2 Z_2 Z2是如何计算的,如图
在这里插入图片描述
Je的自注意力值 Z 2 Z_2 Z2是通过分数加权的值向量之和求得的。因此, Z 2 Z_2 Z2的值将包含98%的值向量 v 1 v_1 v1(I)和2%的值向量 v 2 v_2 v2(am)。这个结果可以帮助模型理解目标词Je指代的是原词I。

同样,我们可以计算出h个注意力矩阵,将它们串联起来。然后,将结果乘以一个新的权重矩阵 W 0 W_0 W0,得出最终的注意力矩阵,如下所示。
M u l t i − h e a d a t t e n t i o n = C o n c a t e n a t e ( Z 1 , Z 2 , … … , Z h ) W 0 Multi - head attention = Concatenate(Z_1, Z_2,……,Z_h)W_0 Multiheadattention=Concatenate(Z1,Z2,……,Zh)W0

将最终的注意力矩阵送入解码器的下一个子层,即前馈网络层。

2 、前馈网络层

解码器的下一个子层是前馈网络层,如图所示
在这里插入图片描述
解码器的前馈网络层的工作原理与我们在编码器中学到的完全相同,因此这里不再赘述。下面来看叠加和归一组件。

3、 叠加和归一组件

和在编码器部分学到的一样,叠加和归一组件连接子层的输入和输出,如图所示。
在这里插入图片描述

4、 线性层和softmax层

一旦解码器学习了目标句的特征,我们就将顶层解码器的输出送入线性层和softmax层,如图

在这里插入图片描述
线性层将生成一个logit向量【logit向量是指BERT模型在soft Max激活函数之前输出的概率分布】,其大小等于原句中的词汇量。假设原句只由以下3个词组成:
v o c a b u l a r y = b i e n , J e , v a i s vocabulary = {bien, Je , vais} vocabulary=bien,Je,vais
那么,线性层返回的logit向量的大小将为3。接下来,使用softmax函数将logit向量转换成概率,然后解码器将输出具有高概率值的词的索引值。让我们通过一个示例来理解这一过程。

假设解码器的输入词是<sos>和Je。基于输入词,解码器需要预测目标句中的下一个词。然后,我们把顶层解码器的输出送入线性层。线性层生成logit向量,其大小等于原句中的词汇量。假设线性层返回如下logit向量:
l o g i t = [ 45 , 40 , 49 ] logit = [45, 40, 49] logit=[45,40,49]

最后,将softmax函数应用于logit向量,从而得到概率。
p r o b = [ 0.018 , 0.000 , 0.981 ] prob = [0.018, 0.000, 0.981] prob=[0.018,0.000,0.981]

从概率矩阵中,我们可以看出索引2的概率最高。所以,模型预测出的下一个词位于词汇表中索引2的位置。由于vais这个词位于索引2,因此解码器预测目标句中的下一个词是vais。通过这种方式,解码器依次预测目标句中的下一个词。

现在我们已经了解了解码器的所有组件。下面,让我们把它们放在一起,看看它们是如何作为一个整体工作的。

5、 解码器总览

下图显示了两个解码器。为了避免重复,只有解码器1被展开说明。
在这里插入图片描述
通过图,我们可以得出以下几点。
(1) 首先,我们将解码器的输入转换为嵌入矩阵,然后将位置编码加入其中,并将其作为输入送入底层的解码器(解码器1)。
(2) 解码器收到输入,并将其发送给带掩码的多头注意力层,生成注意力矩阵[插图]。
(3) 然后,将注意力矩阵[插图]和编码器输出的特征值[插图]作为多头注意力层(编码器−解码器注意力层)的输入,并再次输出新的注意力矩阵。
(4) 把从多头注意力层得到的注意力矩阵作为输入,送入前馈网络层。前馈网络层将注意力矩阵作为输入,并将解码后的特征作为输出。
(5) 最后,我们把从解码器1得到的输出作为输入,将其送入解码器2。
(6) 解码器2进行同样的处理,并输出目标句的特征。

我们可以将N个解码器层层堆叠起来。从最后的解码器得到的输出(解码后的特征)将是目标句的特征。接下来,我们将目标句的特征送入线性层和softmax层,通过概率得到预测的词。

现在,我们已经详细了解了编码器和解码器的工作原理。让我们把编码器和解码器放在一起,看看Transformer模型是如何整体运作的。

6、 整合编码器和解码器

下图完整地展示了带有编码器和解码器的Transformer架构。
在这里插入图片描述
在图1-63中, N × N × N×表示可以堆叠N个编码器和解码器。我们可以看到,一旦输入句子(原句),编码器就会学习其特征并将特征发送给解码器,而解码器又会生成输出句(目标句)。

7、 训练Transformer

我们可以通过最小化损失函数来训练Transformer网络。但是,应该如何选择损失函数呢?我们已经知道,解码器预测的是词汇的概率分布,并选择概率最高的词作为输出。所以,我们需要让预测的概率分布和实际的概率分布之间的差异最小化。要做到这一点,可以将损失函数定义为交叉熵损失函数。我们通过最小化损失函数来训练网络,并使用Adam算法来优化训练过程。

另外需要注意,为了防止过拟合,我们可以将dropout方法应用于每个子层的输出以及嵌入和位置编码的总和。

以上,我们详细学习了Transformer的工作原理。在后面,我们将开始使用BERT。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/415688.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity安装与简单设置

安装网址&#xff1a;https://unity.cn 设置语言&#xff1a; 设置安装位置&#xff1a;否则C盘就会爆了 获取一个个人的资格证&#xff1a; 开始安装&#xff1a; 安装完毕。 添加模块&#xff1a;例如简体中文 新建项目&#xff1a; 布局2*3、单栏布局、 设置…

el-table实现转置表格

vue版本&#xff1a;vue2.6.10 elementui版本&#xff1a;2.15.14 实现效果&#xff1a;el-table实现行列互换 代码&#xff1a; <template><div class"app-container"><span>原始数据</span><el-table:data"datas"border>…

循环结构:for循环,while循环,do-while,死循环

文章目录 for循环for案例&#xff1a;累加for循环在开发中的常见应用场景 whilewhile循环案例&#xff1a; for和while的区别&#xff1a;do-while三种循环的区别小结死循环 快捷键 ctrlaltt for循环 看循环执行多少次&#xff0c;就看有效数字有几个 快捷键 fori 示例代码&am…

Netty01NIO

NIO基础 NIO &#xff1a;non-blocking io 非阻塞 IO 笔记 www.zgtsky.top 网课&#xff1a;黑马Netty 三大组件 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以…

工作微信统一管理(还带监管功能)

1.会话页面(可统一管理多个微信号、聚合聊天、手动搜索添加好友、通过验证请求、查看好友的朋友圈等) 2.聊天历史(可查看 所有聊天记录&#xff0c;包括手机.上撤回、删除的消息) 3.群发助手(可以一 -次群发多个好友和群&#xff0c;还可以选择定时发送&#xff0c;目前还在内测…

docker (十二)-私有仓库

docker registry 我们可以使用docker push将自己的image推送到docker hub中进行共享&#xff0c;但是在实际工作中&#xff0c;很多公司的代码不能上传到公开的仓库中&#xff0c;因此我们可以创建自己的镜像仓库。 docker 官网提供了一个docker registry的私有仓库项目&#…

微服务之qiankun主项目+子项目搭建

主项目使用history&#xff0c;子项目使用hash模式 1. 下载安装"qiankun": "^2.10.13"2. 手动调用qiankun,使用vue脚手架搭建的项目1. 主项目配置&#xff08;我使用的是手动调用乾坤&#xff0c;在指定页面显示内容&#xff09;1. 要使用的页面中引入乾坤…

蓝桥杯备战刷题three(自用)

1.合法日期 #include <iostream> #include <map> #include <string> using namespace std; int main() {map<string,int>mp;int days[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};for(int i1;i<12;i){for(int j1;j<days[i];j){string sto_strin…

Word | 论文使用 Springer LNICST 工具包进行格式化

目录 Step1&#xff1a;下载 Springer LNICST 工具包 Step2&#xff1a;导入宏文件 Step3&#xff1a;处理导入失败&#xff08;大概意思是这个宏不安全&#xff09; Step4&#xff1a;导入成功并使用 Step1&#xff1a;下载 Springer LNICST 工具包 会议官网的 SUBMISSIO…

合唱队形洛谷

这题的状态转移方程为dp[i]max(dp[i]&#xff0c;dp[j]1) 因而可以有代码 #include<iostream> #include<algorithm> using namespace std; int arr[102][2]; int a[102]; int main() { int n; cin >> n; for (int i 1; i < n; i) { cin >>…

1、docker入门

文章目录 1、tocker简介2、tocker的安装&环境配置2、配置阿里云镜像3、基本命令1、镜像命令2、docker基本命令3、镜像基本命令4、Docker 容器常用命令 1、tocker简介 新一代的虚拟化技术 2、tocker的安装&环境配置 uname -r1、首先查看liunx的内核 yum update -y2、更…

selenium-激活pycharm,以及在pycharm中使用selenium时标红报错问题处理

激活pycharm&#xff1a;http://idea.955code.com/ 01 pycharm中导入selenium报错 现象: pycharm中输入from selenium import webdriver, selenium标红 原因1: pycharm使用的虚拟环境中没有安装selenium&#xff1a; 解决方法: 在pycharm中通过设置或terminal面板重新安装s…

VR元宇宙的概念|VR体验店加盟|虚拟现实设备销售

VR元宇宙是一个结合了虚拟现实&#xff08;Virtual Reality&#xff09;和增强现实&#xff08;Augmented Reality&#xff09;等技术的概念&#xff0c;代表着一个虚拟的多维度世界。它是一个由数字化的空间构成的虚拟环境&#xff0c;可以通过虚拟现实设备进行交互和探索。 元…

本届挑战赛季军方案:基于图网络及LLM AGENT的微服务系统异常检测和根因定位方法

aiboco团队荣获本届挑战赛季军。该团队来自亿阳信通。 方案介绍 本届挑战赛采用开放式赛题&#xff0c;基于建行云龙舟运维平台的稳定性工具和多维监控系统&#xff0c;模拟大型的生活服务APP的生产环境&#xff0c;提供端到端的全链路的日志、指标和调用链数据。参赛队伍在组…

Linux系统——LAMP架构

目录 一、LAMP架构组成 1.LAMP定义 2.各组件的主要作用 3.CGI和FastCGI 3.1CGI 3.3CGI和FastCGI比较 4.PHP 4.1PHP简介 4.2PHP的Opcode语言 4.3PHP设置 二、LAMP架构实现 1.编译安装Apache httpd服务 2.编译安装Mysql 3.编译安装PHP 4.安装论坛 5.搭建博客 W…

spring boot 整合 minio存储 【使用篇】

zi导入依赖 <!--minio--><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.0.3</version></dependency> yml配置&#xff08;默认配置&#xff09; spring:# 配置文件上传大小限制s…

LNMP 架构

环境准备&#xff1a;lnmp 需要安装 nginx mysql php 论坛/博客 软件 使用LNMP架构搭建 论坛 1. 关闭防火墙和和核心防护 systemctl disable --now firewalld setenforce 0 2. 编译安装 nginx 安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make 创建…

The dependencies of some of the beans in the application context form a cycle

1. 场景 项目启动报错如下&#xff1a; 翻译描述信息&#xff1a;应用程序上下文中某些bean的依赖关系形成一个循环 解释报错原因&#xff1a; 图中长方形指示的箭头代表了注入依赖的方向&#xff0c;marketSymbolServiceImpl注入了ownCurrencySettingService&#xff0c;own…

4_相机透镜畸变

理论上讲&#xff0c;是可能定义一种透镜而不引入任何畸变的。然而现实世界没有完美的透镜。这主要是制造上的原因&#xff0c;因为制作一个“球形”透镜比制作一个数学上理想的透镜更容易。而且从机械方面也很难把透镜和成像仪保持平行。下面主要描述两种主要的透镜畸变并为他…

亚马逊自养号测评:如何安全搭建环境,有效规避风险

要在亚马逊上进行自养号测评&#xff0c;构建一个真实的国外环境至关重要。这包括模拟国外的服务器、IP地址、浏览器环境&#xff0c;甚至支付方式&#xff0c;以创建一个完整的国际操作环境。这样的环境能让我们自由注册、养号并下单&#xff0c;确保所有操作均符合国际规范。…