1. 模型结构示意图:
这显示transformer有以下特征:
- encoder部分有一种堆叠的效果,可以堆叠多个layer,而且每一层layer的模式是一样的。
- 每一层都有self attention的效果,而所谓的self attention就是让词两两之间产生作用,并进行sum求和。
- 可以预想到,这样可以进行长距离依赖的捕捉。
- 在decoder阶段,需要考虑最后一层的encoder的输出,以及之前时刻的decoder在当前layer的输出结果,来得到下一层的输入。
2. 如何进行self attention?
可以看图片的时候思考几个问题:
- transformer中是用什么方法进行的attention?dot product,biaffine etc?
- 进行attention的表示与词的原始的embedding之间有何关系?
- 计算attention时,一个词作为query或者是作为被attent的词,的表示是否有区别?如何做到这一点。
首先得到一个词的q,k,v的表示,作为query,key和最后的value都不一样。这样为之后的点积起效果打下了预备。
注意这里面有根据维度进行归一化的内容。然后要对value做加权。
这个式子代码里面应该能直接看到。很系统完整。描述了整个self attention layer的工作的流程。因为示例中有两个单词,所以Q的第一维是2。
multihead的实质就是多搞几套。如果原来的输出的Z的维度是,的值为4,那么在multihead下最终的Z的维度就是,不过是将最终的结果concat一下罢了。将concat的结果与乘一下得到本层输出。