模型的输出:
类型一:一对一(Sequence Labeling)。e.g. 词性标注;语音辨识简化版,标注phonon;社交网络图,判断节点会否购买商品。--->Self-attention
类型二:多对一。e.g. sentiment analysis,语者辨识,判断分子特性
类型三:由模型自己决定(seq2seq)。e.g. 翻译、语音识别
第四节 2021 - 自注意力机制(Self-attention)(上)_哔哩哔哩_bilibili
self attention想要解决的问题:
此前,我们network的input都是一个向量,输出可能是一个数值或者一个类别。但是假设我们需要输入的是一排向量,并且向量的个数可能会发生改变,这个时候要怎么处理。
例子:
比如文字处理的时候:
将单词表示为向量的方法:One-hot Encoding。我们可以用很长的一个向量,来表示世界上所有的东西,但是这里有一个问题,它假设所有的词汇都是没有关系的,比如猫和狗,都是动物,但是这样没有办法把它分类在一起,没有语义的资讯。
另一个方法是Word Embedding:我们给每个词汇一个向量,这个向量里有语义的信息。如果将Word Embedding画出来,就会发现同类的单词就会聚集。
网路上可以载到Word Embedding,会给每个词汇一个向量,一个句子就是一排长度不一的向量
取一段语音信号作为window,把其中的信息描述为一个向量(frame帧),滑动这个窗口就得到这段语音的所有向量
有各式各样的做法可以用一个向量来描述一小段25millisecond里面的语音讯号
每个window移动10ms,古圣贤都试过了,
Graph:
①社交网络的每个节点就是一个人,节点之间的关系用线连接。每一个人就是一个向量
②分子上的每个原子就是一个向量(每个元素可用One-hot编码表示),分子就是一堆向量
2. 模型的输出
类型一:一对一(又叫Sequence Labeling)
每个输入向量对应一个输出标签。
文字处理:词性标注。
语音处理:一段声音信号里面有一串向量,每个向量对应一个音标。(作业二,语音辨识简化版)
图像处理:在社交网络中,比如给一个图片,机器要决定每一个节点的特性,比如说这个人会不会买某一个商品。
类型二:多对一
多个输入向量对应一个输出标签。
sentiment analysis,语者辨识(作业四),给出分子的结构, 判断亲水性or毒性...
类型三:由模型自己决定(又叫seq2seq任务,作业五)
不知道应该输出多少个标签,机器自行决定。
翻译:语言A到语言B,单词字符数目不同
语音识别
Sequence Labeling
我们可以用fully conneted network(FC),各个击破,每个向量分别输入FC,
但是这样会有瑕疵,比如输入I saw a saw(锯子),这两个saw,对于FC(fully conneted network,全连接网络,下同)来说,是一模一样的,但是实际上它们一个是v.,一个是n。
让FC考虑上下文,把这几个向量前后串起来,一起丢到FC里面。(作业二)
但如果今天我们有某个任务,不是考虑一个window就可以解决的,而是要考虑整个sequence才能解决的话,怎么办。如果开一个大的Window,我们输入的sequence是有长有短,那FC就需要非常多的参数,不止是很难训练,而且很容易过拟合。
更好的方法来考虑整个input sequence的资讯,----> self-attention的技术。
self-attention会把一整个sequence的资讯都吃进去,然后你输入几个向量,它就输出几个向量,这里用黑色的框框,表示它不是普通的向量,是考虑了一整个sequence的向量。
self-attention也可以和FC交替使用,用self-attention来处理整个sequence的资讯,FC来专注处理某一个位置的资讯。
关于self-attention最知名的文章《Attention is all you need》,Google 根据自注意力机制 在 paper中提出了 Transformer 架构。
self-attention是怎么运作的呢?
self-attention的input就是一串的向量,这个向量可能是整个网络的input,也可能是某个hidden layer的output,所以我们用a来表示它,代表前面它可能做过一些处理。
output一排b向量,这里的每一个b都是考虑了所有的a以后才生成出来的。
那么怎么产生b1这个向量呢?
第一个步骤:根据a1找出这个sequence里面和a1相关的其他向量
我们要做self-attention目的就是为了要考虑整个sequence,但是又不希望把整个sequence所有的资讯包在一个window里面,所以我們有一個特別的機制:根據a1這個向量、找出整個Sequence裡面、到底哪些部分对于 決定a1的Class/数值时,是需要用到的資訊
每一个向量和a1关联的程度,我们用一个数值α来表示。
那么这个α是怎么产生的呢?计算attention的模组。
这个模组,就是拿两个向量a1和a4作为输入,然后输出的是一个α。
怎么计算这个数值,有各种不同的做法,比较常见的有dot-product。(用在Transformer里的方法,当今最常用的,)
把