深入理解深度学习——Transformer:解码器(Decoder)部分

这篇具有很好参考价值的文章主要介绍了深入理解深度学习——Transformer:解码器(Decoder)部分。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分类目录:《深入理解深度学习》总目录

相关文章:
·注意力机制(Attention Mechanism):基础知识
·注意力机制(Attention Mechanism):注意力汇聚与Nadaraya-Watson核回归
·注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function)
·注意力机制(Attention Mechanism):Bahdanau注意力
·注意力机制(Attention Mechanism):自注意力(Self-attention)
·注意力机制(Attention Mechanism):多头注意力(Multi-head Attention)
· 注意力机制(Attention Mechanism):带掩码的多头注意力(Masked Multi-head Attention)
·注意力机制(Attention Mechanism):位置编码(Positional Encoding)
· Transformer:编码器(Encoder)部分
· Transformer:解码器(Decoder)的多头注意力层(Multi-headAttention)


假设我们想把英语句子“I am good.”(原句)翻译成法语句子“Je vais bien.”(目标句)。首先,将原句“I am good.”送入编码器,使编码器学习原句,并计算特征值。《深入理解深度学习——Transformer:编码器(Encoder)部分》中,我们学习了编码器是如何计算原句的特征值的。然后,我们把从编码器求得的特征值送入解码器。解码器将特征值作为输入,并生成目标句Je vais bien,如下图所示。
深入理解深度学习——Transformer:解码器(Decoder)部分

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

接下来,我们学习解码器究竟是如何生成目标句的。当 t = 1 t=1 t=1时( t t t表示时间步),解码器的输入是<sos>,这表示句子的开始。解码器收到<sos>作为输入,生成目标句中的第一个词,即Je,如下图 t = 1 t=1 t=1所示。当 t = 2 t=2 t=2时,解码器使用当前的输入和在上一步( t − 1 t-1 t1)生成的单词,预测句子中的下一个单词。在本例中,解码器将<sos>Je作为输入,并试图生成目标句中的下一个单词,如下图 t = 2 t=2 t=2所示。同理,解码器在 t = 3 t=3 t=3时,将<sos>Jevais作为输入,并试图生成句子中的下一个单词,如下图 t = 3 t=3 t=3所示。在每一步中,解码器都将上一步新生成的单词与输入的词结合起来,并预测下一个单词。因此,在最后一步( t = 4 t=4 t=4),解码器将<sos>Jevaisbien作为输入,并试图生成句子中的下一个单词,如下图 t = 4 t=4 t=4所示。
深入理解深度学习——Transformer:解码器(Decoder)部分
从上图中可以看到,一旦生成表示句子结束的<eos>标记,就意味着解码器已经完成了对目标句的生成工作。

在编码器部分,我们将输入转换为嵌入矩阵,并将位置编码添加到其中,然后将其作为输入送入编码器。同理,我们也不是将输入直接送入解码器,而是将其转换为嵌入矩阵,为其添加位置编码,然后再送入解码器。如下图所示,假设在时间步 t = 2 t=2 t=2,我们将输入转换为嵌入(我们称之为嵌入值输出,因为这里计算的是解码器在以前的步骤中生成的词的嵌入),将位置编码加入其中,然后将其送入解码器。
深入理解深度学习——Transformer:解码器(Decoder)部分
一个解码器模块及其所有的组件如下图所示。解码器内部有3个子层:

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

与编码器模块相似,解码器模块也有多头注意力层和前馈网络层,但多了带掩码的多头注意力层。
深入理解深度学习——Transformer:解码器(Decoder)部分
以英法翻译任务为例,假设训练数据集样本如下样本:

原句(英语) 目标句(法语)
I am good. Je vais bien.
Good morning. Bonjour.
Thank you very much. Merci beaucoup.

上述数据集由两部分组成:原句和目标句。在上文中我们学习了解码器在测试期间是如何在每个步骤中逐字预测目标句的。在训练期间,由于有正确的目标句,解码器可以直接将整个目标句稍作修改作为输入。解码器将输入的<sos>作为第一个标记,并在每一步将下一个预测词与输入结合起来,以预测目标句,直到遇到<eos>标记为止。因此,我们只需将<sos>标记添加到目标句的开头,再将整体作为输入发送给解码器。比如要把英语句子“I am good.”转换成法语句子“Je vais bien.”。我们只需在目标句的开头加上<sos>标记,并将<sos>Je vais bien作为输入发送给解码器。解码器将预测输出为Je vais bien<eos>,如下图所示。
深入理解深度学习——Transformer:解码器(Decoder)部分

