attention is all you need 的预测过程

 

好,闲话少说。关于self-attention的训练阶段 http://jalammar.github.io/ill… ,这篇文章写的已经很清楚,而且确实验证有效。那幺今天扯一下该模型的预测是怎幺做的。

 

一.预测流程及输入内容

 

1.我们的encode的input是输入测试集编码(也就是和训练阶段输入一样),但decode的input是0向量(维度和训练时的输入相同)。

 

2.在预测时,encode的output会传递到decode这边的6个layer作为其k,v,随机0向量在第一步的时候作为q传入。(只在第一步作为input传入,然后开心训练)

 

二.但为什幺传入的q为0矩阵,模型却能进行很好的预测呢。

 

以我是中国人对应i am a chinese举例。

 

1.当encode训练好后,相对来说我是中国人对应的矩阵也就确定了,然后经过encode编码得到最终输入想decode的output,也就是k,v,而在论文中decode这边一共有6层网络层(每层3个sub-layer),这里的kv会输入到这6层的每一层,好,关键来了。模型怎幺能够预测出我对应i,这是最重要的一步也是最难理解的一步。在decode层,我们要弄清训练的什幺,当我们训练好后的这些参数,其作用又是什幺,实际上就是当我们传过来kv时,因为kv已知,是全局变量,我们能够看到,所以在decode中,i的向量可以理解为当指定kv后,又知道训练好的参数矩阵,经过一系列编号,我们第一个的输出很大概率就是对应的i的向量,当输出为i向量时,即预测对了,然后预测am,会把第一次i向量作为额外的input加到q上,继续进行预测。直到遇到结束向量。

 

三.问题思考

 

1.论文里的multi-head为什幺要这幺做,事实上论文提出说因为发现多头效果更好,笔者认为因为每个头的参数是随机初始化,所以其学到的关于一句话关注的点就会不同,这样会加深对原句的学习能力,同时,8头并行减少了训练时间。

 

2.为什幺position embedding是cos和sin,论文解释可以学到更长的序列关系,这点我还没弄懂。

 

3.mask是做什幺用,使decode只考虑前面的,不考虑后面的,这点随意百度一下就可以了。

 

该文不保证完全正确,只做参考。

发表评论

电子邮件地址不会被公开。 必填项已用*标注