目录
4.Encoder-only和Decoder-only的区别是什么呢?(解决)
优化2:ALiBi(Attention with Linear Biases)
优化3:MQA(Multi-Query Attention)
优化4:GQA(Grouped-Query Attention)
9.Padding Mask 、 Attention Mask 、 Casual Mask是什么?有什么用?(解决)
10.transformer结构怎么进行更好地并行训练?(解决)
11.Transformer层归一化函数是什么?有什么改进?(解决)
13.Transformer的注意力机制中,为什么要除以?(解决)
14.Transformer中用的优化器是什么?有哪些其他的优化器?(解决)
16.为什么在获取输入词向量之后要对矩阵乘以Embedding size的开方,意义是什么?(解决)
17.Transformer训练的时候,学习率是怎么设定的?Dropout是怎么设定的,位置在哪里?在测试的时候,Dropout需要注意什么?(解决)
Step1:关于Transformer的疑问
1.关于Encoder和Decoder连接的问题(解决)
问题描述:encoder层的输出向量是传递给第一层decoder还是所有层的decoder呢?
答案:所有层
2.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.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.位置编码是什么样的,可以怎么优化?(解决)
答案:
优化0:标准位置编码:
解释一下参数:1.pos指的是token所在的位置;2.d指的是编码向量的维度;3.point是编码点,取值范围是[0,d-1];4.k的取值范围是[0,d/2],k = [point /2],当计算位置编码点point是偶数的时候,用sinx计算,当计算位置编码点point是是奇数的时候,用cosx计算。
举个例子:我打篮球 对我进行512维位置编码,token化省略
我 = [,
,....]在对我进行编码的第一个位置,其实这个时候point是0,是偶数,所以这个时候会用sinx计算,并且k = 0/2取整,所以是0;进行编码的第二个位置,这个时候编码点point是1,是奇数,所以这个时候会用cosx计算,并且k = 1/2取整,所以是0
优化1:RoPE(含数学推导)
总结:ROPE是为了推导出如下图1的公式,因为图1的公式表示有相对位置信息;图4到图7就是构造出图1公式的方法!!
为了推导出如下等式:

为什么要推导出这个等式呢?
因为ROPE是在自注意力机制中实施的,如果推导出这个等式的话,那么说明q矩阵的m元素和k矩阵的n元素的相对位置信息可以通过g(x)确定的。

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

因此ROPE的优势在于:可以明确Xm和Xn的相对位置信息。
那么现在的问题就转化为:怎么能够构造出图1的公式呢?
如果fq,fk可以表示成下面的形式就可以:

然后,fq可以进一步表示为:

当d>=2时,旋转位置编码为:

由于矩阵中存在大量的稀疏性,因此可以进一步转换为(也就是旋转矩阵的计算方式):

优化2:ALiBi(Attention with Linear Biases)
继承了深度学习中名字很高大上,但是概念并不复杂的情况。
主要就是在softmax前的结果添加一个不可学习的bias和矩阵,具体情况如下:

主要问题有两个:
1.m的取值:如果head = 8,则:m = ;如果head = 16,则:m =
;
2.矩阵取值:[相应位置上k的索引] - [相应位置上q的索引];
6.当前的注意力机制是什么样的,可以怎么优化?(解决)
答案:
优化0:MHA
当前的注意力机制是: 或者多头注意力机制(注意到不同的表征空间之后,再去聚焦)。这里的注意力机制就出现了两个问题: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 V1
具体原理是为了减少每次从HBM读取的时间,主要是在计算softmax的时候增加了速度。标准Attemtion的计算思路是:
Flash Attention的代码如下:
大致意思就是将矩阵分块,然后动态地计算softmax,这样可以减少对HBM的访问次数。难点在于:动态实现softmax的过程;
有以下两个定理:
定理1主要是第9行和第12行的计算过程;定理2主要是第6行和第8行的读取过程。
直观理解为什么访问次数会变少:需要矩阵的哪一块就传输哪一块,不需要每次都全部传输。
优化3:MQA(Multi-Query Attention)
优化4:GQA(Grouped-Query Attention)
7.前馈神经网络层是什么样的,可以怎么优化?(解决)
答案:Transformer的前馈神经网络层是由两层线性层和一层非线性层组成,结构是:全连接层 + 非线性层 + 全连接层
优化方式主要是非线性层上的优化,如下
8.非线性化是什么样的,可以怎么优化?(解决)
答案:
优化0:Relu = max(0,x)
原理:把小于零的部分变成零
先说一下Relu的缺点:Relu的特点是,当x<=0的时候,会将x设置为0,这样如果出现了大量负数的情况,就会出现大量为0的情况,使得这些神经元在学习的时候就变得无效,无法学习。
优化1:SwiGLU
,通常取
为1
这里的和
是
经过了两个线性层得到的。
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层归一化函数是什么?有什么改进?(解决)
答案:
优化0:Layer norm
举个例子:
如果编码后的向量是(5,10),也就是5个token,每个token的向量维度是10,那么对于layernorm来说,归一化是横着来的,最后结果是(5,1);但是batchnorm是竖着来的,最后结果是(1,10).layernorm对于某个token进行归一化,batchnorm是以这句话为整体进行归一化。
具体公式为:
其中
和
是可学习的参数
优化1:RMSNorm
具体公式如下:
12.Transformer层归一化的位置在哪里,有什么改进?(解决)
答案:Transformer层归一化的位置在注意力机制和FFN层之后,LLama模型的层归一化位置在注意力机制和FFN层之前;
Post Norm 就像在何凯明修的高速公路上,每一层都加了一个收费站;Post Norm其实损害了Resnet的结构。
13.Transformer的注意力机制中,为什么要除以
?(解决)
答案:
13.1:为了避免梯度消失
先解释避免梯度消失:在softmax函数而言,值越大,导数值越小,除以sqrt(d_k)之后,导数值相对变大。
13.2:归一化(含数学推导)
再解释一下归一化,数学计算如下:条件: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.多头注意力机制的实现方式(解决)
答案:如果一句话有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),具体变换的意义也是很明显的
16.为什么在获取输入词向量之后要对矩阵乘以Embedding size的开方,意义是什么?(解决)
答案:举个例子就明白了,假设在Transformer经过了embedding之后,大多数值只有0.01到0.1,那么经过自注意力层相乘之后,数值就更小了,有点太小了,后续模型中的梯度在反向传播的时候迅速衰减,难有有效更新。(通俗版本)
具体来说是因为模型各层之间的数值大小应保持一致,避免在训练过程中出现数值不平衡的问题。
17.Transformer训练的时候,学习率是怎么设定的?Dropout是怎么设定的,位置在哪里?在测试的时候,Dropout需要注意什么?(解决)
答案:
1.Transformer是使用“学习率预热+学习率衰减”策略,
2.Dropout的位置在多头注意力的Softmax之后,Relu之后,残差连接之后。值建议为0.1,原理是:随机丢弃神经元中的一部分,避免对于这部分的依赖,是一种正则化技术。
3.测试的时候,设置model.eval(),关闭Dropout选项;