Transformer 的解码器

解码器会接受编码器生成的词向量(图片向量,视频向量),然后通过这个词向量去生成翻译的结果。

解码器的self-attention在编码已经生成的单词

假如目标词“我是一个学生”---》masked  

训练阶段:目标词“我是一个学生”是已知的,然后self-attention是对“我是一个学生”做计算

如果不做masked,每次训练阶段,都会获得所有的信息

测试阶段:

1.目标词未知,假设目标词是“我是一个老师”,self-attention第一次对“我”做计算

2.第二次对“我是”做计算

3.·····

(总结下:就是decoder的self-attention,用的是masked self-attention,同步)

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

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

训练阶段:(训练阶段主要是想寻找更好的参数,答案都是已知的,测试阶段答案是未知的,是要用参数来寻找答案)

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

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

测试阶段:解码器也会有输入,但是此时,测试的时候是不知道目标语句是什么的,这个时候,你每生成一个词,就会有多一个词放入目标语句中,每次生成的时候,都是已经生成的词(测试阶段只会把已经生成的词告诉解码器)(做测试要是能知道后面的那不就相当于玩赖了吗)

为了匹配,为了解决这个gap,masked self-attention就登场了,生成I 之前是编码器输入的k和v加上解码器输入的语句起始符,一般为<eop>,解码出第一个I。

掩码矩阵是作用在训练阶段的,目的就是让训练阶段和测试阶段生成的目标词匹配。

问题二:为什么Encoders给予decoders的是K、V矩阵?

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

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

K=V是源语句

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

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

encoder给decoder的encoder-decoder attention层的是K、V矩阵,不是新的词向量。

然后decoder通过masked self-attention求出新的Q矩阵。再用那个softmax公式得出概率值。

decoder将生成的词作为输入,而第一个词生成的过程是通过decoder初始化的Q来进行生成的,如果第一个词生成错了,后面生成的词会不会都有错误?

一个词生成对了,第二个词也会生成错误,这就是一个学习的过程,而且第二个词的生成不是完全取决于第一个词生成的正确性,还有编码器。

输入因任务不同会有不同。但是训练阶段,不做掩码就会把所有信息告诉解码器,做了掩码就不会了,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值