nlp第十节——LLM相关
一、模型蒸馏技术
本质上是从一个大模型蒸馏出小模型,从小模型训练出来的概率分布(如自回归模型预测下一个字的概率分布)分别与大模型预测的概率分布和ground label求loss。与大模型预测的概率分布用KL散度求loss,与ground label用交叉熵求分布。
KL散度:
二、SFT(有监督微调)
给模型的输入通常是问答对的形式,答就是对模型输出的监督,所以是一个有监督模型。在预训练阶段通常是对无标注数据进行自监督训练,可以减少很多人工标注的成本。相比较自回归预测下一个字的模型,SFT的区别在于,输入是问答对的方式,且输入与输出间有sep分隔,输出结果仍然按照预测下一个字的概率分布的形式,但是我们需要的结果是从sep开始的,而且loss只从预测出的sep后的第一个字开始计算,直到预测到终止符结束(使用掩码注意力机制进行训练,这是它与预训练在训练方式上的差距)
三、LLM的一些模型结构变化
multi-head共享:
第一个就是我们常见的multi-head机制,然后演化成了第三种multi-query,这种机制在计算k,v的时候不用768×768的矩阵,而是768×64的矩阵,再把L×64的矩阵与多个queries矩阵相乘,再拼接在一起,这种方式的目的是减少参数,加速训练。最后演化成了现在常用的第二种grouped-query,这种机制在计算k,v的时候不用768×768的矩阵,而是768×256的矩阵,然后分成四块,再将queries分组,分别相乘。
attention结构:
左边是传统的transformer block,右边进行了一些改动,将self-attention和feedfarward层并行计算,而不是左边的串行计算。
归一化层位置的选择:
归一化的方式:
激活函数:
swish函数相当于sigmoid(x)×x,有门的机制,对x的内容进行有效提取。
RoPE:
由于transformer在进行运算时,基本上都是线性层,改变两个字的顺序只会改变矩阵中行的位置,没有明显的位置信息,所以提出了位置编码。同时为了能让预测序列比训练序列长的时候仍有好的表现,也就是有比较好的长度外推性,提出了相对位置编码(bert里的position embedding是绝对位置编码,限制了预测的输出的长度)
换一种思维,我们本质上是想保留语序信息,所以我们可以在attention机制的部分保留每个字两两之间的语序信息,也就是保留第m个字和第n个字(m-n)的信息。所以提出了RoPE。它是在q和k矩阵相乘之前分别作用在q,k矩阵上的。
MOE架构:
在过线性层时,设置多个线性层,在进入feedforward前先做一个分类任务,经过router选择,一部分选择过线性层A,一部分选择过线性层B,然后按概率加权求和。
四、LLAMA2结构
在每一个block里,用pre-LN的方式先进行RMSnorm,接着过attention的掩码注意力机制层,q,k首先分别进行相对位置编码(RoPE),然后再相乘归一化后与v相乘,接着过一层线性层,过一层残差链接来到前馈网络,首先依然是RMSnorm,接着过线性层和激活函数再过一层线性层和残差链接。