首页 > 其他分享 >Transformer问题总结及实现

Transformer问题总结及实现

时间:2024-08-17 21:57:46浏览次数:10  
标签:总结 Transformer 实现 30 token 归一化 维度 优化

目录

前提:

注意:以下对于优化的问题,要回答这个问题:前一种方法的局限性在哪里,优化的方法是怎么进行优化的?(未完全解决)

Step1:关于Transformer的疑问

Step2:关于Transformer各层的实现(未解决)

2.1:Encoder细节

2.2:Decoder细节

2.3:怎么用Transformer提升Kaggle平台的House_pricing竞赛?


前提:

注意:以下对于优化的问题,要回答这个问题:前一种方法的局限性在哪里,优化的方法是怎么进行优化的?(未完全解决)

Step1:关于Transformer的疑问

1.encoder层的输出向量是传递给第一层decoder还是所有层的decoder呢?(解决)

答案:所有层

2.transformer的encoder层的输入和输出维度是什么呢?(解决)

答案:encoder层的输入是(a,b),有a句话,每句话是b个分词的token,然后输入到encoder中,假设embed层是(m,n)的,那么经过embed层之后就是(a,b,n)了。 因为有resnet层的存在,所以encoder的每一层的输出和输入的维度是一样的。

解释一下:embedding层的参数含义:m指的是token表的大小,n指的是嵌入向量的维度

Attention层的参数含义:Q,K,V的维度大小是(n,d_k),n是为了迎合嵌入向量的维度,因为要做矩阵乘法,d_k是Q自身的维度,也就是softmax中要除以的那个d_k

3.Transformer的decoder层的输入和输出维度是什么呢?(解决)

答案:Transformer的decoder层输入和输出的维度是相同的。这通常由输出前的线性层决定,线性层的维度是(n,类别个数),取决于需要分类的类别个数,然后经过softmax将结果转换为概率分布,输出结果。

注意:将问题2和问题3总结一下,假设embed层的维度是(m,n),decoder层最后输出的线性层维度是(n,k),这里m是输入词汇表的大小,k是输出词汇表的大小,n是嵌入向量的维度。在Encoder的内部其他的任何层的输出维度都是一样的,在Decoder的内部其他的任何层的输出维度都是一样的,这样是为了保证可以进行resnet。

4.encoder-only和decoder-only的区别是什么呢?(解决)

答案:encoder-only是将输入x变成特征向量,然后用于下游的具体任务的操作方式,适合用于分类任务等有分类性质的任务;

decoder-only利用自回归的方式去预测下一个token的操作方式,decoder-only模型常用于生成任务

5.位置编码是什么样的,可以怎么优化?(未解决)

答案:Transformer中用的是标准位置编码,公式如下:

PE(pos,point) = sin(\frac{pos}{10000^{2k/d}}) \\ PE(pos,point) = cos(\frac{pos}{10000^{2k/d}})

解释一下参数:1.pos指的是token所在的位置;2.d指的是编码向量的维度;3.point是编码点,取值范围是[0,d-1];4.k的取值范围是[0,d/2],k = [point /2],当计算位置编码点point是偶数的时候,用sinx计算,当计算位置编码点point是是奇数的时候,用cosx计算。

举个例子:我打篮球  对我进行512维位置编码,token化省略

我 = [sin(\frac{0}{10000^{0/512}}),cos(\frac{0}{10000^{0/512}}),....]在对我进行编码的第一个位置,其实这个时候point是0,是偶数,所以这个时候会用sinx计算,并且k = 0/2取整,所以是0;进行编码的第二个位置,这个时候编码点point是1,是奇数,所以这个时候会用cosx计算,并且k = 1/2取整,所以是0
优化:RoPE解释如下:RoPE只考虑局部的两个相邻分量之间的关系。

举个例子,如果x = [x_1,x_2,x_3,x_4],那么第一组分量是[x_1,x_2],第二组分量是[x_3,x_4]

推导出这个等式的关键一步是为了推导出如下等式:

为什么要推导出这个等式呢?

 其中,各部分有相应的含义:

6.当前的注意力机制是什么样的,可以怎么优化?(未解决)
答案:当前的注意力机制是:score = softmax(\frac{QK^T}{sqrt(d_k))})V 或者多头注意力机制(注意到不同的表征空间之后,再去聚焦)。这里的注意力机制就出现了两个问题:1.复杂度高;2.由于计算和内存限制难以处理超长文本,文本长度的限制,如果记忆5000个token,计算量需要25000000。

优化1:稀疏注意力机制:背景是:在传统的注意力机制的情况下,每一个token需要注意到所有的token,计算复杂度是O(N^2)(这里动手计算一下Q*K^T就明白了),所以呢,这个时候,不要求每一个token注意到所有的token,只要求它注意到和它相邻的前后k个token,这个时候算法复杂度是O(N * K),在处理长序列的时候,可以减少内存的消耗;或者将一句话分成不同大小的块,只要求每一个token注意到块中的token即可。(动手计算一下Q*K^T就明白了)

