Transformer Decoder详解

这两天在学习Transformer,看了李沐的论文解读NLP从入门到放弃,看完这两个视频算是大致明白了Transformer的结构。

关于Self-Attention、Multi-Head Attention以及Poisitonal Encoding强烈建议看一下这篇文章:详解Transformer中Self-Attention以及Multi-Head Attention

但是对于Decoder部分,依然是有点模糊,不知道Decoder的输入到底是什么,也不知道Decoder到底是不是并行计算,还有Encoder和Decoder之间的交互也不是很清晰,于是去看了李宏毅的讲解视频:强烈推荐!台大李宏毅自注意力机制和Transformer详解!,才算是明白了Decoder的运行机制,于是想着总结一下。

1. Decoder的输入到底是什么

在train模式下和在test模式下Decoder的输入是不同的,在train模式下Decoder的输入是Ground Truth,也就是不管输出是什么,会将正确答案当做输入,这种模式叫做teacher-forcing。但是在test模式下根本没有Ground Truth去teach,那只能将已经出现的词的输出(注意这里的输出是走完整个Decoder计算得到预测结果而不是走完一层Decoder的输出)当做下一次Decoder计算的输入,我想这也是论文中shifted right的意思,一直往右移。

2. Decoder到底是不是并行计算的

在Transformer中,最被人津津乐道,也是他相较于RNN类型模型最大的优点之一就是他可以并行计算,但是这个并行计算仅限于在Encoder中,在Encoder中是将所有的词一起输入一起计算,但是在Decoder中不是的,在Decoder中依然是像RNN一样一个一个词输入,将已经出现的词计算得到的Q与Encoder计算得到的K,V进行计算,经过了全部Decoder层再经过FC+Softmax得到结果之后再把结果当做Decoder的输入再走一遍整个流程直到得到END标签。

3. Encoder与Decoder之间的交互

Encoder与Decoder之间的交互不是每一层一一对应的,而是Encoder 6层全部计算完得到K和V之后再将K和V传给Decoder的每一层与其计算得到的Q进行计算。但是看了李宏毅老师的视频,发现这是不一定的,可以自己发挥想象力自定义Encoder和Decoder之间的连接方式。


参考资料

Transformer中的Decoder详解_CuddleSabe的博客-CSDN博客_transformer的decoder//与本文互补

猜你喜欢

转载自blog.csdn.net/weixin_43332715/article/details/124943016