图解Transformer

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情


终于到transformer了,之前又是自注意力机制又是多头注意力机制,其实都是在为transformer做铺垫。 transformer,是微软搞出来的,出自论文:Attention Is All You Need1 ,之后有时间的话我可能会写一下这个论文的精读。

先祭出论文原文的transformer结构图,接下来我们就讲一下这个图里的结构到底是干什么的。

image.png

我们依旧使用这个例子:

Jane visite l’Afrique en septembre.

现在我们为其加上起始和结束符:

<sos> Jane visite l’Afrique en septembre <eos>

先看一下我们的encoder部分。 我们将输入的embedding放进一个具有多头注意力层的encoder编码器中。像多头注意力层传输由输入计算获得的q、k、v。然后这个多头注意力层会产生一个可以传输到前馈神经网络的矩阵。这个网络的作用是获得句子中有哪些特征。论文联文中说这个过程要重复N次,实际上一般最常见的是重复6次左右。我们这里也假设是经过6次操作。所以经过6次编码器的重复操作之后,我们得到的结果会被输入到一个decoder解码器中。

image.png

接下来我们来构造一下解码器的框架。 因为我们在这里是要做一个机器翻译,所以解码器的作用就是用于输出翻译之后的句子。对于我们的输出第一个字符是<sos>,即句子的开始标识符。

当我们的解码器要开始工作的时候,无论我们要生成的内容是什么,他每一次执行都要将之前的输出再作为输入进行计算。

image.png 之前的输出作为输入传入解码器之后,进行计算,得到当前时间步下的q、k、v。之后进入到一个多头注意力层之中。

image.png

解码器第一部分的这个多头注意力层是用当前时间步的输入计算出一个q来传递给下一个多头注意的一层。

你可以理解为这个q的意思就是“当到前面输出是这些内容的时候,下一个输出该是什么呢。”

image.png

现在解码器中第二个多头注意力层的q已经有了,那它的K和V来自哪里呢。现在就用到了我们之前说的编码器那部分,编码器最后的计算结果是要传输给解码器作为K和V的。

image.png

第二层的多头注意力计算完毕之后,也会将其结果输入到一个前馈神经网络之中。同样解码器的操作也会重复N次。并且在这个过程中,你需要从前馈神经网络中提取到输出的值,再次返还给这个解码器框架。

image.png

至于解码器每次的输出在作为输入返回给解码器这个事情,给兄弟们做一个动画直观的感受一下。

GIF 2022-3-14 14-09-19.gif

现在基本的过程已经搞明白了,但是你会感觉我画的这个图跟开头我们放的那一张attention is on you need原文里边那张图还是有些出入的。缺少了一些细节部分,现在我们就补充一下这些细节部分。

看底下那两个圈,那两个圈圈是进行了一个位置编码。

然后可以看到灰色的折线箭头,灰色的折线箭头是像ResNet一样进行了一个残差连接。

之后我们可以看到加入了灰色的add&normal框框,在这里你可以认为他是做了一个batch normal。

layer normal和batch normal的区别在于normalization的时候计算张量的维度方向不一样。

最后在解码器的输出部分,其实它先是将计算结果放入到一个线性层之中,线性层再经过softmax计算得到下一个输出。

image.png

  1. Attention Is All You Need - arixv

猜你喜欢

转载自juejin.im/post/7105555814642876424