首页 > 其他分享 >Transformer从零详细解读

Transformer从零详细解读

时间:2024-12-12 19:00:04浏览次数:8  
标签:输出 Transformer 矩阵 残差 Encoder 解读 神经网络 详细 输入

1.从全局角度概括Transformer

73ddbea78328491ebb00014dcc507279.png输入汉字:我爱你 到Transformer中处理后会得到一个输出的结果:I LOVE YOU

对Transformer进行细化:

ec6c02b4e38a41fa8316d6c87948bcde.png

TRM结果可以分文两部分 一部分是Encoders(编码器) 一部分是Decoders(解码器) 简单的流程就是 "我爱你"输入到Encoders中处理后作为Decoders的输入 处理后输出"I LOVE YOU"

进一步细化:
691b323ed4b8470baf3b33fd1ccc503f.png

 

需要注意 Encoder有6个结构完全相同的小Encoder,Decoder也是由6个结构完全相同的小Decoder组成,数字可以是自己定  这6个解码器和编码器在结构上完全相同 但是在参数上是不同的 也就是说 在训练的过程中 不是训练了一个Encoder然后复制6个 而是6个Encoder一同训练

论文中的结构:

Nx = 6,Encoder block由6个encoder堆叠而成,图中的一个框代表的是一个encoder的内部结构,一个Encoder是由Multi-Head Attention和全连接神经网络Feed Forward Network构成。如下图所示

15c41fe530c6426fb0f1f3ddc40f747f.png

Nx:是编码器或者解码器的个数为N个 数量可以由自己定

 

 

2.Encoder编码器

af16c8e637b14c37b51edbe3c2b00cdd.png

 

  1.输入部分

   1.Embedding

     Embedding属于NLP(自然语言处理)的入门知识 我们之前学习的RNN与语言处理有关 所以在这篇博客上发布了一些关于自然语言处理的知识 #深度学习继卷积之后—RNN_bp神经网络和rnn-CSDN博客

4345a49501d14fb99bc0e876a58e6445.png

比如说我们输入的数据是:我爱你... 12个汉字 我们按字切分 每个字对应一个512维的字向量(可以使用Word2vec 或者是初始化)

 

   2.位置编码

为什么需要:

82d3a07f789e469cbfd311ef90938aae.png

在RNN当中需要注意的是 每一次循环使用的W U V都是一样的 使用的是一套的参数 在后续更新的过程中 更新的也是这共享的一套参数

(插一个小的知识点:RNN的梯度消失有什么不同?

或许会说是由于连乘效应 所以导致了梯度消失 这个原因放在RNN中不太准确 因为RNN的梯度消失和普通网络消失的原因不一样

RNN的梯度是一个总的梯度和 他的梯度消失并不是变为0 而是说 总梯度被近梯度主导 远距离梯度忽略不计) 

在RNN中 输入完"我" 需要等处理完"我" 再输入"爱" 是逐个逐个的输入处理

在Transformer中 是一起处理的 

这样做增快了速度 但是忽略了单词之间的序列关系或者说是先后关系

所以Transformer对于RNN来说 缺少了某些东西 来告诉"我"是在"爱"之前的 "你"是在后面的 所以说需要一个位置编码

位置编码的公式:

b05dae6e81b84a76a0977f94af1dac0c.png

12f6f73bb81f445d95fe30e262e19e76.png

pos:是单词或字的位置

2i:在偶数的位置使用sin

2i+1:在奇数的位置使用cos

比如"爱":

有512个维度 在每一个维度中 根据奇偶性分别进行cos和sin的计算

之后我们将位置编码512个维度和原本词向量的512个维度的值分别进行相加得到一个新的512的维度向量 作为整个的Transformer的输入

f20176b062e84217953fdaa1372cf1de.png

 

引申一下为什么位置嵌入会有用

 

0672087012ea4b0d94c46337451f6128.png

6718facc867640369f8cf80bbb8ca290.png

2.注意力机制

   1.基本的注意力机制

897430be9e914638970432b62986a558.png

颜色越深表示越关注

我们想去判断 通过公式或者某种方式得到这个结果 "婴儿在干嘛"这句话 和图片中哪些区域更相似

公式:

9e6ec48572e24c039af4fc47f965c738.pngQ,K,V是三个矩阵

 

 

2.在TRM中怎么操作

5ff3f4deaba6460c8ced393d0e289b17.png

K1代表左上部分代表的某种向量

Q是婴儿代表的某种向量

V1是左上部分对应的某种值向量

