自注意力机制(Self-attention)(上)

通常所做的操作都是输入一个向量到模型中,假设的型输入向量是个数不一样d呢?

自注意力机制(Self-attention)(上)_第1张图片

如果输入是句子的话,那么模型的输入个数就是不一样的,可以对所有单词用向量表示,如下图,但是这就造成每一个向量之间没有任何关系,所以可以进行Word Embedding,有关联的就会聚集在一起

自注意力机制(Self-attention)(上)_第2张图片

比如输入一段语音,每25ms为一个向量,每移动10ms为另一个向量,那么一秒钟就有100个向量

自注意力机制(Self-attention)(上)_第3张图片

一个social network,一个图表也可以看做一堆向量。Graph就是一堆向量。

自注意力机制(Self-attention)(上)_第4张图片

一个分子也可以看作为Graph

自注意力机制(Self-attention)(上)_第5张图片

输入是一堆向量,输出的可能性有

①每一个向量都对应的一个label(如文字词性标注、语音识别等)

自注意力机制(Self-attention)(上)_第6张图片

②整个sequence有一个label(如一段话的积极还是消极、语音语色识别、分子的性质识别)

自注意力机制(Self-attention)(上)_第7张图片

③机器自己决定输出label的个数

自注意力机制(Self-attention)(上)_第8张图片

现在着重介绍第一种

若采用把sequence拆成一个个向量各个击破,会有很大不足,如以下saw会输出一样,区分不出来

自注意力机制(Self-attention)(上)_第9张图片

可不可以在全连接层的各个向量前后串起来,使之考虑到相邻向量的关系,把window变大一点,就可以找到frame?

这个方法不好

自注意力机制(Self-attention)(上)_第10张图片

更好的办法如下

自注意力机制(Self-attention)(上)_第11张图片

经过Self-attention模块,每个向量变成考虑到整个sequence的向量,并且这个self-attention可以使用很多次

自注意力机制(Self-attention)(上)_第12张图片

Self-attention的 工作原理

模块的输入可以是input也可以是隐藏层的输出,模块的输出都是考虑到所有输入之间的关系

接下来解释一下怎么产生的b_{1}这个向量

找到sequence中其他向量哪一个和a_{1}最相关,每一个向量和a_{1}的关联程度用α来表示

自注意力机制(Self-attention)(上)_第13张图片

自动决定两个向量之间的关联性

需要一个计算Attention的模组,常见的做法为Dot-product(最常用)

自注意力机制(Self-attention)(上)_第14张图片

常见的方法还有Additive

自注意力机制(Self-attention)(上)_第15张图片

 

套用在Self-attentin

自注意力机制(Self-attention)(上)_第16张图片

自注意力机制(Self-attention)(上)_第17张图片

知道哪些向量和a_{1}最有关系,接下来根据α的值抽取信息

自注意力机制(Self-attention)(上)_第18张图片

如果a_{1}a_{2}关联性很大,那么\alpha _{12}很大,那么得到的b_{1}就和v_{2}比较接近。即谁的attention的分数最大,谁的那个v就会Dominant你抽出来的结果

即输出b1的原理

自注意力机制(Self-attention)(上)_第19张图片

你可能感兴趣的:(李宏毅机器学习笔记,机器学习,人工智能)