Transformer
文章目录
- Transformer
- 👉引言💎
- 一、 自注意力机制 : 主要用于 长距离依赖捕捉和转换序列
- 二、 Encoder:
- 2.1 多头注意力机制:
- 2.2 残差连接:
- 三、 Decoder:
- 3.1 Decoder 多头注意力层:
- 3.2 交叉注意力层
- 3.3 Transformer中的全连接层
- 四、 自注意力过程 - 从 K,Q,V维度解读:
👉引言💎
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
热爱写作,愿意让自己成为更好的人…
…
铭记于心 | ||
---|---|---|
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉 |
一、 自注意力机制 : 主要用于 长距离依赖捕捉和转换序列
二、 Encoder:
2.1 多头注意力机制:
Q *K【Q 矩阵和 K矩阵的转置之间做矩阵乘法(词向量做点积)】 得到分数矩阵(查询映射到键,一个单词对其他单词的关注度),经过开方 scale缩放和softmax,得到注意力权重(注意力分数),然后 *V 得到输出向量
而多头注意力,就是输入前先将向量分成多组 Q和K,然后经过上述自注意力过程 拼接在一起 (此时 每个词向量dim维度增加),再经过Linear层降维到 原维度
总之,多头注意力是一个模块,用于计算输入的注意力权重,并生成一个带有编码信息的输出向量,指示序列中的每个词如何关注其他所有词
2.2 残差连接:
将多头注意力输出向量加到原始输入上,然后输出经过层归一化,归一化后的残差输出被送入点对点前馈网络(Feed Forward)进行进一步处理。点对点前馈网络是几个线性层,中间有ReLU激活函数。
再次将该输出与点对点前馈网络的输入相加并进一步归一化。残差连接有助于网络训练,因为它允许梯度直接流过网络。
使用层归一化来稳定网络,从而显著减少所需的训练时间。点对点前馈层用于进一步处理注意力输出,可能使其具有更丰富的表达。
可以将编码器堆叠n次进一步编码信息,每一层都有机会学习到不同的注意力表示
三、 Decoder:
自回归生成单词序列,有 两个多头注意力层 和一个点对点前馈网络层(类似于编码器,但每个多头注意力层的任务不同)。最后,它由一个类似于分类器的线性层和一个softmax来得到单词概率。
解码器将先前输出的列表作为输入,以及包含来自输入的注意力信息的编码器输出。当编码器生成一个结束标记作为输出时,解码停止。输入通过嵌入层和位置编码层,得到位置嵌入。位置嵌入被送入第一个多头注意力层,计算解码器输入的注意力得分。
使用mask 只访问之前的单词,防止计算未来
3.1 Decoder 多头注意力层:
- (与其他层的不同之处就在于 多了一个mask层来防止计算未来的单词
3.2 交叉注意力层
使用来自Encoder的输出 作为其K和V矩阵,而Q矩阵则来自Decoder的前一层的输出。这种交叉注意力机制允许Decoder关注到输入序列的相关部分。
在Transformer模型的编码器部分,输出不包括Q(查询)矩阵。编码器的自注意力层会生成自己的Q、K和V矩阵,但是它只将K和V传递给解码器。编码器的Q矩阵用于其内部的自注意力计算,它不会作为输出传递到解码器。
编码器的任务是处理输入序列,创建一个上下文表示,该表示包含了输入序列的整体信息。编码器的输出(即编码器最后一层的输出),就是这个上下文表示,它为每个输入序列元素提供了一个丰富的特征集。当这些输出被传递到解码器时,它们充当K和V矩阵的角色,解码器会使用这些信息来生成输出序列。
在解码器端,会有自己的自注意力层和交叉注意力层。自注意力层会使用己来自解码器上一层的输出作为Q、K和V矩阵,而交叉注意力层会使用这一层生成的Q矩阵以及从编码器传入的K和V矩阵。
总结来说,编码器和解码器都会生成自己的Q矩阵,但编码器的Q矩阵只在编码器内部使用,而不会传递给解码器。解码器使用自己的Q矩阵以及编码器提供的K和V矩阵来进行交叉注意力计算。
Transformer模型的Decoder在其第一个多头注意力层使用的是基于自身输出的自注意力机制,其中既产生了针对当前解码焦点的Q矩阵,也产生了提供上下文信息的K和V矩阵。这样的设计使得Decoder能够有效地整合先前生成的序列信息,以及通过交叉注意力机制,有效地利用Encoder的输出。
3.3 Transformer中的全连接层
- 内部结构:在Transformer架构中,全连接层是自注意力机制和多头注意力机制之后的关键组成部分。这些层在每个注意力模块之后出现,用于进一步处理信息。
- 前馈网络:Transformer的每个编码器和解码器层都包含一个前馈网络,该网络实际上是由两个线性(全连接)层组成,中间有一激活函数。这些层对于添加网络容量和学习复杂特征非常重要。
- 输出映射:在处理任务如序列到序列的翻译时,Transformer模型的输出端通常会有一个全连接层,用于将解码器的输出映射到目标语言的词汇表上。
四、 自注意力过程 - 从 K,Q,V维度解读:
对某一个查询向量 Query,可以理解为正在计算注意力分数的词。而 Key 向量和 Value 向量是我们正在关注的词,即该词与查询词的相关程度首先 初始化Q,K,V的映射线性层([ batch, seq_lens, h_dim ]) , 然后将 输入 经过Embedding和位置编码的词嵌入矩阵([ batch, seq_lens, e_dim ]) 映射为 K,Q,V ,然后 注意力的故事就开始了… 在多头注意力中,拼接后 再来一层linear 又降回到了 e_dim…
-
一个自注意力过程:
下面点积 说法: 实际上是 Q和K转置的矩阵乘(从第二维度开始), 由于Q和K是高维度的张量(batch size),所以整个操作实际上是一系列点积的集合 (Q中的每个查询向量与K中的每个键向量之间的点积 组成)
·