Q值先和四个K值进行点乘得到一个结果 结果越大表示越关注越相似

最后再和V矩阵相乘 得到一个加权和

从公式的角度:

a2996795dfa04b108a4b49c9854c6a0d.png

如何获取QKV:

451f4e00e58b4b818e4974a40372995c.png

比如说两个长度为四维向量单词Thinking和Machines

q1:x1乘以一个Wq的参数矩阵得到q1

k1:x1乘以一个Wk的参数矩阵得到k1

v1:x1乘以一个Wv的参数矩阵得到v1

 

得到attention的值:

545be64eb6fe4d44be978fd84144b316.png

为什么要除以根号dk:
q1 * k1如果结果值很大 就是Softmax输出值非常接近1 那么在反向传播过程中 在Attention公式中外层softmax梯度会小  容易造成梯度消失

 

单头:

78023c27753e48fb991e650db0161c24.png

多头:

98fe24d5b2e34495bf12ba9588c44b7e.png

 

实际上 参数会有很多套 分别得到各自的Q K V

可以捕捉到更多信息

254e8c1ba2ee428bad967d1413296a22.png

 

将多头计算后的多个Z合在一起进行输出乘以一个矩阵 就得到了多头注意力的输出

 

 

3.残差详解

在经过多头注意力机制得到矩阵Z之后,并没有直接传入全连接神经网络,而是经过了一步Add&Normalize。

模型会进行残差连接(即输入直接加到输出上),然后进行层归一化(Layer Normalization)。这种结构有助于稳定训练过程,并允许梯度更有效地流动。具体来说是:

x词向量与位置编码对位相加得到新的x 经过注意力层 得到输出结果z 把原始新的x与结果z进行对位相加之后作为残差的结果 经过一个LayerNorm层归一化作为一个输出

9fa30f242b9e4bd1b1b010ebd229f4cf.png

  1. Encoder #1:表示这是Transformer模型中的第一个编码器层。在典型的Transformer模型中,会有多个这样的编码器层堆叠在一起。

  2. Self-Attention:自注意力机制是Transformer的核心组件之一。它允许模型在序列的不同位置之间动态地分配不同的注意力权重,从而捕捉序列内部的依赖关系。

  3. Positional Encoding:位置编码用于为模型提供序列中每个元素的位置信息。由于Transformer缺乏像循环神经网络(RNN)那样的固有序列处理能力,位置编码是必要的,以帮助模型理解序列顺序。

  4. Add & Normalize:在自注意力层和前馈网络层之后,模型会进行残差连接(即输入直接加到输出上),然后进行层归一化(Layer Normalization)。这种结构有助于稳定训练过程,并允许梯度更有效地流动。

  5. Feed Forward:前馈网络是Transformer中的另一个关键组件,通常由两个线性变换和一个激活函数组成。每个编码器和解码器层都包含一个前馈网络。


Add & Norm 层由 Add 和 Norm 两部分组成:

Add:
Add,就是在z的基础上加了一个残差块X,加入残差块的目的是为了防止在深度神经网络的训练过程中发生退化的问题,退化的意思就是深度神经网络通过增加网络的层数,Loss逐渐减小,然后趋于稳定达到饱和,然后再继续增加网络层数,Loss反而增大

6ceab03a606d4c76b5c28f788d0aeaee.png

ResNet残差神经网络
为了了解残差块,我们引入ResNet残差神经网络,神经网络退化指的是在达到最优网络层数之后,神经网络还在继续训练导致Loss增大,对于多余的层,我们需要保证多出来的网络进行恒等映射。只有进行了恒等映射之后才能保证这多出来的神经网络不会影响到模型的效果。残差连接主要是为了防止网络退化。

62226ff2142a460fa5c4051ce5adb1aa.png

上图就是构造的一个残差块,X是输入值,F(X)是经过第一层线性变换后并且激活的输出,在第二层线性变化之后,激活之前,F(X)加入了这一层输入值X,然后再进行激活后输出。

 

残差还可以缓解梯度消失的出现:

21bc7556dc4345f7873bdc91072160b4.png

 

一般情况下 因为连乘所以会出现梯度消失 但是在残差网络结构中 连乘再多也不会出现梯度消失

 

4.Layer Normal

在学习LN(layer normal)之前可以了解一下BN(batch normal)

baa5c2beb55f4c4e82c2c949082e98df.png

BN是针对整个样本在同一纬度特征再做处理

