Bert基础(四)--解码器(上)

1 理解解码器

假设我们想把英语句子I am good(原句)翻译成法语句子Je vais bien(目标句)。首先,将原句I am good送入编码器,使编码器学习原句,并计算特征值。在前文中,我们学习了编码器是如何计算原句的特征值的。然后,我们把从编码器求得的特征值送入解码器。解码器将特征值作为输入,并生成目标句Je vais bien,如下图所示。

Transformer的编码器和解码器
在编码器部分,我们了解到可以叠加N个编码器。同理,解码器也可以有N个叠加在一起。为简化说明,我们设定N=2。如图所示,一个解码器的输出会被作为输入传入下一个解码器。我们还可以看到,编码器将原句的特征值(编码器的输出)作为输入传给所有解码器,而非只给第一个解码器。因此,一个解码器(第一个除外)将有两个输入:一个是来自前一个解码器的输出,另一个是编码器输出的特征值。
在这里插入图片描述

2 工作步骤

接下来,我们学习解码器究竟是如何生成目标句的。当 t = 1 t=1 t=1时(t表示时间步),解码器的输入是<sos>,这表示句子的开始。解码器收到<sos>作为输入,生成目标句中的第一个词,即Je,如图所示。

在这里插入图片描述
t = 2 t=2 t=2时,解码器使用当前的输入和在上一步( t = 1 t=1 t=1)生成的单词,预测句子中的下一个单词。在本例中,解码器将<sos>和Je(来自上一步)作为输入,并试图生成目标句中的下一个单词,如图所示。
在这里插入图片描述
同理,可以推断出解码器在 t = 3 t=3 t=3时的预测结果。此时,解码器将<sos>、Je和vais(来自上一步)作为输入,并试图生成句子中的下一个单词,如图所示
在这里插入图片描述
在每一步中,解码器都将上一步新生成的单词与输入的词结合起来,并预测下一个单词。因此,在最后一步( t = 4 t=4 t=4),解码器将<sos>、Je、vais和bien作为输入,并试图生成句子中的下一个单词,如图所示。
在这里插入图片描述
从上图中可以看到,一旦生成表示句子结束的<eos>标记,就意味着解码器已经完成了对目标句的生成工作。

3 位置编码

在编码器部分,我们将输入转换为嵌入矩阵,并将位置编码添加到其中,然后将其作为输入送入编码器。同理,我们也不是将输入直接送入解码器,而是将其转换为嵌入矩阵,为其添加位置编码,然后再送入解码器。

如下图所示,假设在时间步 t = 2 t=2 t=2,我们将输入转换为嵌入(我们称之为嵌入值输出,因为这里计算的是解码器在以前的步骤中生成的词的嵌入),将位置编码加入其中,然后将其送入解码器。
在这里插入图片描述
接下来,让我们深入了解解码器的工作原理。一个解码器模块及其所有的组件如图:
在这里插入图片描述
从图中可以看到,解码器内部有3个子层。

  • 带掩码的多头注意力层
  • 多头注意力层
  • 前馈网络层

与编码器模块相似,解码器模块也有多头注意力层和前馈网络层,但多了带掩码的多头注意力层。现在,我们对解码器有了基本的认识。接下来,让我们先详细了解解码器的每个组成部分,然后从整体上了解它的工作原理。

4 带掩码的多头注意力层

以英法翻译任务为例,假设训练数据集样本如图所示
在这里插入图片描述
数据集由两部分组成:原句和目标句。在前面,我们学习了解码器在测试期间是如何在每个步骤中逐字预测目标句的。

在训练期间,由于有正确的目标句,解码器可以直接将整个目标句稍作修改作为输入。解码器将输入的<sos>作为第一个标记,并在每一步将下一个预测词与输入结合起来,以预测目标句,直到遇到<eos>标记为止。因此,我们只需将<sos>标记添加到目标句的开头,再将整体作为输入发送给解码器。

比如要把英语句子I am good转换成法语句子Je vais bien。我们只需在目标句的开头加上<sos>标记,并将<sos>Je vais bien作为输入发送给解码器。解码器将预测输出为Je vais bien<eos>,如图所示。
在这里插入图片描述
为什么我们需要输入整个目标句,让解码器预测位移后的目标句呢?下面来解答。

首先,我们不是将输入直接送入解码器,而是将其转换为嵌入矩阵(输出嵌入矩阵)并添加位置编码,然后再送入解码器。假设添加输出嵌入矩阵和位置编码后得到图所示的矩阵X。