我们不是将输入直接送入解码器,而是将其转换为嵌入矩阵(输出嵌入矩阵)并添加位置编码,然后再送入解码器。假设添加输出嵌入矩阵和位置编码后得到下图所示的矩阵 X X X深入理解深度学习——Transformer:解码器(Decoder)部分
将矩阵 X X X送入解码器。解码器中的第一层是带掩码的多头注意力层。这编码器中的多头注意力层的工作原理相似,但有一点不同,具体的原理可以参考《深入理解深度学习——注意力机制(Attention Mechanism):带掩码的多头注意力(Masked Multi-head Attention)》中的带掩码的多头注意力。最后,我们把注意力矩阵 M M M送到解码器的下一个子层,也就是另一个多头注意力层。这个多头注意力层的设计可以参考文章《深入理解深度学习——Transformer:解码器(Decoder)的多头注意力层(Multi-headAttention)》,它会输出一个注意力矩阵到后面的前馈网络层。

解码器的下一个子层是前馈网络层,且解码器的前馈网络层的工作原理与我们在《深入理解深度学习——Transformer:编码器(Encoder)部分》中学习的编码器部分的前馈网络层完全相同。同样,叠加和归一组件连接子层的输入和输出,如下图所示。
深入理解深度学习——Transformer:解码器(Decoder)部分
一旦解码器学习了目标句的特征,我们就将顶层解码器的输出送入线性层和Softmax层,如下图所示。
深入理解深度学习——Transformer:解码器(Decoder)部分
线性层将生成一个logit向量,其大小等于原句中的词汇量。假设原句只由以下3个词组成:

vocabulary = {bien, Je, vais}

那么,线性层返回的logit向量的大小将为3。接下来,使用Softmax函数将logit向量转换成概率,然后解码器将输出具有高概率值的词的索引值。让我们通过一个示例来理解这一过程。假设解码器的输入词是<sos>Je。基于输入词,解码器需要预测目标句中的下一个词。然后,我们把顶层解码器的输出送入线性层。线性层生成logit向量,其大小等于原句中的词汇量。假设线性层返回如下logit向量: logit = [ 45 , 40 , 49 ] \text{logit}=[45, 40, 49] logit=[45,40,49],则Softmax函数应用于logit向量,从而得到概率: prob = [ 0.018 , 0.000 , 0.981 ] \text{prob}=[0.018, 0.000, 0.981] prob=[0.018,0.000,0.981]。从概率矩阵中,我们可以看出索引2的概率最高。所以,模型预测出的下一个词位于词汇表中索引2的位置。由于vais这个词位于索引2,因此解码器预测目标句中的下一个词是vais。通过这种方式,解码器依次预测目标句中的下一个词。

上文就是解码器的所有组件。下面,让我们把它们放在一起,看看它们是如何作为一个整体工作的。下图显示了两个解码器。为了避免重复,只有解码器1被展开说明。
深入理解深度学习——Transformer:解码器(Decoder)部分
通过上图,我们可以得出以下几点:

  1. 我们将解码器的输入转换为嵌入矩阵,然后将位置编码加入其中,并将其作为输入送入底层的解码器(解码器1)。
  2. 解码器收到输入,并将其发送给带掩码的多头注意力层,生成注意力矩阵 M M M
  3. 将注意力矩阵 M M M和编码器输出的特征值 R R R作为多头注意力层(编码器—解码器注意力层)的输入,并再次输出新的注意力矩阵。
  4. 把从多头注意力层得到的注意力矩阵作为输入,送入前馈网络层。前馈网络层将注意力矩阵作为输入,并将解码后的特征作为输出。
  5. 我们把从解码器1得到的输出作为输入,将其送入解码器2。
  6. 解码器2进行同样的处理,并输出目标句的特征。我们还可以将 N N N个解码器层层堆叠起来。从最后的解码器得到的输出(解码后的特征)将是目标句的特征。
  7. 我们将目标句的特征送入线性层和Softmax层,通过概率得到预测的词并输出。

参考文献:
[1] Lecun Y, Bengio Y, Hinton G. Deep learning[J]. Nature, 2015
[2] Aston Zhang, Zack C. Lipton, Mu Li, Alex J. Smola. Dive Into Deep Learning[J]. arXiv preprint arXiv:2106.11342, 2021.
[3] 车万翔, 崔一鸣, 郭江. 自然语言处理:基于预训练模型的方法[M]. 电子工业出版社, 2021.
[4] 邵浩, 刘一烽. 预训练语言模型[M]. 电子工业出版社, 2021.
[5] 何晗. 自然语言处理入门[M]. 人民邮电出版社, 2019
[6] Sudharsan Ravichandiran. BERT基础教程:Transformer大模型实战[M]. 人民邮电出版社, 2023
[7] 吴茂贵, 王红星. 深入浅出Embedding:原理解析与应用实战[M]. 机械工业出版社, 2021.文章来源地址https://www.toymoban.com/news/detail-495880.html

