12.【李宏毅机器学习2021】Transformer (上)_哔哩哔哩_bilibili
注意力机制
INPUT:a set of vectors
如果input is a set of vectors(sequence)而不是单单的vector,比如
example 1:句子、文段
如此,向量的表示方法可分为以下两种:
1。one-hot encoding
2.word embedding
one-hot encoding看不出语义的资讯,而word embedding可以。apple和orange看不出有什么相似的。
example 2:音频
音频包含的讯号非常可观,1min就包含了6000个向量哎。
example 3:图
每一个节点看作一个vector
化学结构也是一种graph 相关的
OUTPUT:a set of vectors
1.Each vector has a label
label can be numbers(regression),classes(classification)
2.The whole sequence has a label.
eg:判断一整句话是正面的还是负面的。 sentiment analysis
3.model decides the number of labels itself.(seq2seq)
situation 1 一般又称为 sequence labeling
Sequence Labeling
两个saw难以分别?通过考虑上下文,在window内进行决定词性
self attention会吃一整个sequence的资讯,这种考虑了context的处理后向量(黑色方框),再丢进fully connected
SELF ATTENTION计算过程
每一个b都是考虑了所有的a sequence后才生成的
以b1为例,看一下怎么产生b1的吧?
step 1:通过计算alpha,找出跟a1最relevant的ax(dot-product)
根据a1,找出sequence里所有跟a1 relevant的向量。a1和a4有多相关?通过dot-product计算模组,赋给他们一个alpha。
attention score alpha的计算示意图如下,注意要跟自身计算(a1,1)。
得到四个alpha,a11,a12,a13,a14.然后送入soft-max(or relu。。。。)层,得到a11‘。
上述这一步,就可以得到4个alpha,根据数值的大小便可以判断出,a?跟a1是关联度最大的。
step 2:利用alpha再计算,得出b1
由此,我们就做到了由一整个sequence得到b1。
input vector(a)-------->SELF ATTENTION---------->output(b)
那如果从矩阵乘法的角度去理解SELF-ATTENTION呢?
Multi-head Self-attention
除了普通的self attention,我们可能还需要多头的self-attention。
其产生,是由于可能需要多个q,来表征多个relevance的需求。(different types of relevance)
如果q有两个,相应的,k,v也有两个。
q有两个后,计算b的过程中,注意:qi,1和ki,1 k i+1,1 … k j,1相乘,而不跟k i,2相乘。
(q1只对k1做attention)
对于另一个head,q2只对k2做attention
相应地,求出bi,2
目前为止,会发现self attention少了一个很重要的资讯————position information
Positional Encoding
input出现在sequence的前面?中间?后面?
eg:动词不容易出现在句首,那么一个句首的单词可能就不太是动词。
在有必要的情况下,把位置信息加入vector中。
这种位置信息向量,即是手动的(hand-crafted)。
SELF-ATTENTION的应用
一张图片看作是一个tensor(5 * 10 * 3)
CNN可看作简化版的self-attention
随着资料量越来越多,self attention(浅蓝色)的效果越来越好,直至超过CNN(灰色),这是因为self attention的弹性比较好。