在这里插入图片描述
然后,将矩阵X送入解码器。解码器中的第一层是带掩码的多头注意力层。这与编码器中的多头注意力层的工作原理相似,但有一点不同。

为了运行自注意力机制,我们需要创建三个新矩阵,即查询矩阵Q、键矩阵K和值矩阵V。由于使用多头注意力层,因此我们创建了h个查询矩阵、键矩阵和值矩阵。对于注意力头 i i i的查询矩阵 Q i Q_i Qi、键矩阵 K i K_i Ki和值矩阵 V i V_i Vi,可以通过将X分别乘以权重矩阵 W i Q , W i K , W i V W_i^Q, W_i^K, W_i^V WiQ,WiK,WiV而得。

下面,让我们看看带掩码的多头注意力层是如何工作的。假设传给解码器的输入句是<sos>Je vais bien。我们知道,自注意力机制将一个单词与句子中的所有单词联系起来,从而提取每个词的更多信息。但这里有一个小问题。在测试期间,解码器只将上一步生成的词作为输入。

比如,在测试期间,当 t = 2 t=2 t=2时,解码器的输入中只有[<sos>, Je],并没有任何其他词。因此,我们也需要以同样的方式来训练模型。模型的注意力机制应该只与该词之前的单词有关,而不是其后的单词。要做到这一点,我们可以掩盖后边所有还没有被模型预测的词。

比如,我们想预测与<sos>相邻的单词。在这种情况下,模型应该只看到<sos>,所以我们应该掩盖<sos>后边的所有词。再比如,我们想预测Je后边的词。在这种情况下,模型应该只看到Je之前的词,所以我们应该掩盖Je后边的所有词。其他行同理,如图所示。
在这里插入图片描述
像这样的掩码有助于自注意力机制只注意模型在测试期间可以使用的词。但我们究竟如何才能实现掩码呢?我们学习过对于一个注意力头 Z 1 Z_1 Z1的注意力矩阵[插图]的计算方法,公式如下。
Z i = s o f t m a x ( Q i ⋅ K i T d k ) V i Z_i = softmax(\frac{Q_i·K_i^T}{\sqrt{d_k}})V_i Zi=softmax(dk QiKiT)Vi

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

在这里插入图片描述
第二步是将 Q i ⋅ K i T Q_i·K_i^T QiKiT矩阵除以键向量维度的平方根 d k \sqrt{d_k} dk 。假设下图是 Q i ⋅ K i T / d k Q_i·K_i^T/\sqrt{d_k} QiKiT/dk 的结果。
在这里插入图片描述
第3步,我们对上图所得的矩阵应用softmax函数,并将分值归一化。但在应用softmax函数之前,我们需要对数值进行掩码转换。以矩阵的第1行为例,为了预测<sos>后边的词,模型不应该知道<sos>右边的所有词(因为在测试时不会有这些词)。因此,我们可以用 − ∞ - \infty 掩盖<sos>右边的所有词,如图所示。
在这里插入图片描述
接下来,让我们看矩阵的第2行。为了预测Je后边的词,模型不应该知道Je右边的所有词(因为在测试时不会有这些词)。因此,我们可以用 − ∞ - \infty 掩盖Je右边的所有词,如图所示。
在这里插入图片描述
同理,我们可以用 − ∞ - \infty 掩盖vais右边的所有词,如图所示。
在这里插入图片描述
现在,我们可以将softmax函数应用于前面的矩阵,并将结果与值矩阵 V i V_i Vi相乘,得到最终的注意力矩阵 Z i Z_i Zi。同样,我们可以计算h个注意力矩阵,将它们串联起来,并将结果乘以新的权重矩阵 W 0 W_0 W0,即可得到最终的注意力矩阵M,如下所示
M = C o n c a t e n a t e ( Z 1 , Z 2 , … … , Z h ) W 0 M = Concatenate(Z_1, Z_2,……,Z_h)W_0 M=Concatenate(Z1,Z2,……,Zh)W0

最后,我们把注意力矩阵M送到解码器的下一个子层,也就是另一个多头注意力层。

待更。。。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F103学习笔记(六) RTC实时时钟(应用篇)

