self_attention(下)自注意力机制

自注意力层的运作,整体过程简化,如下图:

  1. 通过输入序列 X X X, 该序列包含两个输入行向量,与参数矩阵 W Q , K , V W^{Q,K,V} WQ,K,V相乘,求出 Q , K , V Q,K,V Q,K,V
    在这里插入图片描述

  2. 通过 Q , K Q, K Q,K 求出注意力分数,
    a t t e n t i o n s c o r e = s o f t m a x ( Q K T d k ) attention_{score} = softmax ( \frac{QK^T}{\sqrt{d_k}} ) attentionscore=softmax(dk QKT)

  3. 通过注意力分数与矩阵 V V V, 得到最终的注意力层的输出;

在这里插入图片描述
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V) = softmax ( \frac{QK^T}{\sqrt{d_k}} ) V Attention(Q,K,V)=softmax(dk QKT)V

1. self-attention中的矩阵乘法

下文,举例时, 输入序列, 是由多个 输入的 列向量构成;

1.1 Q, K, V矩阵

输入的列向量 a i a^i ai 拼接成矩阵;
请添加图片描述

现在将各个输入列向量 a i a^i ai, 比方说 a 1 a^1 a1 a 2 a^2 a2 a 3 a^3 a3 a 4 a^4 a4 这四个向量拼接成一个矩阵, 记做矩阵 I I I
i

每一个输入向量 a i a^i ai 与矩阵 w q w^q wq 相乘, 便会得到:
q i q^i qi 向量;
q i = W q a i q^i = W^q a^i qi=Wqai

那么之前得到的各个输出向量 q i q^i qi, 比方说 q 1 q^1 q1 q 2 q^2 q2 q 3 q^3 q3 q 4 q^4 q4, 这四个向量拼接成一个矩阵, 记做矩阵 Q Q Q

请添加图片描述

从而得到 Q Q Q, K K K, V V V 这三个矩阵, 这三个矩阵中的每一列向量便是输出对应的 q i q^i qi k i k^i ki v i v^i vi;

( 这里想象成人脑接受了一个信息, 该人脑本身存在了 多少个 概念维度去理解和 处理这个信息, 有些概念维度与 输入信息 是存在相关性的, 而有些概念维度与 没有相关性的)
请添加图片描述

1.2 单个向量 a 1 a^1 a1 的各个 α 1 , j \alpha_{1,j} α1,j 注意力分数;

  1. 各个列向量 k i k^i ki转置成行向量 k i k^i ki
  2. 将各个输入向量 a i a^i ai 对应的 k i k^i ki 向量与 q 1 q^1 q1 向量相乘,
  3. 得到输入向量 a 1 a^1 a1 与其他各个输入向量 a i a^i ai 之间的注意力分数 α 1 , j \alpha_{1,j} α1,j
    请添加图片描述

以此类推,
将步骤2 中的 “ a 1 a^1 a1 向量对应的 q 1 q^1 q1向量 ”,
换成 “ a 2 a^2 a2 向量对应的 q 2 q^2 q2 向量 “,
便得到输入向量 a 2 a^2 a2与其他各个输入向量 a i a^i ai 之间的注意力分数 α 2 , j \alpha_{2,j} α2,j

请添加图片描述

1.3 输入向量 a i a^i ai的注意力分数 α i , j \alpha_{i,j} αi,j 矩阵;

  1. 将上述中的各个行向量 k i k^i ki 按照行拼接成矩阵, 便得到 K K K 矩阵的转置矩阵 K T K^T KT

  2. 将 各个输入向量对应的咨询向量 q i q^i qi 按照列,拼接成 咨询矩阵 Q Q Q;

  3. 那么
    所有输入向量 a i a^i ai的注意力分数矩阵 A A A
    = 输入向量对应的 K K K矩阵转置 × 输入向量对应的咨询矩阵 Q Q Q请添加图片描述

1.4 输入向量 a i a^i ai 对应的输出向量 b i b^i bi

将上述的 V 1 V^1 V1 , V 2 V^2 V2, V 3 V^3 V3, V 4 V^4 V4 向量与输入向量 a 1 a^1 a1各个注意力分数相乘, 便得到 a 1 a^1 a1 经过 self-attention 的输出向量 b 1 b^1 b1;

请添加图片描述

同理, 将 v 1 v^1 v1 , v 2 v^2 v2, v 3 v^3 v3, v 4 v^4 v4 组成的矩阵 V V V 与归一化后的注意力分数矩阵 A ′ A' A相乘, 便得到输出向量的矩阵 O O O

在这里插入图片描述

1.4 小结: 输出矩阵 O O O 求解步骤;

  1. 所有输入向量 a i a^i ai对应的 Q Q Q, K K K, V V V 矩阵生成:

根据输入向量 a 1 a^1 a1 构成输入矩阵 I I I, 通过待学习的参数矩阵 W q W^q Wq, W k W^k Wk, W v W^v Wv 与输入向量矩阵 I I I相乘, 得到 Q Q Q, K K K, V V V, 请添加图片描述

  1. 所有输入向量 a i a^i ai 的注意力分数矩阵 A A A的生成:

所有输入向量 a i a^i ai的注意力分数矩阵 A A A
= K K K的矩阵转置 × 咨询矩阵 Q Q Q

