19 Transformer 解码器的两个为什么(为什么做掩码、为什么用编码器-解码器注意力)


Transformer 的编码器和解码器

img

问题一:为什么 Decoder 需要做 Mask

机器翻译:源语句(我爱中国),目标语句(I love China)

为了解决训练阶段和测试阶段的 gap(不匹配)

训练阶段:解码器会有输入,这个输入是目标语句,就是 I love China,通过已经生成的词,去让解码器更好的生成(每一次都会把所有信息告诉解码器)

测试阶段:解码器也会有输入,但是此时,测试的时候是不知道目标语句是什么的,这个时候,你每生成一个词,就会有多一个词放入目标语句中,每次生成的时候,都是已经生成的词(测试阶段只会把已经生成的词告诉解码器)

为了匹配,为了解决这个 gap,masked Self-Attention 就登场了,我在训练阶段,我就做一个 masked,当你生成第一个词,我啥也不告诉你,当你生成第二个词,我告诉第一个词

img

问题二:为什么 Encoder 给予 Decoders 的是 K、V 矩阵

Q来源解码器,K=V来源于编码器

Q是查询变量,Q 是已经生成的词

K=V 是源语句

当我们生成这个词的时候,通过已经生成的词和源语句做自注意力,就是确定源语句中哪些词对接下来的词的生成更有作用,首先他就能找到当前生成词

我爱中国

通过部分(生成的词)去全部(源语句)的里面挑重点

Q 是源语句,K,V 是已经生成的词,源语句去已经生成的词里找重点 ,找信息,已经生成的词里面压根就没有下一个词

解决了以前的 seq2seq 框架的问题

lstm 做编码器(得到词向量 C),再用 lstm 做解码器做生成

用这种方法去生成词,每一次生成词,都是通过 C 的全部信息去生成

很多信息对于当前生成词而言都是没有意义的

用 Pytorch 去构建 Transformer 的源码()

posted @ 2022-07-12 16:59  B站-水论文的程序猿  阅读(4810)  评论(0编辑  收藏  举报