解析Transformer基本结构与实现

目录

目录

基本结构

1.输入部分包含: 

2. 编码器部分:

2.1 掩码张量

学习并实现了生成向后遮掩的掩码张量函数: subsequent_mask

 2.2 注意力机制

2.3 多头注意力机制 

3. 解码器部分:

 4. 输出部分包含:

Transformer总结


首先:

哈佛NLP团队实现的Pytorch版代码链接如下:

harvardnlp/annotated-transformer: An annotated implementation of the Transformer paper. (github.com)

参考写的很好的一个博主的链接:

Transformer源码详解(Pytorch版本) - 知乎 (zhihu.com)

下面开始我的讲解:

  • 三类应用
  1. 机器翻译类应用-Encoder和Decoder共同使用
  2. 只使用Encoder端-文本分类BERT和图片分类VIT
  3. 只使用Decoder端-生成类模型
     

图: 第二章:Transformer 模型 · Transformers快速入门

笔记参考b站视频: 2.3.1掩码张量-part1_哔哩哔哩_bilibili

基本结构

​    Transformer总体架构可分为4个部分:

  •  输入部分
  • -输出部分
  • -编码器部分
  • -解码器部分

1.输入部分包含: 

  1. 原文本嵌入层(Input embedding)及其位置编码(position encoding)
  2. 目标文本嵌入层及其位置编码器

  

  • 文本嵌入层的作用:

       无论是源文本嵌入还是目标文本嵌入,都是为了将文本中词汇的数字表示(word to index)转变为向量(eg. one-hot,但这里不是)表示,希望在这样的高维空间捕捉词汇间的关系。

  • 位置编码器的作用:

        因为在Transformer的编码器结构中,并没有针对词汇位置信息的处理,因此需要在Embedding层后加入位置编码器,将词汇位置不同可能会产生不同语义的信息加入到词嵌入张量中,以弥补位置信息的缺失。

Transformer位置编码图解 - BimAnt

position embedding的要求

(1)表示token在序列中的绝对位置

(2)序列长度不同时,不同序列中token的相对位置/距离也要保持一致

(3)可以用来表示模型在训练过程中从来没有看到过的句子

于是想要了:用二进制表示

缺点:占内存, 且无法表示浮点数

于是。采用正余弦函数表示。

2. 编码器部分:

  1.     由N个编码器层堆叠而成 每个编码器层由两个子层连接结构组成。每个编码器层不共享参数
  2.     第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接
  3.     第二个子层连接结构包括一个前馈全连接子层(Linear)和规范化层以及一个残差连接

2.1 掩码张量

什么事掩码张量:   

        掩代表遮掩,码就是我们张量中的数值,它的尺寸不定,里面一般只有1和0的元素,代表位置被遮掩或者不被遮掩,至于是0位置被遮掩还是1位置被遮掩可以自定义,因此它的作用就是让另外一个张量中的一些数值被遮掩,也可以说被替换,它的表现形式是一个张量。

掩码张量的作用:

        在transformer中,掩码张量的主要作用在应用attention(将在下一小节讲解)时,有一些生成的attention张量中的值计算有可能已知了未来信息而得到的,未来信息被看到是因为训练时会把整个输出结果都一次性进行Embedding,但是理论上解码器的的输出却不是一次就能产生最终结果的,而是一次次通过上一次结果综合得出的,因此,未来的信息可能被提前利用。所以,我们会进行遮掩。关于解码器的有关知识将在后面的章节中讲解。

学习并实现了生成向后遮掩的掩码张量函数: subsequent_mask

        它的输入是size,代表掩码张量的大小.
        它的输出是一个最后两维形成1方阵的下三角阵.
        最后对生成的掩码张量进行了可视化分析,更深一步理解了它的用途.
 

# np.triu 演示
>>> np.triu([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], k=-1) #k=-1表示主对角线(1,5,9)的元素往下移动一个后下放的元素全为0
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 0,  8,  9],
       [ 0,  0, 12]])

>>> np.triu([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], k=0) #k=0,表示主对角线元素及其往下的元素都为0
array([[1, 2, 3],
       [0, 5, 6],
       [0, 0, 9],
       [0, 0, 0]])

