Transformer教程——task03

transformer教程

编码器

Encoder工作流程

输入阶段
  1. 初始输入: 整个Encoder部分由 6 6 6个相同的子模块按顺序连接构成。第一个Encoder子模块接收来自嵌入position Embedding组合后的输入。这里的输入嵌入通常是将输入的原始数据转化为向量表示,而位置编码则是为了让模型捕捉到输入序列中元素的位置信息,因为标准的向量表示本身没有位置概念。
  2. 后续Encoder输入:除了第一个Encoder子模块,它们从前一个Encoder接收相应的输入,这样就形成了一个顺序传递信息的链路。
    image-20250212002321174
核心处理阶段
  1. 多头自注意力层处理:每个Encoder子模块在接收到输入后,首先将其传递到多头自注意层。这一层中,通过多头自注意力机制去计算输入序列不同位置之间的关联关系,生成相应的自注意力输出。
  2. 前馈层处理:自注意力层的输出紧接着被传递到前馈层。前馈层一般是由全连接网络等构成,对自注意力层输出的特征左进一步的非线性变换,提取更复杂、高层次的特征,然后将其输出向上发送到下一个编码器,以便后续Encoder子模块继续进行处理。
残差与归一化阶段
  1. 残差连接(Residual Connecttion):自注意力层和前馈子层均配备了残差快捷链路。从网络拓扑结构来看,这种连接方式构建了一种并行通路,使得输入信号能够以残差的形式参与到每一层的输出计算中。

    对于自注意力层,其输入会和自注意力层的输出进行相加操作

    同样,前馈层的输入也会和前馈层的输出进行相加。残差连接有助于缓解深度网络训练过程中的梯度消失或梯度爆炸问题,使得网络能够更容易地训练深层模型,并且能够让信息更顺畅地在网络中传递。

  2. ** 层归一化(Layer Norm)**
    在残差连接之后,紧跟着会进行层归一化操作。层归一化是对每一层的神经元的输入进行归一化处理。它可以加速网络的收敛速度、提高模型的泛化能力等。是的模型训练更加稳定、高效。经过层归一化后的结果就是当前Encoder子模块最终的输出,然后传递给下一个Encoder子模块或者后续的其他模块。

Encoder组成部分

每个子模块包括:

  • Multi-Head Attention

  • Residual connection

  • Normalization

  • Position-wise Feed-Forward Network

image-20250214150111623

在transformer模型中,Encoder部分由多个相同的Encoder Layer堆叠而成,每个Encoder Layer包含两个主要子层,分别是Multi-Head Self-AttentionPosition-wise Feed-Forward Network

Multi-Head Self-Attention由 Scaled Dot-product Attention 和 Multi-Head Attention 以及 Self Attention 和 Add & Norm 组成。

多头自注意力(Multi-Head Self-Attention)

Transformer模型中,多头注意力机制允许模型在不同的子空间中学习到不同的关系。每个头都有自己的Q、K和V,最后将所有头的输出通过一个线性层拼接起来。

Q、K、V分别代表Query(查询)、Key(键)和Value(值)。

在注意力机制中:

  1. Query(Q):它代表了正在询问的信息或关心的上下文。
  2. Key(K):这些是可以查询的条目或“索引”
  3. Value(V): 对于每一个键,都有一个与之关联的“值”,它代表实际的信息内容。

缩放点积注意力(Scaled Dot-Product Attention)

self-attention的输入是序列词向量,此处记为 x x x。而 x x x经过一个线性变换得到query(Q),x经过第二个线性变换的搭配Key(K),x经过第三个线性变换得到Value(V)。

image-20250214160120912

则Q、K、V都是对输入x的线性映射:

  • query = linear_q(x)
  • key = linear_k(x)
  • value = linear_v(x)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查询、键和值的概念来自于检索系统。

这里的linear_q(x),linera_k(x),linear_
(x)相互独立,可以按照公式
A t t e n t i o n ( Q , K , V ) = softmax ( Q K T d k ) ⋅ V Attention(Q,K,V) = \text{softmax}\left( \frac{QK^T}{\sqrt{d_k}} \right)\cdot V Attention(Q,K,V)=softmax(dk QKT)V

如何得到缩放因子

在多头注意力机制中,参数 d k d_k dk通常是由总的模型维度 d m o d e l d_{model} dmodel和多头注意力的头数(h)决定的。 d k = d m o d e l h d_k = \frac{d_{model}}{h} dk=hdmodel.

这样做的好处有:

  1. 参数平衡
  2. 计算效率:因为 d k d_k dk d m o d e l d_{model} dmodel的一个因子,所以在进行矩阵运算时,这能更有效地利用硬件加速。
  3. 多样性
  4. 可解释性和调试
缩放因子的作用

这个公式比正常的点积注意力多了一个缩放因子 d k \sqrt{d_k} dk ,这个缩放因子可以防止内积过大,防止它经过softmax后落入饱和区。

在缩放点积注意力(scaled dot-product attention) 中,还有mask部分,在训练时它将被关闭,在测试或者推理时,它将被打开去遮蔽当前预测词后面的序列。

计算attention时为何选择点积
  • 计算效率更高

Multi-Head Attention