优化点:1.复杂度减少 2.相应的,可以处理超长token的建模问题

优化2:Flash attention机制:

7.前馈神经网络层是什么样的,可以怎么优化?(解决)

答案:Transformer的前馈神经网络层是由两层线性层和一层非线性层组成,结构是:全连接层 + 非线性层 + 全连接层
优化方式主要是非线性层上的优化,如下

8.非线性化是什么样的,可以怎么优化?(未解决)

答案:Transformer的激活函数是Relu = max(0,x),把小于零的部分变成零

先说一下Relu的缺点:Relu的特点是,当x<=0的时候,会将x设置为0,这样如果出现了大量负数的情况,就会出现大量为0的情况,使得这些神经元在学习的时候就变得无效,无法学习。

优化:SwiGLU = swish(x_1) * \sigma(x_2) \\ swish(x_1) = x_1 * \sigma(\beta*x_1) \\ \sigma(x_2) = \frac{1}{1+e^{-{x_2}}},通常取\beta为1

这里的x_1x_2x经过了两个线性层得到的。

优点:SwiGLU更加的平滑,再加上门控的优点??

9.Padding Mask 、 Attention Mask 、 Casual Mask是什么?有什么用?(解决)

答案:9.1:padding mask是处理变长的序列的过程中,在较短的序列后加上padding,使得所有序列变成相同长度;

9.2:attention mask是在计算注意力机制的时候,确保哪些token可以被看到,例如:casual mask,确保在decoder中的自回归步骤,只能看到该token之前的token,而看不到后面的token,这样保证在训练的过程中,在自回归的过程中,预测的结果是真的预测出来的,而不是提前看见,然后说出来的

9.3:MLM Mask:这是在bert中用到的掩码机制,bert是encoder-only模型,在训练的时候,随机掩盖15%的token,让bert来学习,在掩盖的15%token中,其中80%是掩盖为[Mask]标记,10%替换为随机token,10%不变

10.transformer结构怎么进行更好地并行训练?(解决)

答案:10.1:self-attention计算注意力的时候是并行计算的;
10.2:层并行化,Transformer的不同层放到不同的GPU上进行并行处理;
10.3:数据并行化:将数据切分为一定大小的batch;
等等

11.Transformer层归一化函数是什么?有什么改进?(解决)

答案:1.层归一化函数,在Transformer中是layer norm,举个例子:

如果编码后的向量是(5,10),也就是5个token,每个token的向量维度是10,那么对于layernorm来说,归一化是横着来的,最后结果是(5,1);但是batchnorm是竖着来的,最后结果是(1,10).layernorm对于某个token进行归一化,batchnorm是以这句话为整体进行归一化。

具体公式为:

\mu = \frac{\Sigma x_i}{n} \\ \sigma = sqrt(\frac{\Sigma(x_i - \mu)^2}{n}) + \epsilon\\ y_i = \gamma*\frac{x_i - \mu}{\sigma} + \beta其中\gamma和\beta是可学习的参数

2.除了层归一化之外,还有RMSnorm,RMSnorm其实也是在layer norm的基础上进行改进的,具体公式如下:

\sigma = sqrt(\frac{\Sigma(x_i - \mu)^2}{n}) + \epsilon\\ y_i = \gamma*\frac{x_i}{\sigma} + \beta

12.Transformer层归一化的位置在哪里,有什么改进?(解决)

答案:Transformer层归一化的位置在注意力机制和FFN层之后,LLama模型的层归一化位置在注意力机制和FFN层之前

13.Transformer的注意力机制中,为什么要除以sqrt(d_k)?(解决)

答案:一方面是为了避免梯度消失,另一方面是为了归一化。

先解释避免梯度消失:在softmax函数而言,值越大,导数值越小,除以sqrt(d_k)之后,导数值相对变大。

再解释一下归一化,数学计算如下:条件:Q和K的均值为0,方差为1且Q和K相互独立;将矩阵Q分块为(q1,q2,...,q_d),同样将K也这样分块,(k1,k2...,k_d),在计算的时候Q*K^T = q1*k1 + q2*k2 + ... + q_d * k_d.,于是Var(Q*K^T / sqrt(d)) =  1(动手写一下就明白了,假设均值为0,方差为1,且QK独立是重要的)

为什么Q和K可以假设为独立的呢? 这就要追溯到QK是怎么得到的,Q = x * Wq K = x*Wk,这里x是常数,因为Wq和Wk是独立的,所以Q和K是独立的

所以就进行了所谓的归一化

14.Transformer中用的优化器是什么?有哪些其他的优化器?(解决)

答案:SGD,Adam,AdamW
SGD适用于简单的机器学习模型和深度学习模型;Adam适用于复杂,高维,噪声较大的任务;Adamw保留了Adam的优点的同时,又加上了正则化来避免过拟合。

