self attention(上)_ 自注意力结构解读_by Li 弘毅

首先 明白一个关键点:

self attetion: 自注意力, 什么叫做自注意力;

衡量各个输入向量之间的关联度,(或称相关性)

  1. 自注意力的本意:

举例讲来, 现在有一个输入序列, 该输入序列由12 个向量构成,
那么自注意力,便是对这12个输入向量之间, 相互算各自的关联性, 这是自注意力的初衷;

而在输入的多个向量之间寻找相关性, 这个相关性,通过注意力分数来体现了。

  1. 多头注意力:

理解这一点, 便知道了 多头注意力的 思想了;
单个自注意力, 使用的是一种方式来衡量了 各个输入向量之间的相关性;

那么,多个注意力便是用多种方式来衡量各个输入向量之间的相关性;

1. 模型的输入

1.1 输入单个向量 或 多个向量

现实任务中,

  1. 有输入单个向量的任务;

  2. 也有同时输入多个向量, 即输入一个序列;
    请添加图片描述

1.2 输入vector的生成

输入向量的编码有多种形式:

  1. one-hot encoding:
    [ 1 0 0 0 0 0 …]

  2. Word Embedding:
    相比于 One hot 向量, 词嵌入向量,会包含语义的信息,
    每个词汇对应一个 向量, 一个句子 对应了 多个 长度不相等的向量, 此时一个句子, 是一个序列 sequence,
    比方说 将词嵌入向量 二维坐标表示出来是, 给个类别的下 的 实例, 会各自 聚类在某一处;
    在这里插入图片描述

  3. 将一帧长度的音频信号 表示成 一个向量;
    即 有 多种 做法, 可以 用一个向量 来 表示出 一帧 长度内的语音信号;

在这里插入图片描述

1.3 输入与输出

这里着重介绍第一种, 输出向量的长度, 与输入向量的个数对应;

在这里插入图片描述

2. self-attention 产生的原因:

以 词性标注任务,
对一个句子 输入的每一个单词 进行 词性划分;
在这里插入图片描述
例如 :i saw a saw;
第一个saw 是 动词, 第二saw 是 名词 锯子;

此时,如何解决 对于全连接层, 相同的输入, 却要输出不同的结果?

解决方法: 考虑输入的上下文信息, 即该输入的前几个输入, 以及后面的几个输入, 考虑上下文的信息;
在这里插入图片描述

但是, 此时 又存在另外一个问题: 考虑输入的前多少个, 后多少个信息 才算合适的呢?
如果,将整个输入序列都覆盖住, 这样不但会增加FC 层的参数, 而且很容易产生过拟合;

那么输入时,该考虑输入的前后多少个信息才合适呢?
为了解决这个 问题, self -attention 出现了,

在这里插入图片描述
将单个向量 V V V 输入到 self attention 中:
self-attention 会考虑 整个输入序列,
得到一个包含上下文信息的向量 V 1 V1 V1 ,(即包含了 V的前后向量的信息);
然后在将包含上下文信息的向量 V 1 V1 V1 输入到 FC层中;

相比没有self attention 时, 是直接将 输入 V V V 输入到 FC层中;

从而FC 处理单个向量中的信息, 而 self -attention 处理了多个向量之间信息(即整个序列);

2.1 self -attention 实现机理:

那么 self -attention 是
如何做到将一个输入的向量经过变换之后 获得上下文信息的向量?

  1. 计算单个向量 a 1 a_1 a1 与 其他输入向量 a j a_j aj之间的 注意力分数 α 1 , j \alpha_{1,j} α1,j
    在这里插入图片描述

  2. 那么注意力分数 α 1 , j \alpha_{1,j} α1,j 是如何实现的呢? 计算过程?

    2.1: 求出向量 a 1 a^1 a1 本身的咨询值 query: q 1 q^1 q1 ;( q 1 q^1 q1 由参数矩阵 w q w^q wq a 1 a^1 a1 相乘获得;)
    q 1 = W q a 1 q^1 = W^q a^1 q1=Wqa1

    2.2: 求出向量 a 2 a^2 a2 的 key值: k 2 k^2 k2 . ( k 2 k^2 k2 由参数矩阵 w k w^k wk a 2 a^2 a2 相乘获得:)

    k 2 = W k a 2 k^2 = W^k a^2 k2=Wka2

    2.3: 将 q 1 q^1 q1 k 2 k^2 k2 两者做点积, 得到 a 1 a^1 a1 a 2 a^2 a2 之间的注意力分数 α 1 , 2 \alpha_{1,2} α1,2
    注意, 这里是否可以将 点积 换成 相加, Fastformer论文?
    在这里插入图片描述

  3. 从而求出向量 a 1 a^1 a1 与其他输入向量 a j a^j aj 之间的注意力分数;
    在这里插入图片描述

  4. 然后各个相关性 分数 α 1 , j \alpha_{1,j} α1,j 通过一个 softamax , 得到一个归一化后的注意力分数 α 1 , j ’ \alpha^’_{1,j} α1,j . (softmax 也可以换成relu 实验一下)

在这里插入图片描述

  1. 此时, 先产生另外一个变量 v i v^i vi, v i v^i vi通过参数矩阵 w v w^v wv 与自身向量 a i a^i ai 两者之间相乘得到;
    V i = W v a i V^i = W^v a^i Vi=Wvai

在这里插入图片描述

  1. 然后, 将 各个注意力分数 α 1 , j ’ \alpha^’_{1,j} α1,j 与每一个自身的 v i v^i vi 相乘得到一个向量, 将这些向量求和, 得到最终的 b 1 b^1 b1;

由此可知, 注意力分数 α 1 , j ’ \alpha^’_{1,j} α1,j, 与 v i v^i vi 最大的,将会主导 b 1 b^1 b1 的产生;
在这里插入图片描述

  1. 重复上述过程,我们便得到经过 self attention 的各个 b j b ^j bj;
    在这里插入图片描述
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值