Day 13 Self-attention(七) Positional Encoding、self-attention和其他model的比较

Positional Encoding

如果依照前面讲到的,self-attention只有vector之间的相关联性,并没有位置的资讯

那我们可以使用一个positional vector,https://chart.googleapis.com/chart?cht=tx&chl=e%5Ei,把这个https://chart.googleapis.com/chart?cht=tx&chl=e%5Ei加进https://chart.googleapis.com/chart?cht=tx&chl=a%5Ei,就可以将位置资讯加入input了

但是还有一个问题是,这个https://chart.googleapis.com/chart?cht=tx&chl=e%5Ei是人设定的,并不是自动产生的

在attention is all you need这篇论文中,只有用cos、sin的function来产生positional vector

但是在後续的一些论文中,有提出用不同的方法来产生出positional vector,但是目前并没有说哪一个方法所产生出来的positional vector是最好的,因此对於自己要train的资料集,还是需要自己survey哪一个方法是最有用的

Applications

self-attention可以用在很多地方上面,现在比较多的应用都是在Natural Langue Processing(自然语言处理),比较常见的方法有两个

  • Transformer
  • Bert

由於之後主要会进入到实作的部分,在做推荐系统上面可能会有机会用到上面提到的这两种方法,到时候再详细解释

Self-attention v.s. CNN

如果我们是用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可以取决於资料集的大小

Self-attention v.s. RNN

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

[Day 7]从零开始学习 JS 的连续-30 Days---流程图

流程图符号及意义 基本常用的几种符号及其意义: 起止符号:表示程序的开始与结束。 流程符号:表示流程...

最短路径问题 (3)

10.4 用矩阵角度看 APSP 从前两天的文章可以看得出来,如果我们想要找出从 s 到 t 的最短...

[笔记] 用Uipath terminal activities 连接ibm iSeries

一、前言 因公司有各种固定时间的麻烦事情得使用ibm来做,刚好也熟悉Uipath,事情又轮到我,只能...

Day 29-Unit Test 应用於使用重构与测试手法优化 C# Code-3 (情境及应用-9)

Unit Test 应用於使用重构与测试手法优化 C# Code-3-前言 昨天已经把 DemoCa...

Day 2.来交朋友吧!-Vue.js是谁?

Vue 由前 Google 工程师尤雨溪在 2014 年 2 月所建立的一套开放源码(Open So...