多头的方式是将多个head的输出 z z z,进行拼接后,通过线性变换得到最后的输出 z z z

image-20250214161951077

Multi-Head Attention把Q,K,V通过参数矩阵映射,然后再做Attention,把这个过程重复做h次,结果拼接起来。
h e a d i = A t t e n t i o n ( Q W i Q , K W i k , V W i V ) M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d i , ⋯   , h e a d h ) \begin{aligned} head_i &= Attention(QW^Q_i,KW_i^k,VW_i^V)\\ MultiHead(Q,K,V)&=Concat(head_i,\cdots,head_h) \end{aligned} headiMultiHead(Q,K,V)=Attention(QWiQ,KWik,VWiV)=Concat(headi,,headh)
最后得到一个 n × ( h d ^ v ) n\times (h \hat{d}_v) n×(hd^v)维度的序列,所谓的Multi-Head,就是多做几次同样的事情(参数不共享),然后把结果拼接起来。

注意

  • 不同头的矩阵是不同的
  • multi-head- attention可以并行计算。

一个多头attention的效果要优于单个attention,多头可以让模型关注不同方面的信息,体现出差异性。但是有实验表明,头之间的差异随着所在层数变大而减小,因此这种差异性是否是模型追求的还不一定的。

多头注意力机制
  • 并行化
  • 增强表示:每个注意力头都关注输入序列的不同方面,使模型能够捕捉各种模式和关系。
  • 改进泛化性
多头注意力的计算
  • 线性变换:输入序列经历学习的线性变换,将其投影到多个较低维度的表示,称为“头”。
  • 缩放点积注意力:每个头独立地计算输入序列的查询、键和值表示之间的注意力分数。得到的注意力权重突出了每个令牌相对于其他令牌的重要性。
  • 连接和线性投影:来自所有头的注意力输出被连接并线性投影回原始维度。

Self Attention

Self-Attention是将单个序列或句子的不同位置关联起来以获得更有效表示的机制。在自注意力中,Query、Key和Value都来自于同一个输入序列,它允许模型在处理序列数据时,同时考虑序列中所有元素之间的关系。

  1. Encoder Self-Attention:Encoder阶段捕获当前Word和其他输入词的关联
  2. Masked Decoder Self-Attention:Decoder阶段捕获当前word与已经看到的解码器之间的关联。
  3. Encoder-Decoder Attention:将Decoder和Encoder输入建立联系,和之前那些普通Attention一样。

image-20250216230554950

Self Attention是在序列内部进行Attention操作,旨在寻找序列内部的联系。对自注意力而言,是对同一个输入序列 x x x,分别进行三种独立的线性变换得到 Q x , K x , x Q_x,K_x, _x Qx,Kx,x后,将其输入Attention,体现在公式即Attention(Q_x,K_x,V_x)

自注意力的工作原理
  1. 嵌入:首先,模型将输入序列中的每个单词嵌入到一个高维向量表示中。
  2. 查询、键和值向量:模型为序列中的每个单词计算查询、键和值向量。在训练过程中,模型学习这些向量,每个向量都有不同的作用。
    查询向量表示单词的查询,即模型在序列中寻找的内容。键向量表示单词的键,即序列中其他单词应该注意的内容。值向量表示单词的值,即单词对输出所贡献的信息。
  3. 注意力分数:一旦模型计算了每个单词的查询、键和值向量,它就会为序列中的每一对单词计算注意力分数。
  4. SoftMax归一化:使用SoftMax函数对注意力分数和归一化,以获得注意力权利。
  5. 加权求和:最后,使用注意力权重计算向量的加权和。
Self-Attention优点
  • 参数少
  • 可并行化
  • 捕捉全局信息
缺点
  • 计算量大
  • 没法捕捉位置信息
Add&Norm

Add&Norm:是指将**残差连接(Addition)归一化(Normalization)**结合在一起的操作,用于提高训练过程中的稳定性和性能。

  1. 残差连接 R e s i d u a l = x + S u b L a y e r ( x ) Residual = x + SubLayer(x) Residual=x+SubLayer(x)
  2. 层归一化
    1. 独立归一化
    2. 训练稳定过程
    3. 提高模型稳定性
    4. 适应不同类型的网络
    5. 减少梯度消失和爆炸
    6. 不受批量大小的限制

Add&Norm数学表示为KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at end of input: …\text{LayerNorm\left(x+\text{SubLayer}(x)\right)KaTeX parse error: Expected 'EOF', got '}' at position 1: }̲.

输入的 x 序列经过 “Multi-Head Self-Attention” 之后实际经过一个“Add & Norm”层,再进入“feed-forward network”(后面简称FFN),在FFN之后又经过一个norm再输入下一个encoder layer。

注意:几乎每个子层都会经过一个归一化操作,然后再将其加在原来的输入上,这个过程被称为残余连接Residual Connection

Position-wise Feed-Forward Networks

FFN本质是一个线性变换层,用来完成输入数据到输出数据的维度变换。FFN:包括一个全连接层(FC)+RELU+FC

Multi-Head Attention vs Multi-Head Self-Attention

  1. 基础架构相同
  2. 计算流程相似
  3. 查询、键和值的来源不同
  4. 功能重点有所差异
  5. 输入信息性质不同

Cross Attention

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值