目录 1. RTC 实时时钟的应用场景 2. RTC 的配置与初始化 2.1 设置 RTC 时钟源 2.2 初始化 RTC 寄存器 2.3 中断配置 2.4 备份寄存器配置 2.5 校准 RTC 3. 实例演示代码 4. 总结 1. RTC 实时时钟的应用场景 实时时钟&#xff08;RTC&#xff09;在嵌入式系统中具有广泛…

2023 最新 IntelliJ IDEA 2023.3 详细配置步骤演示(图文版)<中文版>

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【MySQL】探索表结构、数据类型和基本操作

表、记录、字段 数据库的E-R&#xff08;entity-relationship&#xff0c;实体-关系&#xff09;模型中有三个主要概念&#xff1a; 实体集 、 属性 、 关系集 。 一个实体集对应于数据库中的一个表&#xff0c;一个实体则对应于数据库表 中的一行&#xff0c;也称为一条记录。…

扫二维码播放视频的效果怎么做?如何扫码看视频?

现在经常会在很多的商品详情上发现多个二维码&#xff0c;扫码后会展现不同的内容&#xff0c;比如图片、视频、文字等等。一般产品介绍和使用说明多以视频为主&#xff0c;那么如何制作扫码播放视频的效果呢&#xff0c;相信很多小伙伴对这个制作技巧都非常的感兴趣&#xff0…

亿发:解锁数据智能力,探索数据中台的未来发展趋势与智能化革命

数据中台是什么 数据中台是一种基于现代数据技术和架构的概念&#xff0c;其提出之前&#xff0c;企业在解决数据资源整合和共享方面采用了各种不同的方法。在阿里提出数据中台概念之前&#xff0c;大型企业已经在进行各类数据处理&#xff0c;并且在没有数据中台的情况下取得…

应急响应-常规处置办法

网站中被植入Webshell&#xff0c;通常代表着网站中存在可利用的高危漏洞&#xff0c;攻击者利用这些漏洞&#xff0c;将Webshell写入网站&#xff0c;从而获取网站的控制权。一旦在网站中发现webshell文件&#xff0c;可采取以下步骤进行临时处置。 入侵确定时间 通过在网站…

揭示IP查询结果偏差的现象及其影响

在互联网的日益普及和数字化的时代&#xff0c;IP地址成为了我们在网络上进行通信和交流的关键。然而&#xff0c;尽管IP地址通常被认为是准确地标识设备位置的重要工具&#xff0c;但实际上&#xff0c;IP查询结果存在一定的偏差&#xff0c;这可能会给我们带来一些意想不到的…

抖音数据抓取工具|短视频下载工具|视频内容提取软件

一、开发背景&#xff1a; 随着抖音平台的流行&#xff0c;越来越多的人希望能够下载抖音视频以进行个人收藏或分享。然而&#xff0c;目前在网上找到的抖音视频下载工具功能单一&#xff0c;操作繁琐&#xff0c;无法满足用户的需求。因此&#xff0c;我们决定开发一款功能强大…

字节跳动Java端研发面试,P8大佬亲自讲解

2024第一次Java面试&#xff0c;我去了快手。快手的面试挺有挑战性的&#xff0c;而且还特别有意思&#xff0c;感觉啥都能问到。&#xff08;二面是10天前约的面试&#xff0c;差点要忘了&#xff09;然后是HR面&#xff0c;前天我就收到offer。 1. 面试官&#xff1a;工作中使…

深度神经网络中的计算和内存带宽

深度神经网络中的计算和内存带宽 文章目录 深度神经网络中的计算和内存带宽来源原理介绍分析1&#xff1a;线性层分析2&#xff1a;卷积层分析3&#xff1a;循环层总结 来源 相关知识来源于这里。 原理介绍 Memory bandwidth and data re-use in deep neural network computat…

骨传导耳机怎么样?六大规则与避坑绝招大揭秘

近年来&#xff0c;骨传导蓝牙耳机在健身与科技爱好者之间变得异常受欢迎。相比之下&#xff0c;传统入耳式蓝牙耳机在户外活动中无法让佩戴者听到周围的环境声&#xff0c;这一缺点限制了它们的使用场景。骨传导蓝牙耳机通过其独特的开放式设计来解决这一问题&#xff0c;使其…

力扣--双指针167.二数之和Ⅱ

这题一个穷举方法是比较好想到的&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& numbers, int target) {int i,j;int nnumbers.size();vector<int>result(2,0);for(i0;i<n-1;i){for(ji1;j<n;j){if(numbers[i]numbers[j…