>>> np.triu([[1,2,3],[4,5,6],[7,8,9],[10,11,12]], k=1) #k=1,表示主对角线元素往上移一步后以下的元素都为0
array([[0, 2, 3],
       [0, 0, 6],
       [0, 0, 0],
       [0, 0, 0]])

 2.2 注意力机制

  • 什么是注意力:

        我们观察事物时,之所以能够快速判断―种事物(当然允许判断是错误的),是因为我们大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断,而并非是从头到尾的观察一遍事物后,才能有判断结果.正是基于这样的理论,就产生了注意力机制。

  • 我们这里使用的注意力的计算规则:
     

  •  Q,K,V的比喻解释:

         假如我们有一个问题:给出一段文本,使用一些关键词对它进行描述!
为了方便统一正确答案,这道题可能预先已经给大家写出了一些关键词作为提示。其中这些给出的提示就可以看作是key,而整个的文本信息就相当于是query,value的含义则更抽象,可以比作你看到这段文本信息后,脑子里浮现的答案信息,,这里我们又假设大家最开始都不是很聪明,第一次看到这段文本后脑子里基本上浮现的信息就只有提示这些信息,因此key与value基本是相同的,但是随着我们对这个问题的深入理解,通过我们的思考脑子里想起来的东西原来越多,并且能够开始对我们query也就是这段文本,提取关键信息进行表示.这就是注意力作用的过程,通过这个过1我们最终脑子里的value发生了变化,
        根据提示key生成了query的关键词表示方法,也就是另外一种特征表示方法.
刚刚我们说到key和value一般情况下默认是相同,与query是不同的,这种是我们一般的注意力输入形式,但有一种特殊情况,就是我们query与key和value相同,这种情况我们称为自注意力机制,就如同我们的刚刚的例子。使用一般注意力机制,是使用不同于给定文本的关键词表示它.而自注意力机制,需要用给定文本自身来表达自己,也就是说你需要从给定文本中抽取关键词来表述它,相当于对文本自身的一次特征提取。

简单的:

  • Q:我们要查询的信息,eg, 高领男士毛衣(查询和别人的关系)
  • K:正在被查询的信息,eg,高龄,男士,毛衣(身份证)
  • v:被查询的内容(特征表示)

或者理解:

  • Q是一段准备被概括的文本;
  • K是给出的提示;
  • V是大脑中的对提示K的延伸.。

当Q=K=V时,称作自注意力机制。(给你一篇文章提主旨,你说需要给个参考,结果“没参考”,即给你的参考是和原文一模一样的文章)
 

  •  什么是注意力机制:

        注意力机制是注意力计算规则能够应用的深度学习网络的载体,除了注意力计算规则外,还包括一些必要的全连接层以及相关张量处理,使其与应用网络融为一体。使用自注意力计算规则的注意力机制称为自注意力机制。

  • 注意力机制在网络中实现的图形表示:

  • 注意力计算规则的函数: attention
  1. 它的输入就是Q,K,V以及mask和dropout, mask用于掩码, dropout用于随机置0。
  2. 它的输出有两个,query的注意力表示(词嵌入的维度)以及注意力张量

 

mask-fill演示:

 

2.3 多头注意力机制 

  • 什么是多头注意力机制:

        从多头注意力的结构图中,貌似这个所谓的多个头就是指多组线性变换层,其实并不是,我只有使用了一组线性变化层,即三个变换张量对Q,K,V分别进行线性变换,这些变换不会改变原有张量的尺寸,因此每个变换矩阵都是方阵,得到输出结果后,多头的作用才开始显现,每个头开始从词义层面分割输出的张量,也就是每个头都想获得一组Q,K,v进行注意力机制的计算,但是句子中的每个词的表示只获得一部分,也就是只分割了最后一维的词嵌入向量.这就是所谓的多头,将每个头的获得的输入送到注意力机制中,就形成多头注意力机制。

为什么要用多头:

a. "多头"与CNN中conv kernel类似,类似地,有多少个kernel,就有多少个feature map.

b. 不同的注意力结果得到的特征向量不同,表达也不相同

  • 多头注意力机制结构图:

  •  多头注意力机制的作用:

        这种结构设计能让每个注意力机制去优化每个词汇的不同特征部分,从而均衡同一种注意力机制可能产生的偏差,让词义拥有来自更多元的表达,实验表明可以从而提升模型效果。

