跳转至

常见大模型(LM)原理

概要说明

参考文献1:国外版本的大模型列表 Awesome-LLM

参考文献2:国内版本的大模型列表 awesome-llm

一些常用的模型参数心理要有数:LLAMA2(LLAMA3)、ChatGLM3、GPT2、bert

模型 来源 参数量 最大上下文长度 显存占用(全精度)
llama2 Meta 7B/13B/70B 4k(4096) 28G/52G/280G
chatglm3 THU 6B 8k/32k/128k 24G~28G
gpt2 OpenAI 117M/345M/762M/1.5B 1k(1024) <6G
bert Google 110M/340M 1k(1024) <2G
  • 精度:通常有Float32(4字节)(又称全精度) / Float16(2字节) / Int8(1字节) / Int4(0.5字节)
  • Alpaca 是斯坦福在LLaMa-7B的基础上监督微调出来的模型
  • Vicuna 是在LLaMa-13B的基础上使用监督数据微调得到的模型,数据来自ShareGPT.com
  • 1T:表示10的12次方,即1万亿,其次是 1B(10亿)、1M(100万)

BERT

参考文献:BERT/RoBERTa/ALBERT/ELECTRA、ERNIE

仍在补充中...

GPT

Method

为了更加深入了解 GPT 模型,我研究了它的实现代码,其实并不可怕。

具体的代码分析,请参考我的另一个blog "GPT代码分析", 本小节不再赘述。

An image caption

Motivation

GPT1模型的训练主要分为下面两个阶段:

阶段一【无监督学习】:给定上文预测下一个单词发生的概率。模型学习利用最大似然思想。

阶段二【有监督学习】:根据不同的有监督下游任务,去微调模型产生下游任务模型集合。

这种做法比较繁琐,且训练出的模型泛化性较差,所以GPT2的思想是只训练一阶段模型,直接将下游任务(task)作为输入,放入无监督语言模型中做训练。因此,GPT2不需要刻意地组织训练集的格式,只需要将海量的数据直接喂给模型,它自然能学习到各种技能,且在预测时,只需要给一些提示(Prompt),就能够得到比较不错的输出。

GPT3的动机更加简单,因为GPT2的效果不好,觉得原因可能是大小不够 + 训练不够。

Framework

整体来说,三代模型没有太大的差别,主要是增大了参数量、训练量和加入了一些小修改。

GPT1的Decoder模块由12层简化版DecoderLayer串联而成。GPT2的模型结构和GPT1基本一致,不同点在于:LayerNorm被提前至DecoderLayer的输入位置、残差层参数的初始化参数统一除以残差网络的层数开根号的倒数、词典大小变为50257,句子的长度从512变为1024,batchsize变为512。

Pre-LayerNorm 可以减少训练过程中的内部协变量偏移(Internal Covariate Shift),从而加速收敛速度,并且有助于训练更深的网络结构。

GPT3整体结构和GPT2基本一致,有两点不同:(1)模型中的Transformer采用的是类似Sparse Transformer 的结构,用以节省模型训练过程中的显存占用。(2)GPT3训练了8种参数量不同的模型,最大参数量为175B。

自注意力机制允许查看输入序列中的所有位置,其计算成本随着序列长度的增加而呈二次方增长,从而限制了模型处理长序列的能力。Sparse Transformer 可缓解这个问题:

(1)分块注意力(2)稀疏全局注意力(3)分层注意力。

LLAMA

参考资料:LLaMA v1/2模型结构总览

An image caption

可以发现很像GPT的结构,主要分为:Attention层和MLP层两个部分。接下来详细介绍它的每个部分。

Group-Query Attention

自回归模型生成回答时,需要前面生成的KV缓存起来,来加速计算。多头注意力机制(MHA)需要的缓存量很大,Multi-Query Attention指出多个头之间可以共享KV对。Group-Query Attention没有像MQA一样极端,将query分组,组内共享KV,效果接近MHA,速度上与MQA可比较。

An image caption

为什么Q一定要不同? 当然啦,不然搞什么多头注意力哈哈哈

RMSNorm

详细请参见我的另一个 blog "Normlization"

SwiGLU

参考资料:大模型基础|激活函数|从ReLU 到SwiGLU

感觉自己的总结是全网最好的 : )

  • ReLU & GELU & SiLU & Swish
An image caption
An image caption
  • GLU 门控线性单元
An image caption

GLU(Gated Linear Units)其实不算是一种激活函数,而是一种神经网络层。它是一个线性变换后面接门控机制的结构。其中门控机制是一个sigmoid函数用来控制信息能够通过多少。这种机制可以使模型自动地选择性地保留或丢弃输入的某些部分,从而提高了模型的表达能力和泛化能力。

  • SwiGLU = Swish + GLU
An image caption

SwiGLU 整合了Swish和GLU(采用Swish作为激活函数的GLU),使得神经网络能够自适应地选择性地保留或丢弃输入的某些部分,从而提高了模型的表达能力和泛化能力。

RoPE

Llama和GPT使用的位置编码不同,RoPE即有绝对位置编码的优势,又有相对位置编码的优势。这个不同不仅仅是方法的不同,而更重要的是实现位置的不同!

详细请参见我的另一个 blog "位置编码"

GLM

An image caption

Motivation

  • autoregressive自回归模型(AR模型):代表作GPT,通常用于自然语言生成式任务(NLG)。
  • autoencoding自编码模型(AE模型):代表作BERT,适用于自然语言理解(NLU),无法直接用于文本生成。
  • encoder-decoder(Seq2seq模型):代表作T5,用于条件生成任务,比如文本摘要、机器翻译等。

GLM模型基于autoregressive blank infilling的方法,想要结合上述三种预训练模型。

Framework

An image caption

整体来说GLM的在模型架构上没有什么创新,重点在于训练任务的设计。

Method

自回归空白填充

An image caption

可以把自回归空白填充理解为BERT的掩码语言模型,但是GLM掩码的不是一个单词或是一个实体,而是一个句子片段。这个句子片段的具体内容通过自回归的方式来预测。主要来说有两个优点:

  • 进行生成任务时,GLM可以看到上文的信息。
  • GLM预测的Span的长度是不固定的。

二维位置编码

这个二维位置编码有片段间位置编码(intra-position encoding)片段内位置编码(inner-position encoding)组成。具体来说:GLM将Part A和Part B拼接到了一起。对于Part B中的一个token,他有两个位置信息,一个是它在原始文本中的位置,另外一个是它在文本片段中的位置。为了表示这个信息,GLM提出了二维位置编码。