首页 > 其他 > 详细

tensor2tensor-transformer源码学习

时间:2020-06-06 19:19:06      阅读:139      评论:0      收藏:0      [点我收藏+]

1.多头注意力

多头注意力,我们可以看到源码中是进行了切割,从return的shape可以看出来。

技术分享图片

2.transformer编码部分

技术分享图片

 

可以看到它的输入就是经过emb和位置编码求和之后的输入。下面是正式使用到的编码函数:

技术分享图片

 

上面的编码函数中,主要调用还是多头注意力这个函数:

调用的语句:

技术分享图片

 

//注意,这里每次调用的时候第二个参数,也就是memory都是None,也就是query=momery。

 可以看到下面的query_antecedent就是经过预处理之后的输入,memory一开始是为None的。

技术分享图片

 

 进入上面的函数后,因为一开始的时候memory是None,那么就调用计算qkv的函数:

技术分享图片

 

 首先是对Q的计算:

技术分享图片

 

看起来这个过程也非常地简单,就是之前输入的变换*一个var(服从正态分布的随机取样的矩阵),Q=pre_process(input)*var技术分享图片

 

计算KV也是调用同样的函数,但是所用的ante不同,kv需要的是memory,但是此时因为memory是None,

技术分享图片

 

 compute一开始将query赋值给了memory:

技术分享图片

 

 然后把qkv切成了8个部分进行之后的

技术分享图片

 

下面进行attention操作:

技术分享图片

 

具体的公式操作的部分标注出来:

技术分享图片

 

 上面计算完attention之后,又有了一个o:

技术分享图片

 

但是我不太明白这个o是干嘛用的,也许它只是用来做一个变换。

在transformer_layers.py文件中,在调用了common_attention.multihead_attention:

技术分享图片

 

 可以看到返回y之后,然后进行了后处理得到x,之后又进行了全连接层,之后又后处理,然后有一个for循环,共有几层,encoder应该是6层,那么就是6次循环了。这样就获取到了encoder的输出:

技术分享图片

 

 之后就返回到了这里?encoder输出结果。技术分享图片

 

tensor2tensor-transformer源码学习

原文:https://www.cnblogs.com/BlueBlueSea/p/13055916.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!