3. 解码器部分:

  1. 由N个解码器层堆叠而成 每个解码器层由三个子层连接结构组成
  2. 第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接
  3. 第二个子层连接结构包括一个多头注意力子层和规范化层以及一个残差连接(编码-解码多注意力子层)
  4. 第三个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接

encode和decode中残差连接的作用:因为transformer中的输出是position embedding和word embedding相加,随着word embed和position embed的相加,网络会逐渐遗忘position的信息,而着重表达了word embedding的信息。所以需要残差连接来记住position embedding。

 4. 输出部分包含:

  1. 线性层(得到output size)
  2. softmax处理器(找到最大概率)

 

  • 就是重新组合各大输入向量,得到更完美的特征。

参考: Vision Transformer 超详细解读 (原理分析+代码解读) (一) - 知乎 (zhihu.com)

 输入序列x1,x2,x3,x4,对x1~x4提取特征。探究x1,x2,x3,x4之间的关系,利用3个辅助向量Q,K,V。

每一个token对应3个向量Q,K,V;

Q:查一查自己与别人的关系

K:自己是被查对象,身份证的key

V:特征表达(x1用v1表达,后面与x1则没关系了,用v1代替)

通过这个操作得到一个权重项,再把特征进行重新组合。

Transformer总结

  • Transformer与RNN不同,可以比较好地进行并行训练。
  • Transformer本身是不能利用单词的顺序信息的,因此需要再输入中添加位置Embeeding,否则Transformer就是一个词袋模型了。
  • Transformer的重点是self-Attention结构,其中用到的Q,K,V矩阵通过输出进行线性变换得到
  • Transformer中Multi-Head Attention中有多个Self-Attention,可以捕获单词之间多种维度上的相关系数attention分数。