如上图所示,每一列可以表示不同的人 也就是样本 每一行可以表示每一个特征(身高,体重,年龄...)

在BN中 是针对整个batch也就是所有人 的每一个特征进行BN 绿色框住的可以理解BN是在对同一纬度的特征处理

因为我们知道这一行是身高这个特征的数据 所以可以用BN

为什么在小批次中BN效果差?

e13519878499491d9c53ca93cadadaaf.png

如上图 加入有10个句子 前9个句子有5个单词 第10个句子有20个单词 

在BN的过程中 前9个只有5个单词 但是第10个句子长度大于5 所以在前9个句子进行BN的结果会对第10个句子超出5个单词的部分造成影响

 

使用LN:

BN是对于相同的维度进行归一化(BN是对列进行均值方差)

而LN是在同一个样本中不同神经元之间进行归一化(LN是对行进行均值方差)

但是咱们NLP中输入的都是词向量,一个300维的词向量,单独去分析它的每一维是没有意义地,在每一维上进行归一化也是适合地,因此这里选用的是LN。
02d5597b62ae485ca6d7490dfe10b7f9.png

 

3.前馈神经网络

输入的Z1,Z2都会通过一个Feed Forward(前馈神经网络)。前馈网络通常包含一个或多个全连接层,可以进行非线性变换,以提取更高级的特征。

Transformer的全连接层是一个两层的神经网络,先线性变换,然后ReLU非线性,再线性变换。

99319316b0d74497b3f66d179af9cbce.png

a5a5d8a2345046de92a233e1c16f5adf.png

bc12f7144d8a4265a698b26b0ab12404.png

4.Encoder小结

d123d230e4eb4311a20a668db861af0a.png

 

1.输入部分:
输入时Inputs 得到Input的Embedding 与位置嵌入的矩阵对位相加 作为整体的输入 

2.注意力机制:

然后经过一个多头注意力机制计算之后 先进行残差 就是把原始的输入和多头注意力机制的输出相加 得到残差的结果 然后在进行LN 作为输出结果

3.前馈神经网络:
然后经过双层的全连接(Deed Forward) 得到一个值 再把原始输入的值与经过双层全连接后的输出相加 进行残差 然后再进行LN输出结果

 

3.Decoder

cc46c33896c844a5b3e960d2cc93b07e.png

 

和Encoder Block一样,Decoder也是由6个decoder堆叠而成的,Nx=6。包含两个 Multi-Head Attention 层。第一个 Multi-Head Attention 层采用了 Masked 操作。第二个 Multi-Head Attention 层的K, V矩阵使用 Encoder 的编码信息矩阵进行计算,而Q使用上一个 Decoder block 的输出计算。

Masked Multi-Head Attention
与Encoder的Multi-Head Attention计算原理一样,只是多加了一个mask码。mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 padding mask 和 sequence mask。为什么需要添加这两种mask码呢?

1.padding mask
什么是 padding mask 呢?因为每个批次输入序列长度是不一样的也就是说,我们要对输入序列进行对齐。具体来说,就是给在较短的序列后面填充 0。但是如果输入的序列太长,则是截取左边的内容,把多余的直接舍弃。因为这些填充的位置,其实是没什么意义的,所以我们的attention机制不应该把注意力放在这些位置上,所以我们需要进行一些处理。
具体的做法是,把这些位置的值加上一个非常大的负数(负无穷),这样的话,经过 softmax,这些位置的概率就会接近0!

2.sequence mask
sequence mask 是为了使得 decoder 不能看见未来的信息。对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此我们需要想一个办法,把 t 之后的信息给隐藏起来。这在训练的时候有效,因为训练的时候每次我们是将target数据完整输入进decoder中地,预测时不需要,预测的时候我们只能得到前一时刻预测出的输出。
那么具体怎么做呢?也很简单:产生一个上三角矩阵,上三角的值全为0。把这个矩阵作用在每一个序列上,就可以达到我们的目的。

上三角矩阵创建在哪里?

上三角矩阵通常在模型训练或预测前的预处理阶段创建。

如何使用上三角矩阵?

在decoder的输入或自注意力机制中,将上三角矩阵与权重矩阵相乘,可以实现对未来信息的屏蔽。具体来说,将上三角矩阵作用于decoder的输入序列或自注意力机制的得分矩阵上,可以使得decoder在解码时只能关注到当前time_step之前的输出。

