欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

self-attention is all you need(二)

发布时间:2024/3/24 编程问答 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 self-attention is all you need(二) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

过年的气息越来越浓厚了,那我们接着从self-attention is all you need (一)写下去

在self-attention is all you need (一)呢,我们已经操作过怎样跟据Input sequence得到output sequence。self-attention要做的事情,就是给定一排的input vector得到另外一排output vactor。之前我们已经操作过如何根据一排input sequence(a1~a4)得到b1,同理可以得到b2~b4。这里需要强调的一点呢,是b1~b4并不需要依序产生,而是一次同时被计算出来的。

接下来呢,我们从矩阵乘法的角度,再重新整理一遍self-attention的运作过程。

那self-attention是怎么运作的呢?现在我们已经知道说a1~a4中的每一个a啊,都要分别产生q、k、v。如果矩阵运算表示这样一个操作是什么样子呢?我们每一个a都左乘矩阵,得到,即。这些不同的a啊,你可以把它们合起来,当作一个矩阵来看待。什么意思呢?a1乘上得到,a2乘上得到,a3乘上得到,a4乘上得到。即:

那我们可以把vector a1~a4呢拼起来,形成一个大的矩阵,我们给它命名:I;同理,我们再把vector ~拼起来,形成一个大的矩阵,我们给它命名Q。所以我们从a1~a4得到 ~这一件事情,其实就是把一个叫做I的矩阵,左乘矩阵,呢其实是nerve的参数,得到大Q,大Q的四个Colum就是 ~ 。

那么接下来怎么产生k跟v呢?它们的操作跟q是一摸一样的。 我们每一个a都左乘矩阵,得到,即。同理啊,这些不同的a啊,你仍可以把它们合起来,当作一个矩阵来看待。即 a1乘上得到,a2乘上得到 ,a3乘上得到,a4乘上得到。~ 拼起来,形成一个大的矩阵,我们把它叫做大K,大K的四个Colum就是 ~  

那v的产生就不赘述了,是相同的道理,从下图我们可以很清楚的查看到 

所以每一个a怎么得到Q,K,V呢,其实就是把输入的vector sequence乘上三个不同的矩阵、、,你就的到了Q,得到了K,得到了V。

那么接下来我们要做一个什么事情呢?在self-attention is all you need(一)里有提到,我们根据a1找出这个sequence(a1~a4)里面,跟a1相关的其它向量来产生b1(其他同理啦),所以我们会做这样的一个操作得到attention score:

这边呢,为了方便,我们用横向的矩形框代表转置 ,希望不会让你产生误解。上面这四个步骤的操作啊,你其实可以把它们拼起来,看作是矩阵跟向量相乘。你可以把~拼起来,当作是一个矩阵的四个row。

那我们刚才有提到呢,不止q1要跟k1~k4计算attention score,q2也要对k1~k4计算attention score,这个操作啊和上面是一摸一样。那么同理q3、q4也分别要和k1~k4计算attention score,道理呢也就是上面的道理。所以我们可以再把attention score拼起来,形成一个大的矩阵。

所以这些attention score是怎么来的,可以看作 是两个矩阵的相乘,一个矩阵它的row啊就是k1~k4,另外一个矩阵它的Colum啊就是q1~q4,这样一相乘,就得到了attention的分数。我们把k的transpose叫做,得到的attention score矩阵呢我们把它叫做A。那我们之前有提到会对attention score呢做一下softmax,得到

我们计算完 以后,接下来呢,里的Colum乘上对应的v,就的得到了b1~b4(我们以b1为例先)

 那么你可能猜到了,我们再把b1~b4拼起来,就有如下的结果:

所以整个self-attention啊,其实就是一连串的矩阵乘法而已。怎么说呢,下面图示一目了然,不需要我多赘述了

可以看到,在self-attention里面呢,唯一需要学习的参数就只有  、、而已。

未完待续~

总结

以上是生活随笔为你收集整理的self-attention is all you need(二)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。