Transformer问题总结及实现

目录

前提:

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

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,layer norm是在整个样本上进行归一化,而不是在整个批次上进行归一化,这样做的意义是:举个例子,我有一个小毛驴,我从来也不骑。假设转化为token为 1 2 3 4 5 6 7,那么对于1 2 3 4 5 6 7为整体进行归一化。具体公式为:

\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的优点的同时,又加上了正则化来避免过拟合。

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

2.1:Encoder细节

2.2:Decoder细节

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

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Transformer是一种神经网络模型,广泛应用于各个领域。无论是自然语言处理中的BERT还是图像处理中的GPT,Transformer的适用性都得到了体现。本文将简要介绍Transformer模型的基本原理,并提供了基于PYTORCH实现的代码和详细讲解。 Transformer模型主要用于处理序列数据,最初被应用于自然语言处理领域。但在计算机视觉领域,由于图像是二维的,需要将图像转换为一维的序列数据。常用的两种方法是直接分割图像和使用卷积核进行分割。 Transformer的核心思想是自注意力机制,通过直接注意到序列中的不同位置之间的关系来建立上下文信息。它由编码器和解码器组成。编码器将输入序列映射为一系列高维向量表示,而解码器将这些向量转换为输出序列。编码器和解码器都由多层的自注意力机制和前馈神经网络组成。自注意力机制允许模型在每个位置上根据整个序列计算权重,以便更好地捕捉上下文信息。 具体而言,自注意力机制使用注意力权重来计算每个位置与其他位置的关联程度,并将这些关联程度作为权重应用于对应位置的向量。注意力权重由查询、键和值三个向量计算得出,其中查询向量用于计算注意力分数,键和值向量用于建立上下文关联。通过多头注意力机制,Transformer模型能够从不同的子空间学习不同的特征表示,提高了模型的表达能力和泛化能力。 除了自注意力机制,Transformer还引入了残差连接和层归一化来加强模型的训练和优化。残差连接可以避免梯度消失问题,层归一化可提高模型的稳定性和收敛性。 总结而言,Transformer是一种用于处理序列数据的神经网络模型。它通过自注意力机制来建立上下文关联,提高了模型的表达能力和泛化能力。在实现上,Transformer模型包括编码器和解码器,其中包括多层的自注意力机制和前馈神经网络。通过残差连接和层归一化的技术,可以加强模型的训练和优化效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【人工智能 AI】Transformer 神经网络模型的实现原理](https://blog.csdn.net/m0_57771462/article/details/129157291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Transformer模型入门详解及代码实现](https://blog.csdn.net/cuguanren/article/details/126540189)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [关于transformer的具体实现步骤](https://blog.csdn.net/zouxiaolv/article/details/127615332)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值