如果依照前面讲到的,self-attention只有vector之间的相关联性,并没有位置的资讯
那我们可以使用一个positional vector,,把这个加进,就可以将位置资讯加入input了
但是还有一个问题是,这个是人设定的,并不是自动产生的
在attention is all you need这篇论文中,只有用cos、sin的function来产生positional vector
但是在後续的一些论文中,有提出用不同的方法来产生出positional vector,但是目前并没有说哪一个方法所产生出来的positional vector是最好的,因此对於自己要train的资料集,还是需要自己survey哪一个方法是最有用的
self-attention可以用在很多地方上面,现在比较多的应用都是在Natural Langue Processing(自然语言处理),比较常见的方法有两个
由於之後主要会进入到实作的部分,在做推荐系统上面可能会有机会用到上面提到的这两种方法,到时候再详细解释
如果我们是用self-attention来处理图片会发生什麽事情呢?
self-attention是在一张图片中的某一个pixel产生query,其他的pixel产生key,所以每一个pixel都会考虑到和整张图片的相关联性
但是CNN只会去考虑到影像中的receptive field,这个范围可能是3x3的范围
所以可以说CNN是简化版的self-attention,而self-attention是比较复杂的CNN
这两个model比较起来,如果self-attention的参数设定的好的话,是可以达到跟CNN一样的效果的
由於self-attention是比较广泛的CNN,而CNN是有受限制的self-attention
但是受限制的CNN在资料集比较小的时候反而效果比较好
而self-attention在资料集大的时候效果比较好
因此在图像辨识上要使用self-attention或是CNN可以取决於资料集的大小
RNN也是要处理一个序列(Sequence)的input
这边来简单解释一下RNN
一开始会有一个memory的vector,另外有一个RNN的model
第一个vector和memory的vector会被丢进RNN,RNN会产生一个hidden layer,在经过FC(全连阶层)就可以得到第一个输出
第二个输出则是要将第一个hidden layer的资料跟第二个vector一起丢进RNN,再产生第二个hidden layer,经过FC(全连阶层)得到第二个输出
之後的都以此类推
那他们最主要的差别就是,RNN会因为传递的越多,导致资讯流失的越多,因此图中右上方的黄色输出是很难考虑到左下方的蓝色输入的
但是self-attention只需要蓝色的输入给一个query,黄色的输入给一个key,做内积之後就会知道相似程度了,因此self-attention在考虑前面的输入时,是处理的比较好的
另外一个大问题就是运算速度
由於前面有提到说self-attention是平行运算的,但是RNN要等到前面的输出结果出来之後,才能够再去做接续的动作,因此self-attention的运算速度是比较快的
今天将self-attention的部分讲解完了,明天开始会讲解如何使用azure来实作capsule跟self-attention,由於我没有使用过azure,因此边学边写文章吧
<<: 从零开始学游戏开发:入门程序实作 Part.7 重新计分
>>: 【Day13】 AutoVC 实作 Pytorch 篇 - 2
流程图符号及意义 基本常用的几种符号及其意义: 起止符号:表示程序的开始与结束。 流程符号:表示流程...
10.4 用矩阵角度看 APSP 从前两天的文章可以看得出来,如果我们想要找出从 s 到 t 的最短...
一、前言 因公司有各种固定时间的麻烦事情得使用ibm来做,刚好也熟悉Uipath,事情又轮到我,只能...
Unit Test 应用於使用重构与测试手法优化 C# Code-3-前言 昨天已经把 DemoCa...
Vue 由前 Google 工程师尤雨溪在 2014 年 2 月所建立的一套开放源码(Open So...