对NLP中transformer里面decoder的理解

刚接触NLP这块,有两个关于transformer的问题:

1)为什么要有decoder?如果encoder后面直接接全连接不可以吗?

2)为什么decoder要有mask?为什么要按时间步一个字一个字翻译?这样的话,是不是英语从句翻译成汉语就不可行,比如 He is a person who wears a red t-shirt. -> 他是一个穿红色t恤的人。

想了下应该是下面的原因:

1)decoder相当于有两个输入,一个是encoder编码的全局语义信息(使得decoder能够看到完整的上下文信息),一个是模型的前期翻译结果(这个信息对最终的翻译结果也很重要),根据这两个输入决定下一个输出。

2)根据这个逻辑,每一个输出依赖前面的结果,那么必须mask掉后面的内容,因为这时后面的内容还没有生成。decoder的输入是模型的前期翻译结果,也就是拿模型的前期翻译结果做一个Q去和encoder编码的全局语义信息生成的K、V做attention,相当于去找现有结果在全局语义信息里面的相关性,根据这个相关性去决定下一个翻译结果(比如翻译到“他是一个”的时候,去encoder给的信息里面算attention,发现接下来需要翻译的词跟“wears a red t-shirt”相关性很强,那么就给出翻译“穿红色T恤”,接下来才是翻译“person”,也就是“的人”)。正是因为有从句这种需要跳跃翻译的问题,才需要attention算全局相关性,要不然直接查表就完事了。

3)mask也保证了模型在训练的时候可以并行计算,因为训练的时候我们知道label,也就是完整的翻译结果,那么为了并行计算需要把label后面的信息掩盖,因为每次计算需要用到前面的label信息而不能输入label后面的信息。但在测试的时候,是串行输出的,每个位置的翻译结果只依赖前面的翻译结果,mask不重要。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值