Transformer从零详细解读

2024-09-08 00:12
文章标签 transformer 解读 详细

本文主要是介绍Transformer从零详细解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Transformer从零详细解读

一、从全局角度概况Transformer

​ 我们把TRM想象为一个黑盒,我们的任务是一个翻译任务,那么我们的输入是中文的“我爱你”,输入经过TRM得到的结果为英文的“I LOVE YOU”

image-20240907204119837

​ 接下来我们对TRM进行细化,我们将TRM分为两个部分,分别为Encoders(编码器)和Decoders(解码器)
image-20240907204310979

​ 在此基础上我们再进一步细化TRM的结构:
image-20240907204516292

​ 这里不一定是6个encoder和6个decoder,但是每个encoder之间的结构都是相同的,但是参数上并不相同,在训练的时候并不是只训练一个encoders,而是每个encoders都在训练。
​ 我们再看一下TRM原论文中的结构图:
image-20240907204735178

​ N是自己确定的数字,encoders和decoders之间的结构很不相同。

二、位置编码详细解读

​ 我们将encoder部分提取出来看,我们将encoder分为以下三个部分:
image-20240907205013310

​ 我们先看输入部分,输入部分分为:

  1. Embedding

    image-20240907205220310

    ​ embedding的操作方法就是:假如现在输入12个字,每个字用一个512维度的向量表示,那么这12个字展开后就是一个12*512的二维矩阵。矩阵的每个位置有两种初始化方式,一种是随机初始化,另一种是wordtovector方式。

  2. 位置编码

    ​ 我们从RNN结构来引入位置编码:
    image-20240907205626997

    ​ 对于RNN的所有的timesteps都共享同一套参数(U,W,V),例如右图上的“我”,“爱”,“你”在展开以后,使用的都是同一套参数(U,W,V)。

    面试题:RNN的梯度消失和普通网络的梯度消失有什么区别?
    RNN的梯度是一个总的梯度和,它的梯度消失并不是变为0,而是总的梯度被近距离梯度主导,被远距离梯度忽略不计。

1.位置编码公式:

image-20240907210344429

​ 2i代表偶数,在偶数位置使用sin,在2i+1奇数的位置使用cos,就比如我爱你中的爱这个字,进行展开,其中的偶数位置使用sin表达式,奇数位置使用cos表达式。得到展开式以后:
image-20240907210608231

​ 我们把字向量他们原本位置上的值与他们的位置编码相加,得到一个最终的512的维度的向量,作为TRM的输入。

2.为什么位置编码是有用的

​ 我们看下图中的推导,正余弦位置函数,这个体现出的是一种绝对位置信息。
image-20240907210902528

​ 以“我 爱 你”为例,pos+k 代表“你”,pos代表“我”,k代表“爱”,也就是说,“我爱你”中的“你”,可以被“我”和“爱” 线性组合起来,这样的线性组合就意味着绝对的位置向量中蕴含了相对位置信息。但是这种相对位置信息会在注意力机制那里消失。

三、多头注意力机制

1.基本的注意力机制

​ 我们看下图:
image-20240907211541271

​ 我们在看一张图的时候,一张图像总有一些部分是我们特别关注的地方。我们想通过一种方式得到“婴儿在干嘛”这句话 与图像中的哪部分区域更加关注/相似,这就是注意力机制的一种形式。

​ 计算公式:
image-20240907211815247

​ 我们举一个例子,就拿上面的例子为例,我们通过计算来判断下“婴儿在干嘛”这句话与图片中的哪部分区域更加相似,看下图:

image-20240907212008937 我单抽出婴儿这个单词,我们将区域分为四个部分,我们将“婴儿”作为q向量,四个区域分别对应K向量,和他们各自的V向量。我们判断“婴儿”与四个区域点乘的结果哪个是最大的,最大就代表了最相似。

​ 我们再举一个词与词的例子:
image-20240907212352609

​ 我们的计算步骤如下图:
image-20240907213938735

在只有单词向量的情况下,如何获取QKV

image-20240907214210685

​ 简单来说就是x1与WQ得到q1,,,行列分别相乘。

2.计算QK相似度,得到attention值

image-20240907214449575

​ 为什么要除以根号dk,q与k相乘值很大,softmax在反向传播的时候值很小,梯度会消失。在实际代码使用矩阵,方便并行。

image-20240907214659540

3.多头注意力机制

​ 多头,相当于把原始数据打到了多个不同的空间,保证TRM捕获到不同空间中的多种信息。

image-20240907215013033

