(预测时候Decoder是怎么输入?)transformer 模型的decoder部分 带gif动图

训练的时候并行,预测的时候串行
训练阶段所有encoder的正确的输入输出都是已知的,所以可以并行执行,因为我们拿ground truth进行训练,预测阶段我们并不能知道decoder会输出什么,所以只能逐个生成。
以翻译为例,训练阶段我是知道decoder最终输出是“我爱中国”,所以decoder的【输入】在训练阶段分别为(1)起始符(2)起始符+我(3)起始符+我+爱(4)起始符+我+爱+中国,因为我们知道正确的最终输出是什么,所以这4个阶段是可以并行执行的
但是预测阶段,我们是不知道decoder的输出的,所以我们只能decoder的输入只能逐步进行(1)起始符(2)起始符+decoder预测单词1(3)起始符+decoder预测单词1+decoder预测单词2,这样
在这里插入图片描述

原文链接:https://www.zhihu.com/question/337886108/answer/770243956

308 人赞同了该回答

创建于: 2019-11-13 18:23:37   编辑于: 2020-06-22 01:03:14

正好最近在学习Transformer,回答一下,可能有误,欢迎指正


要弄清楚Decoder的输入输出,关键在于图示三个箭头的位置:


以翻译为例:

  • 输入:我爱中国
  • 输出: I Love China

因为输入(“我爱中国”)在Encoder中进行了编码,这里我们具体讨论Decoder的操作,也就是如何得到输出(“L Love China”)的过程。

Decoder执行步骤

Time Step 1

    • 初始输入: 起始符</s> + Positional Encoding(位置编码)
    • 中间输入:(我爱中国)Encoder Embedding
    • 最终输出:产生预测“I”

Time Step 2

    • 初始输入:起始符</s> + “I”+ Positonal Encoding
    • 中间输入:(我爱中国)Encoder Embedding
    • 最终输出:产生预测“Love”

Time Step 3

    • 初始输入:起始符</s> + “I”+ “Love”+ Positonal Encoding
    • 中间输入:(我爱中国)Encoder Embedding
    • 最终输出:产生预测“China”

【图示】



操作:整体右移一位(Shifted Right)

细心的同学会发现论文在Decoder的输入上,对Outputs有Shifted Right操作。

Shifted Right 实质上是给输出添加起始符/结束符,方便预测第一个Token/结束预测过程。

正常的输出序列位置关系如下:

  • 0-"I"
  • 1-"Love"
  • 2-"China"

但在执行的过程中,我们在初始输出中添加了起始符</s>,相当于将输出整体右移一位(Shifted Right),所以输出序列变成如下情况:

  • 0-</s>【起始符】
  • 1-“I”
  • 2-“Love”
  • 3-“China”

这样我们就可以通过起始符</s>预测“I”,也就是通过起始符预测实际的第一个输出。

【总结】

Transformer Decoder的输入:

  • 初始输入:前一时刻Decoder输入+前一时刻Decoder的预测结果 + Positional Encoding
  • 中间输入:Encoder Embedding
  • Shifted Right:在输出前添加起始符,方便预测第一个Token

参考文献:


【维度笔记】

赞同 308​ 49 条评论
分享
收藏 ​ 喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
  • 15
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Transformer模型中的Decoder是一个由多个Decoder Layer组成的堆叠结构,每个Decoder Layer包括两个子层:一个自注意力子层和一个前馈子层。Decoder的输入是一个由Encoder输出的上下文向量和一个可变长度的目标序列。Decoder的任务是生成一个与目标序列等长的输出序列,其中每个位置的输出都是基于之前的输出和上下文向量计算得到的。 Decoder的自注意力子层与Encoder的自注意力子层类似,但是在计算注意力权重时,Decoder会对目标序列进行遮挡,以确保模型只关注未来的输入。具体来说,对于位置i,Decoder只会考虑目标序列中在位置j<=i的输入,这种遮挡方式被称为“Masked Self-Attention”。 Decoder的前馈子层包括两个全连接层和一个激活函数,其中第一个全连接层的输出维度与输入维度相同,第二个全连接层的输出维度与模型的隐藏状态维度相同。这样做的目的是扩展模型的表示能力,提高模型在序列生成任务上的性能。 在Decoder中,每个位置的输出都是基于之前的输出和上下文向量计算得到的。具体来说,对于位置i,Decoder会首先将上一时刻的输出作为输入,并且计算出一个上下文向量,然后使用该向量和目标序列中第i个位置的输入作为输入,计算出该位置的输出。这个过程可以通过堆叠多个Decoder Layer来增强模型的表示能力,从而提高模型在序列生成任务上的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值