自注意力机制

视频链接:第四节 2021 - 自注意力机制(Self-attention)(上)_哔哩哔哩_bilibili

大多数任务的输入是一个向量,输出是一个标量或者类别。当输入是一排长度不确定的数量时(例如词性标注 语音识别 翻译)我们可以采用self-attention来进行计算。

Sequence Labeling

自注意力机制_第1张图片

  • 一个典型的输入和输出向量长短一样的例子就是Sequence Labeling
  • 如果我们单独采用FC网络对输入运算形成输出,此时没有考虑到上下文,会导致第一个saw(看见)和第二个saw(锯子)两者的结果一致。因此需要让FC网络考虑上下文的资讯,给FC输入一整个window的资讯,但是如何确定window的大小?因为输入序列的长度有长有短不好确定,因此我们可以采用self-attention模块来考虑一整个input的资讯。

Self-attention

由于Self-attention模块考虑到一整个图片的感受野,而CNN只有固定大小的感受野,因此Self-attention模块可以使CNN的复杂版。同时Self-attention模块考虑到所有序列的资讯,并且根据所有的资讯做出一个输出的结果,他也可以不断叠加。

自注意力机制_第2张图片
自注意力机制_第3张图片

Self-attention模块的计算方式

 自注意力机制_第4张图片自注意力机制_第5张图片

  •  输入一排序列,序列中每个单独的token分别通过对矩阵W^q,W^k,W^v得到q,k,v三个向量,对于每一个token的q(query)向量需要寻找序列中每一个k(key)的点积,得到一个数值在经过softmax(或者relu)函数,形成比例在和v获得乘积,相加得到输出的结果。
  • self-attention模块中的qkv矩阵都来自于self-attention本身,attention模块中q来自于解码器,kv来自于编码器。
  • 具体的计算情况如下图所示。

 自注意力机制_第6张图片自注意力机制_第7张图片

 自注意力机制_第8张图片自注意力机制_第9张图片

  •  虽然计算看起来较为复杂,但是实际上的参数很少,只需要在不断训练中获得W矩阵的数值就可以,因此较为方便。

Multi-head Self-attention

由于每个向量可能会有不同的相关性,因此我们可以利用q去寻找不同的相关性。得到不同相关性的输出。

自注意力机制_第10张图片

Positional  Encoding 

发现对于self-attention而言所有的每两个token之间的位置其实是一样的,因此我们可以采用Positional  Encoding 使输入序列中的每两个token之间的位置不一样。

自注意力机制_第11张图片

你可能感兴趣的:(毕业设计,深度学习,人工智能)