在这里插入图片描述
从而 原始的注意力分数矩阵 A A A:
A = Q K T A = QK^T A=QKT

  1. 注意力分数矩阵 A A A的归一化:

可以通过不同的方式实现, 可以是 softmax 或者 relu;
在这里插入图片描述
然后对 注意力分数矩阵 A A A 进行归一化 :
A , = s o f t m a x ( Q K T ) A^, = softmax (QK^T ) A,=softmax(QKT)

而在实践中, 为了防止 Q K T QK^T QKT 的内积过大, 从而过大的值输入到softmax 后,会落入到 饱和区间, 然而饱和区间的梯度几乎为0, 梯度的消失, 导致无法训练,所以引入了缩放因子 1 d k \frac{1}{\sqrt{d_k}} dk 1;

所以最终的注意力分数矩阵: :
A , = s o f t m a x ( Q K T d k ) A^, = softmax ( \frac{QK^T}{\sqrt{d_k}} ) A,=softmax(dk QKT)

  1. 输出矩阵 O O O注意力分数矩阵 A A A的生成:

    输出矩阵 O O O = 矩阵 V V V × 归一化后的 注意力分数矩阵 A ′ A' A

在这里插入图片描述
所以 最终注意力层 输出结果:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V) = softmax ( \frac{QK^T}{\sqrt{d_k}} ) V Attention(Q,K,V)=softmax(dk QKT)V

2. 多头注意力 (Muti-head self attention;)

为什么需要多头:
模型分为多个头,形成多个子空间,可以让模型去关注不同方面的信息,然而仔细想想,这真的可能吗?或者说,Multi-Head的作用真的是去关注“不同方面”的特征吗?

可以类比CNN中同时使用多个滤波器的作用,直观上讲,多头的注意力有助于网络捕捉到更丰富的特征/信息。

多头注意力的由来, 是指在衡量两个事物的相关性的时候,
这种相关性有多种衡量方式;

2.1 多头的定义

上文中的 self - attention : 只会产生一组 Q , K , V Q,K, V Q,K,V 矩阵,

而多头注意力 是指 我们可以多组 Q , K , V Q,K, V Q,K,V 矩阵,
每组 Q , K , V Q,K, V Q,K,V 矩阵会构成一个注意力层;

在这里插入图片描述

然后 将每个注意力层输出结果, 进行拼接成一个结果;
拼接后的向量 在乘以一个 参数矩阵 W O W^O WO, 得到多头注意力的输出;
在这里插入图片描述

将多头的看待角度, 从矩阵层面 切换到 矩阵中的列向量, 来思考;

2.2 多头的向量实现细节

在网络中体现便是一个输入向量对应的 q i q^i qi, 会有多个 q i , j q^{i,j} qi,j 的个数 = 头的个数;

这里以双头为例子, 即存在两个 q i , j q^{i,j} qi,j , 分别是 q i , 1 q^{i,1} qi,1 q i , 2 q^{i,2} qi,2 ;
同样的 k i , j k^{i,j} ki,j, v i , j v^{i,j} vi,j 也存在两个;

2.2.1 求注意力分数时的差异

相比于单头, 多头注意力在求取注意力分数时,
只会取 q i , 1 q^{i,1} qi,1, 和 k i , 1 k^{i,1} ki,1 对应位置上的向量,求出注意力分数,
然后求取 b i , 1 b^{i,1} bi,1
请添加图片描述

2.2.2 求 b i , j b^{i,j} bi,j时的差异

b i , j b^{i,j} bi,j 的求取过程中, 只会将 v i , j v^{i,j} vi,j 中, 第二个上标 j j j 对应的 v i , j v^{i,j} vi,j 取出, 更注意力分数做乘积然后, 求和输出 b i , j b^{i,j} bi,j

在这里插入图片描述

2.2.3 根据 b i , j b^{i,j} bi,j 求出 b i b^{i} bi

b i , j b^{i,j} bi,j 在与一个 w O w^{O} wO 矩阵相乘, 才得到 一个输出向量 b i b^i bi

请添加图片描述

3. 输入向量的位置编码向量

采用正弦函数 生成的向量 作为输入向量的位置编码;

在这里插入图片描述

当然,可以研究 不同的方式 生成位置编码向量,
这里需要根据具体的任务 来分析, 如何生成合适的 位置编码向量;

在这里插入图片描述

3. 自注意力机制的应用

  1. 音频中,采用截断方式的注意力;
    对于整个输入序列中, 只考虑当前输入向量的相邻几个向量, 而不用考虑 整个序列的向量, 从而减少参数量;

在这里插入图片描述

  1. 图像中的目标分类, 将RGB, 在通道维度上构成一个输入向量, 从而整张图片构成一个向量的序列对;

  2. GAN, 图像领域的目标检测中, Graph

4. 自注意力机制与CNN , RNN 的关系

4.1 从感受野的角度来讲

self-attention 的感受野大小, 是网络自身学习出来的;
请添加图片描述

4.2 CNN 是 self-attention 的一种子集

请添加图片描述

4.3 从数据量与模型效果来看;

  1. self-attention 在输入更多的数据后, 效果才比 CNN 好;
    请添加图片描述

4.1 优于RNN

self-attention 支持向量的并行输出;

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值