不当菜鸡的程序媛
关注 关注
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Transformer模型详解及代码实现
专注计算机视觉算法训练,算法优化部署以及SDK开发的知识分享。
04-15 1151
本文详细解析Transformer整体模型结构,并深入分析了各个layer层的原理及给出了计算公式,针对每个 layer、block 都给出了较为详细的代码实现方便深入理解网络结构
第5篇:Transformer架构详解(上):基本结构与自注意力机制
Gemini的博客
07-02 315
近年来,Transformer模型在自然语言处理(NLP)领域取得了巨大的成功。无论是机器翻译、文本生成,还是语言理解任务,Transformer都展示了其强大的能力。本文将详细介绍Transformer基本结构、自注意力机制的工作原理,并结合具体应用场景,通过Python代码示例展示其实现方式。我们将使用幽默的比喻和丰富的中文注释,使零基础读者也能轻松理解这些复杂的概念。
Transformer结构
Raina_qing的博客
05-30 3226
文章目录Transformer结构0. RNN的缺点1. 整体结构域2. Encoder部分2.1. multi-head-Attention层2.1.1 插入讲解self-attention2.1.2. 回到多头2.2. 全连接层3. Decoder部分4. Generator部分5. Positional Encoding参考文献: Transformer结构 与Bert论文相关,Bert中也插入了相关连接。 0. RNN的缺点 RNN相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两
Transformer(二)--论文理解:transformer 结构详解
热门推荐
12-10 1万+
文章目录1. transformer基本结构2. 模块详解2.1 模块1:Positional Embedding(以下简称PE模块):2.2 模块2:Multi-Head Attention(多头注意力机制)2.2.1 Scaled Dot-Product Attention(缩放的点积注意力机制)2.2.2 Multi_Head(多头机制)2.3 模块3:ADD2.4 模块4:Layer Normalization2.5 模块5:Feed Forward NetWork2.6 模块6:Masked M
一文搞懂 Transformer总体架构 & 三种注意力层)_transformer架构
最新发布
qkh1234567的博客
08-01 2437
本文将从Transformer的本质、Transformer_的原理_、_Transformer的应用__三个方面,带您一文搞懂Transformer总体架构 & 三种注意力层)。
Transformer架构解析
wdn blog
05-21 5757
Transformer 是第一个完全依赖自注意力来计算其输入和输出表示,而不是使用序列对齐 RNN 或卷积的模型。
Transformer 结构
si_ying的博客
06-27 1190
这个部分类似于我们最开始讲的端到端模型中的注意力机制,它是为了帮助 Decoder 端每一步的生成都可以关注和整合每个 Encoder 端每个位置的信息。和 Encoder block 一样,这样的 Decoder block 也可以进行堆叠,如上图我右方标记了“Nx”。在原论文中,Decoder block 也是一共堆叠了 6 层。
Transformer结构解析
codelady_g的博客
11-03 7640
Transformer模型的结构和计算过程
Swin Transformer 结构&代码解析学习
lym823556031的博客
11-16 1716
详解Swin Transformer结构及代码
Transformer模型结构详解
Ibrahimovic1的博客
09-16 565
1、模型架构 大部分序列到序列(seq2seq)模型都使用编码器-解码器结构(引用)。编码器把一个输入序列(????1,...????????)(x1,...xn)映射到一个连续的表示????=(????1,...????????)z=(z1,...zn)中。解码器对z中的每个元素,生成输出序列(????1,...????????)(y1,...ym)。解码器一个时间步生成一个输出。在每一步中,模型都是自回归的(引用),在生成下一个结果时,会将先前生成的结果加入输入序列来一起预测。 2、结构细节
Swin Transformer详解
我的博客
04-28 7437
原创:余晓龙 “Swin Transformer: Hierarchical Vision Transformer using Shifted Window”是微软亚洲研究院(MSRA)发表在arXiv上的论文,文中提出了一种新型的Transformer架构,也就是Swin Transformer。本文旨在对Swin Transformer架构进行详细解析。 一、Swin Transformer网络架构 整体的网络架构采取层次化的设计,共包含4个stage,每个stage都会缩小输入特征图的分辨率,类似于
Transformer入门(一)——结构
yeen123的博客
06-02 8729
Transformer入门介绍篇,分别介绍了Transformer总体结构与每个模块的实现原理
Transformer架构详解
m0_63260018的博客
12-18 3972
Transformer是一种深度学习模型,最初是由Vaswani等人在2017年的论文《Attention Is All You Need》中提出的。这种模型在自然语言处理(NLP)领域特别流行,它引入了一种新的机制——自注意力(self-attention),使得模型能够更加高效和有效地处理序列数据。
transformer基本结构
posuosini的博客
09-07 144
bert是基于transformer的双向编码器,gpt是基于transformer的解码器,transformer作为基本组件被考察的频率很高
Transformer结构详解
LitraLIN的博客
12-26 1万+
Transformer结构详解1.ransformer整体结构2.Transformer的输入2.1单词Embedding2.2 位置Embedding3.self-attention(自注意机制)3.1 self-attention结构3.2 Q,K,V的计算3.3self-atttention的输出3.4 Multi-Head Attention4.Encoder结构4.1 Add & Norm4.2 Feed Forward4.3 组成Encoder5.Decoder结构5.1 第一个Mul
一文彻底搞懂Transformer - 总体架构
m0_59164304的博客
07-16 2852
*****c**输入嵌入:将输入的文本转换为向量,便于模型处理。位置编码:给输入向量添加位置信息,因为Transformer并行处理数据而不依赖顺序。多头注意力:让模型同时关注输入序列的不同部分,捕获复杂的依赖关系。残差连接与层归一化:通过添加跨层连接和标准化输出,帮助模型更好地训练,防止梯度问题。带掩码的多头注意力:在生成文本时,确保模型只依赖已知的信息,而不是未来的内容。前馈网络:对输入进行非线性变换,提取更高级别的特征。****
transformer代码实现
qq_45809323的博客
05-08 1739
对于输入句子,汉字之间需要加空格。
一文搞懂 Transformer总体架构 & 三种注意力层)
2401_84033492的博客
05-25 9510
本文将从Transformer的本质、Transformer_的原理_、_Transformer的应用__三个方面,带您一文搞懂Transformer总体架构 & 三种注意力层)。节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。
JAX实现现代transformer技术详解
了解Transformer基本原理和结构对于深入研究和开发相关模型是必要的。同时,掌握JAX的API和其背后的设计哲学也有助于充分利用JAX的优势,实现更高效、更强大的深度学习应用。 总之,Transformerx: JAX实现的现代...
写文章