到了这里,关于深入理解深度学习——Transformer:解码器(Decoder)部分的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习&&深度学习——从编码器-解码器架构到seq2seq(机器翻译)

    👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习深度学习——注意力提示、注意力池化(核回归) 📚订阅专栏:机器学习深度学习 希望文章对你们有所帮助 接下来就要慢慢开始实战了,把这边过了,我们接下来就要进行机器翻译的实战

    2024年02月13日
    浏览(41)
  • 【Transformer系列(1)】encoder(编码器)和decoder(解码器)

    前言 这个专栏我们开始学习transformer,自推出以来transformer在深度学习中占有重要地位,不仅在NLP领域,在CV领域中也被广泛应用,尤其是2021年,transformer在CV领域可谓大杀四方。 在论文的学习之前,我们先来介绍一些专业术语。本篇就让我们先来认识一下encoder和decoder吧!

    2024年03月25日
    浏览(61)
  • 深度学习RNN,GRU,LSTM文本生成解码器的训练损失讲解(附代码)

    以下以GRU为例讲解RNN作为解码器时如何根据用户、商品特征信息 hidden 生成评价。 解码器部分代码如下: 在训练时,解码器会有两个输入:一是编码器提取的用户、商品特征,二是用户对商品的评价。 评价是文字,在训练开始前已经转换成了Token ID, 比如 I love this item , 每个

    2024年04月12日
    浏览(40)
  • 解码Transformer:自注意力机制与编解码器机制详述与代码实现

    本文全面探讨了Transformer及其衍生模型,深入分析了自注意力机制、编码器和解码器结构,并列举了其编码实现加深理解,最后列出基于Transformer的各类模型如BERT、GPT等。文章旨在深入解释Transformer的工作原理,并展示其在人工智能领域的广泛影响。 作者 TechLead,拥有10+年互

    2024年02月13日
    浏览(42)
  • Transformer中解码器decoder的详细讲解(图文解释)

    假设我们想把英语句子i am good翻译成法语句子 Je Vais bein,首先将原句送入编码器,使编码器学习原句,并计算特征值,在上一篇博客中已经讲解了编码器是如何计算原句的特征值的,然后我们把从编码器求得的特征值送入解码器,解码器将特征值作为输入,并生成目标据,流

    2023年04月18日
    浏览(45)
  • LeViT-UNet:transformer 编码器和CNN解码器的有效整合

    levi - unet[2]是一种新的医学图像分割架构,它使用transformer 作为编码器,这使得它能够更有效地学习远程依赖关系。levi - unet[2]比传统的U-Nets更快,同时仍然实现了最先进的分割性能。 levi - unet[2]在几个具有挑战性的医学图像分割基准上取得了比其他法更好的性能,包括Synap

    2024年02月12日
    浏览(45)
  • 【人工智能】Transformer 模型数学公式:自注意力机制、多头自注意力、QKV 矩阵计算实例、位置编码、编码器和解码器、常见的激活函数等

    Transformer模型由多个编码器和解码器层组成,其中包含自注意力机制、线性层和层归一化等关键构造模块。虽然无法将整个模型完美地表示为单个数学公式,但我们可以提供一些重要构造模块的数学表示。以下是使用LaTeX格式渲染的部分Transformer关键组件的数学公式: 自注意力

    2024年02月14日
    浏览(52)
  • FFmpeg的HEVC解码器源代码学习笔记-1

    一直想写一个HEVC的码流解析工具,看了雷神264码流解析工具,本来想尝试模仿写一个相似的265码流分析工具,但是发现265的解码过程和结构体和264的不太一样,很多结构体并没有完全暴露出来,没有想到很好的方法获得量化参数,运动向量等这些信息。想着从头学习一下ff

    2024年02月22日
    浏览(44)
  • 解码器 | 基于 Transformers 的编码器-解码器模型

    基于 transformer 的编码器-解码器模型是 表征学习 和 模型架构 这两个领域多年研究成果的结晶。本文简要介绍了神经编码器-解码器模型的历史,更多背景知识,建议读者阅读由 Sebastion Ruder 撰写的这篇精彩 博文。此外,建议读者对 自注意力 (self-attention) 架构 有一个基本了解

    2024年02月08日
    浏览(48)
  • Netty编解码器,Netty自定义编解码器解决粘包拆包问题,Netty编解码器的执行过程详解

    当Netty发送或者接收一个消息的时候,就会发生一次数据转换。入站消息会被解码(从字节转换为另一种格式,比如java对象);出站消息会被编码成字节。 Netty 提供一系列实用的编解码器,他们都实现了 ChannelInboundHadnler 或者 ChannelOutboundHandler 接口。在这些类中,channelRead 方

    2023年04月23日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包