注意:
1、在Encoder中的Multi-Head Attention也是需要进行mask的,只不过Encoder中只需要padding mask即可,而Decoder中需要padding mask和sequence mask。
2、Encoder中的Multi-Head Attention是基于Self-Attention地,Decoder中的第二个Multi-Head Attention就只是基于Attention,它的输入Quer来自于Masked Multi-Head Attention的输出,Keys和Values来自于Encoder中最后一层的输出。

 

 

4.输出

bc5b216b4c2a449e921d4496b830c89d.png

Output如图中所示,首先经过一次线性变换(线性变换层是一个简单的全连接神经网络,它可以把解码组件产生的向量投射到一个比它大得多的,被称为对数几率的向量里),然后Softmax得到输出的概率分布(softmax层会把向量变成概率),然后通过词典,输出概率最大的对应的单词作为我们的预测输出。

 

标签:输出,Transformer,矩阵,残差,Encoder,解读,神经网络,详细,输入
From: https://blog.csdn.net/disciplining/article/details/144248130

相关文章

  • Spring Security详细介绍(一)基本原理
            SpringSecurity(下文简称ss)是目前最流行的Web应用安全管理框架,其前身是Acegi项目(2006年左右纳入Spring子项目)。截至目前最新的版本是6.4.1。    ss早期版本的配置非常复杂,项目维护小组做了大量的工作简化了框架的配置和使用,现有的版本只需要寥寥几行......
  • web安全学习路线(非常详细),零基础入门到精通,看这一篇就够了
    1.学习基本的Web开发知识在学习Web安全之前,了解基本的Web开发知识是非常重要的。Web开发通常涉及HTML、CSS和JavaScript等技术。这些技术可以帮助您理解Web应用程序的结构和工作原理。此外,了解Web服务器和客户端之间的通信过程也有助于您更好地理解Web安......
  • Transformer
    Transformer本质是将平平无奇的特征变为楞次分明的特征transformer能够结合上下文语境更新自身特征整体架构编码层(Encoder)self-attention是啥意思呢?对于输入的数据,你的关注点是什么?在逛商场的时候,你可能更加的关注商场里售卖的物品,而不会去关注旋转木马(游乐园才会关......
  • 模型解读
    Letmebreakdownthemodelarchitectureandinferenceprocessindetail:ModelArchitecture:VAE(MainComponent)├──EncoderRNN(Bi-directionalGRU)├──DecoderRNN(GRU)└──DecoderSD(Sidetaskdecoder)AdditionalComponents:-ConfidenceModul......
  • 管理咨询顾问保姆级学习参考资料,解读187页IBM 管理咨询顾问能力进阶手册
            本文主要介绍了IBM管理咨询顾问能力进阶手册的内容,包括项目实施要点、PPT写作技巧、工具及使用技巧介绍、乙方和爱商咨询PPT模板参考等。文章通过模块化方法阐述了管理咨询领域常用的策略、组织和流程,以及集客业务运营全视图等方面的知识。重点内容:1.项目......
  • 解读41页PPT 学习 华为LTC流程(线索、机会、合同)
            LTC流程(线索、机会、合同)的内容,包括流程的重要性、核心角色、关键活动和注意事项等内容。LTC流程是承载公司最大人、财、物的业务流,是否能高质量高效运转,决定公司的生死存亡。该流程由三个跨功能团队负责:CC3ThreeCentricCustomer(铁三角团队),负责从机会点验......
  • 【2024寒假全新】渗透测试工具大全(超详细),收藏这一篇就够了!
     黑客/网安大礼包:......
  • 【2024寒假全新】渗透测试工具大全(超详细),收藏这一篇就够了!
     黑客/网安大礼包:......
  • 【stablediffusion教程】你们要的AI换装秀来了,一秒换10件衣服,AI绘画详细教程
    前言昨天有粉丝留言,问如何让人物在保持现有姿势不变的情况下对小姐姐的图片进行换装,这不,你们要的AI换装秀来了,具体如何制作,看我一步一步操作给大家看。1、准备****换装图片首先,先准备一段tag,我们用它生成一个AI小姐姐的图片。当然,你也可以自己准备一张现实中拍的图片......
  • 【详细教程】如何下载哔哩哔哩(B站课堂)上已购买的视频课程
    前言:很多同学都想知道哔哩哔哩(B站课堂)中视频课程怎么下载,但是B站课堂上面已购买的视频课程是不提供直接下载方式的,所以下面就教大家如何用学无止下载器下载B站课堂上面已购买的视频课程。一、电脑网页打开哔哩哔哩官网,找到已购内容( https://www.bilibili.com/cheese/mine/list ......