分类专栏

  • moe 3篇
  • 学习记录 114篇
  • 论文阅读 1篇
  • 总结 2篇
  • LLM 2篇
  • 多模态 1篇
  • 深度学习 12篇
  • 计算机视觉 9篇
  • nlp 3篇
  • 报错记录 7篇
  • pytorch 15篇
  • 实验结果记录和分析 1篇
  • 梯度泄露
  • CV笔记 1篇
  • 高光谱 2篇
  • c语言算法练习 100篇
  • origin操作 3篇
  • C++/C语言算法练习 2篇
  • 蓝桥杯 2篇
  • 目标检测 1篇
  • 光谱解混 1篇
  • 异常检测 1篇
  • c语言注意事项 3篇
  • 考研复试 2篇
  • 项目问题
  • ofenbach
  • 王道机试指南 18篇

最新评论

  • 服务器/linux上登录huggingface网站

    m0_74033174: 国内服务器根本登不上怎么办

  • 论文阅读MoE |ImageNet准确率超过90%?V-MoE:Scaling Vision with Sparse Mixture of Experts

    CSDN-Ada助手: 你好,CSDN 开始提供 #论文阅读# 的列表服务了。请看:https://blog.csdn.net/nav/advanced-technology/paper-reading?utm_source=csdn_ai_ada_blog_reply 。如果你有更多需求,请来这里 https://gitcode.net/csdn/csdn-tags/-/issues/34?utm_source=csdn_ai_ada_blog_reply 给我们提。

  • 论文阅读MoE |ImageNet准确率超过90%?V-MoE:Scaling Vision with Sparse Mixture of Experts

    4v1d: 可以的,很强

  • 论文阅读MOE:TASK-CUSTOMIZED MASKED AUTOENCODER VIA MIXTURE OF CLUSTER-CONDITIONAL EXPERTS

    CSDN-Ada助手: 你好,CSDN 开始提供 #论文阅读# 的列表服务了。请看:https://blog.csdn.net/nav/advanced-technology/paper-reading?utm_source=csdn_ai_ada_blog_reply 。如果你有更多需求,请来这里 https://gitcode.net/csdn/csdn-tags/-/issues/34?utm_source=csdn_ai_ada_blog_reply 给我们提。

  • 论文阅读-混合专家模型MOE-DAMEX:Dataset-aware Mixture-of-Experts for visual understanding of mixture-of-dataset

    不当菜鸡的程序媛: 8个RTX 6000 GPU的显存总量是384GB:8 * 48GB

大家在看

  • CI/CD 流水线系统-开源框架Tekton 221
  • C-输入数组查找元素-二分查找(数列升序)
  • 7个提升Google搜寻排名的SEO技巧(Google RankBrain) 813
  • ransac拟合平面(c++详细版)
  • CSS网页布局:标准流、浮动流与定位流

最新文章

  • MOE混合专家模型总结(面试)
  • 打印checkpoint或者初始化的model代码
  • 论文阅读MoE |ImageNet准确率超过90%?V-MoE:Scaling Vision with Sparse Mixture of Experts
2024
10月 14篇
09月 9篇
08月 13篇
07月 13篇
06月 10篇
05月 20篇
04月 24篇
03月 7篇
02月 2篇
01月 12篇
2023年77篇
2022年12篇
2021年7篇
2020年123篇
2019年5篇
2018年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家秋季男装商场美陈郑州景观玻璃钢仿铜雕塑小品贵州玻璃钢马雕塑厂家供应大型玻璃钢雕塑玻璃钢花盆裂纹修补方法运城附近玻璃钢彩绘雕塑九江仿铜西式玻璃钢雕塑深圳大型商场美陈供货商五一节商场美陈江苏主题商场美陈生产厂家毕节玻璃钢景观雕塑江西城市几何玻璃钢雕塑黄山商场亮化美陈河南中庭商场美陈有哪些郑州玻璃钢人物雕塑生产厂家玻璃钢电影院院雕塑湖北步行街玻璃钢雕塑江苏开业商场美陈哪里买亳州玻璃钢雕塑厂家佛山玻璃钢雕塑浮雕制作中国台湾玻璃钢雕塑定制厂家成都河源玻璃钢动物雕塑朝阳玻璃钢花盆定西玻璃钢植物雕塑制作台湾商场美陈雕塑温州玻璃钢花盆售价商场美陈供应玻璃钢卡通青蛙雕塑佛山迎宾玻璃钢雕塑玻璃钢卡通水果雕塑多少钱香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化