​ 最后,我们将多套QKV计算得到的 结果通过一次矩阵计算进行合并,这样就可以得到我们多头注意力的输出。

image-20240907215151412

四、残差详解

1.什么是残差网络

​ 残差的原则就是输出至少不比输入差!多进行一个加法操作。image-20240907215526751

​ 我们可以再看一个很经典的图:
image-20240907215647125

2.残差网络的数学推导

image-20240907215840835

五、Batch Normal详解

​ BN的效果差,所以不用。再nlp中,很少使用BN,大多使用LN。

1.什么是BN,以及使用场景

image-20240907220213021

​ 我们看下面一张图:
image-20240907220301380

​ 每一行代表一个特征,每个人的“体重,身高”等指标,每个人的第一个特征都是“体重”。x1,x2分别代表不同的人。

2.BN的优点

  1. 可以解决内部协变量偏移
  2. 缓解了梯度饱和问题(如果使用sigmoid激活函数的话),加快收敛

3.BN的缺点

  1. batch_size较小的时候,效果差,局部的方差并不能代表全局
  2. BN再RNN中效果差,我们看下面的例子:前9个句子只有5个向量,但是第10个句子的长度达到20个向量的,这样导致第6到20维无法做BN,从而导致BN在RNN的处理中效果差
    image-20240907220713990

六、Layer Normal详解

1.如何理解LN

​ 理解:为什么LayerNorm单独对一个样本的所有单词做缩放可以起到效果。

​ 我们如果把BN引申到RNN,下面这张图则表示“我”和“今”是同一层的语义信息,,,“爱“和”天“是一层语义信息里面。

image-20240907221036404

​ 而在LN中,我们认为这两段话每段话都是分别的一个语义信息。

2.前馈神经网络

image-20240907221259306

七、Decoder详解

image-20240907221431239

1.多头注意力机制

image-20240907221510988

2.为什么需要mask

image-20240907221541150

​ 如果我们没有mask去训练的时候,我们在训练you的时候,所有的单词都对you做出了贡献。这样会导致训练和预测是不对等的。
image-20240907221638396

​ 正确的做法是:
image-20240907221734234

3.交互层

​ 我们再来看一下交互层,在交互层我们需要注意的是encoder的输出需要和每一个decoder做交互。
image-20240907221920599

image-20240907221957464

image-20240907222101400

image-20240907222158754

这篇关于Transformer从零详细解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146562

相关文章

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

沁恒CH32在MounRiver Studio上环境配置以及使用详细教程

目录 1.  RISC-V简介 2.  CPU架构现状 3.  MounRiver Studio软件下载 4.  MounRiver Studio软件安装 5.  MounRiver Studio软件介绍 6.  创建工程 7.  编译代码 1.  RISC-V简介         RISC就是精简指令集计算机(Reduced Instruction SetCom

arduino ide安装详细步骤

​ 大家好,我是程序员小羊! 前言: Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境,使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤,包括 Windows、Mac 和 Linux 系统。 一、在 Windows 上安装 Arduino IDE 1. 下载 Arduino IDE 打开 Arduino 官网

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到

【详细介绍一下GEE】

GEE(Google Earth Engine)是一个强大的云计算平台,它允许用户处理和分析大规模的地球科学数据集,如卫星图像、气候模型输出等。以下是对GEE用法的详细介绍: 一、平台访问与账户设置 访问GEE平台: 用户可以通过访问Google Earth Engine的官方网站来开始使用GEE。 创建账户: 用户需要注册并登录Google账户,然后申请访问GEE平台。申请过程可能需要提

专题二_滑动窗口_算法专题详细总结

目录 滑动窗口,引入: 滑动窗口,本质:就是同向双指针; 1.⻓度最⼩的⼦数组(medium) 1.解析:给我们一个数组nums,要我们找出最小子数组的和==target,首先想到的就是暴力解法 1)暴力: 2)优化,滑动窗口: 1.进窗口 2.出窗口 3.更新值 2.⽆重复字符的最⻓⼦串(medium) 1)仍然是暴力解法: 2)优化: 进窗口:hash[s[rig

单位权中误差 详细介绍

单位权中误差(Unit Weight Error, UWE)是用于描述测量数据不确定性的一个统计量,特别是在地理信息系统(GIS)、导航和定位系统中。它主要用于评估和比较不同测量系统或算法的精度。以下是对单位权中误差的详细介绍: 1. 基本概念 单位权中误差(UWE): 定义:单位权中误差表示每个观测值(测量值)在估算中的标准误差。它是误差的一个统计量,主要用于评估测量系统的精度。单位:通常