自注意力机制(self-attention)

B站视频-李宏毅机器学习2021-自注意力机制

1.要解决的问题

当把输入看成一个向量,输出是数值或者类别。但是如果遇到更复杂的问题呢?

假设输入是多个向量,而且数目不固定,要怎么处理呢?

总结-自注意力机制要解决的问题是:当神经网络的输入是多个大小不一样的向量,并且可能因为不同向量之间有一定的关系,而在训练时却无法充分发挥这些关系,导致模型训练结果较差。

(1)输入vector set as input —向量集输入举例

例1 文字处理

假设输入是一句英语,显然每个单词的长短不一,并且每个词汇对应一个向量,所以输入是多个长短不一的向量。

如何将词汇表示成向量?

如下图所示,第一种方式可以利用one-hot encoding,但是这种方式下每一个词之间没有关系。第二种方式是word enbedding,很显然这种方式下类别相同的词聚集在一起。

共同点:一个词对应一个向量,即一句话对应一个向量集。

例2 一段声音也可以是一个向量集

(2)那么输出是什么

三种可能性

  • 每一个向量都有一个标签
  • 举例 

  • 一整个向量集的输入对应一个标签
  •  

    举例

  • 机器自己决定输出标签的个数 
  •  

    2、引出自注意力机制

    主要讲的是上述第一种情况,每一个输入向量对应一个标签,这种情况又叫做Sequence Labeling

    问题1:前提-该句中有两个saw怎么判断它们的词性。引出有没有可能让FC考虑上下文?

    答:FC可以考虑一个window

    问题2:如果某个任务需要考虑整个序列?

    答:如果让一个window包括整个序列,但是这会让FC参数非常多,变得很复杂。

     这时,自注意力机制应运而生。可以考虑一整个序列

    3、怎么运作(即怎么产生b1)

    1、根据a1找到跟它相关的,每一个向量跟a1之间的关联程度用α来表示。

    怎么计算α呢–常用方法Dot-product

    两个向量作为输入,直接输出α,具体是输入的两个向量分别乘不同的矩阵,得到q,k,然后进行点乘即可得到α

     

     怎么套用到self-attention呢

     计算出a1和每一个向量的关联性之后,别忘了计算和自己的关联性。要做一个softmax,也可以用别的函数,比如relu

     得到α‘(1,1)这些之后,要根据α‘来抽取重要的信息

    怎么抽取?每一个向量乘以一个新的W(v)得到新的向量…….。

     以此类推可以得到b2/b3/b4,要注意的是b1到b4不是依次产生的,是同时计算得到

      

    来源:oyou-2021

    物联沃分享整理
    物联沃-IOTWORD物联网 » 自注意力机制(self-attention)

    发表评论