深度学习系列25:注意力机制

1. 从embedding到Encoder-Decoder

1.1 Embedding

首先需要用到embedding,把K维的0-1特征向量用k维的浮点数特征向量表示。直观代码如下:

from keras.models import Sequential
from keras.layers import Embedding
model = Sequential()
model.add(Embedding(100,2, input_length=7))#输入维,输出维
data = np.array([[0,2,0,1,1,0,0],[0,1,1,2,1,0,0],[0,1,12,1,15,0,1]])
model.predict(data)

每一个用100维小数表示的数值,被映射成2维小数。
图片同样可以做embedding,我们要把深度学习系列25:注意力机制(前两个是尺寸,最后是灰度)的图像用深度学习系列25:注意力机制来表示,假设我们有M张图。将每16个像素点看做一个像素块,则像素块的数值数量为1616256,要将其映射为1000维,则用来计算的网络层的维度变化为:
深度学习系列25:注意力机制
编码过程是深度学习系列25:注意力机制的矩阵,每一行的1000维数据就是每个块的embedding表示。在图像中,这个embedding可以作为像素块的特征向量。
通过embedding,可以把文字、图像等等转为特征向量序列。

1.2 Encoder-Decoder 结构

Seq2Seq(是 Sequence-to-sequence 的缩写),就如字面意思,输入一个序列,输出另一个序列。这种结构最重要的地方在于输入序列和输出序列的长度是可变的。例如下图,其中“编码结果”就是上面说的向量C:

2 Attention

2.1 编码器中加入attention机制

Encoder-Decoder 当输入信息太长时,会丢失掉一些信息(编码长度优先,在编码时进行了压缩,因此丢失信息是必然的)。Attention 机制就是为了解决「信息过长,信息丢失」的问题,简单来说,Attention 模型的特点是 Encoder 不再将整个输入序列编码为固定长度的「中间向量 C」 ,而是编码成一个向量的序列。引入了 attention 的 Encoder-Decoder 模型如下图:

2.2 Self-attention机制

如何Q和K相同,则称为self-attention机制。self-attention可以用来迭代优化词嵌入(训练词嵌入的输入和最终输出是一样的)。
词嵌入学习的是单词之间的关系,而self-attention学习了单词在句子上下文环境中的关系(transformer中甚至还显式的加上了位置编码)。注意和Attention机制区分开。
换种方式说明:假设我们得到了一段输入文本,并且从文本中的单词嵌入 W 开始。我们需要找到一种 Embedding 方法来度量同一文本中其他单词嵌入相对于 W 的重要度,并合并它们的信息来创建更新的嵌入W’。
具体做法是:自注意力机制会将 Embedding 输入文本中的每个单词线性投影到三个不同的空间中(这些矩阵在训练过程中需要学习),从而产生三种新的表示形式:即查询query、键key和值value。这些新的嵌入将用于获得一个得分,该得分将代表 W 和每个Wn 之间的依赖性(如果 W 依赖于 W’,则结果为绝对值很高的正数,如果 W 与W’不相关,则结果为绝对值很高的负值)。这个分数将被用来组合来自不同 Wn 单词嵌入的信息,为单词 W 的值v创建更新的嵌入e。

下面是个例子:对“Thinking Matchines”这句话,对“Thinking”(pos#1)计算attention 分值。我们需要计算每个词与“Thinking”的评估分,这个分决定着编码“Thinking”时(某个固定位置时),每个输入词需要集中多少关注度。
这个分,通过“Thing”对应query-vector与所有词的key-vec依次做点积得到。所以当我们处理位置#1时,第一个分值是q1和k1的点积,第二个分值是q1和k2的点积。除以8,这样梯度会更稳定。然后加上softmax操作,归一化分值使得全为正数且加和为1。将softmax分值与value-vec按位相乘。保留关注词的value值,削弱非相关词的value值。将所有加权向量加和,产生该位置的self-attention的输出结果。

下图是一个self-attention的可视化例子:

2.3 图像/视频的自注意力机制和交叉注意力机制

为了统一图像和视频,我们把图像用3维数据表示(宽、高、帧)。对于图像深度学习系列25:注意力机制上的任意一个点深度学习系列25:注意力机制,

交叉注意力机制有两个输入X和C,其中C用来计算N,其他都相同。我们可以把两者简单加起来作为解码器:

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(1)
乘风的头像乘风管理团队
上一篇 2022年5月10日
下一篇 2022年5月11日

相关推荐