15.介绍一下Transformer中的多头注意力机制的实现方式是什么样的?(解决)

答案:如果一句话有30个token,编码后的向量维数是(30,512),WQ,WK,WV是(512,512),那么Q,K,V是(30,512),然后分到八个头,每个头有64维,那么Q,K,V就是(8,30,64),然后Q,K做注意力机制的乘积,得到了(8,30,30),然后再做softmax之后和V相乘得到(8,30,64),然后再把八个头合起来,先变成(30,8,64),然后合起来(30,512).

如果一个batch有64句话,那么在维度的最前面加上64,例如(64,8,30,64),具体变换的意义也是很明显的

Step2:关于Transformer各层的实现(未解决)

注意:所有的零件都可以去网上找,来组装一个变形金刚,但是不要直接找一个变形金刚来用,自己动手组装一个,当然了,也可以自己修改零件

2.1:Encoder细节

2.2:Decoder细节

2.3:怎么用Transformer提升Kaggle平台的House_pricing竞赛?

标签:总结,Transformer,实现,30,token,归一化,维度,优化
From: https://blog.csdn.net/sccum/article/details/141068029

相关文章

  • 办公室bye-bye:两步实现居家办公,远程控制软件来帮忙
    在这个说走就走、随时在线的时代,远程办公早就不再是科幻片里的桥段了。不管你是被疫情逼得“宅家办公”,还是出差在外需要紧急处理文件,远程控制软件简直就是你的超级英雄,今天教你两步搞定远程工作,效率翻倍!第一步:挑个好'遥控器',告别办公室束缚1. 向日葵远程控制超空间→ h......
  • 原生微信小程序笔记完整总结4.0
       ......
  • 使用 Ollama 集成 GraphRag.Net:一步步教你如何实现
            在当今的技术世界,人工智能(AI)正在以惊人的速度发展。对于开发者来说,使用最新的工具和框架来提升工作效率至关重要。而在AI领域,GraphRag.Net作为一个强大的图算法框架,允许我们以高效的方式进行数据处理。同样,Ollama作为一个开源的、简单易用的AI模型部......
  • 【面试宝典】java基础面试题总结[上]
    一、Java中有几种基本数据类型?各占多少字节?在Java中基本数据类型有8个,占用的字节分别是整型byte(1个字节)、short(2个字节)、int(4个字节)、long(8个字节);浮点型float(4个字节)、double(8个字节);布尔类型boolean;字符类型char(2个字节)。二、String类能被继承吗?为什么?Stri......
  • 2024暑假第七周总结
    学生管理系统基础构建需求分析需求:实现学生的基本管理功能,包括:添加、删除、更新、查询学生信息设计:确定系统的主要模块,包括:学生类、学生管理类、用户界面等。学生类属性:学生学号、姓名、年龄、班级方法:获取和设置属性值、展示学生信息学生管理类功能:添加、删除、更新、查......
  • 8.17周总结
    本周学习的东西比较少,因为也要准备开学考试,本周将老师所留的PTA程序设计实验进行了结尾,并对CSS代码中的三个重要方面进行了学习,常规流,浮动。对于常规流,就是属于我们平常所写的一些代码,在这里我们了解了盒子的包含块,等于其父元素的内容盒;我学习了块盒,对于在块盒中,我知道了每个块盒......
  • SciTech-BigDataAIML-LLM-Transformer Series-Self-Attention:由Dot-Product(向量点乘)
    SelfAttention:由Dot-Product(向量点乘)说起https://lulaoshi.info/deep-learning/attention/transformer-attention.html#self-attention-从向量点乘说起Transformer[1]论文提出了一种Self-Attention(自注意力机制),Self-Attention的最核心的公式为:\(\large\begin{align*}......
  • 每周总结
    学习HDFS(HadoopDistributedFileSystem)时,需要从架构原理、数据存储机制、操作实践以及性能优化等多个方面进行系统掌握。以下是学习HDFS时的重点内容:1.HDFS架构NameNode:负责管理文件系统的元数据(如文件名、目录结构、文件与数据块的映射、数据块的位置等)。了解NameNode的作用......
  • HTML基础总结
    HTMLHTML4编辑器:VsCodeVsCode中的快捷键:标准结构!删除当前行中的内容ctrl+shift+k注释:语法:<!---->字符编码:默认:绝大多数浏览器认为你使用UTF-8编码,因此会用UTF-8解码语法:<head> <metacharset="utf-8"></head>过程:源代码to编码to编码后的进......
  • 2024-08-17:用go语言,给定一个从0开始的整数数组nums和一个整数k, 每次操作可以删除数组
    2024-08-17:用go语言,给定一个从0开始的整数数组nums和一个整数k,每次操作可以删除数组中的最小元素。你的目标是通过这些操作,使得数组中的所有元素都大于或等于k。请计算出实现这个目标所需的最少操作次数。输入:nums=[2,11,10,1,3],k=10。输出:3。解释:第一次操作后,nums变......