作者Tim在路上
随着生成式预训练模型的成功(GPT),似乎什么都可以采用生成式预训练模型来处理。通过“大力出奇迹”似乎什么问题都可以被解决,通用大模型的时代似乎已然到来。
今天我们就简单总结对比下GPT系列模型的差异,了解GPT系列模型的发展过程。
GPT-1GPT的第一篇论文,只有四位作者,当时发表是也不是特别突出。而且它不遵循任何惯例,在论文中数据集以 GB 而不是token来描述,并且模型中的参数数量没有明确说明,甚至怀疑这不是一个特别被重视的项目。
不过,其创造性的提出以Transformer的解码器来训练生成式模型,后面Bert的作者估计是看到了这篇论文,据说两个月时间就发表了以Transformer编码器训练的Bert模型。
我们来总结下GPT-1模型:
GPT-1 使用了一个仅有解码器的 Transformer 结构,每一个作为一个Layer,共有12层; 使用了一个 768 维的嵌入向量来表示输入序列中的每个词或标记,使用了 12 个并行的注意力头(attention heads); 使用Adam优化器进行模型训练,在训练过程中,使用了学习率的 warmup 阶段和余弦退火调度机制,以平衡训练速度和模型性能; 模型权重被初始化为均值为 0、标准差为 0.02 的正态分布(N(0, 0.02)),使用字节对编码(Byte Pair Encoding,BPE)来对文本进行分词处理,分词后得到的词汇表大小为 40000; 激活函数是 GELU; 文本输入序列固定长度是512; 参数量 117M; 使用了学习得到的位置嵌入向量(position embedding),而不是Attention is All You Need中使用的正弦位置嵌入向量;
参数数量上没有明确说明,但似乎约为 120M,足以轻松在单个标准 GPU 上运行。
粗略估计模型参数为 120M,优化器为 240M,参数为 360M;假设每个都是float32,那么这占用4字节* 360M = 1440MB/1.4GB。
他们使用BooksCorpus数据集(约 20M 个tokens),训练 100 个epochs,batch size大小为 64。按照现代标准,20M tokens是一个非常小的数据集。
与现在 GPT 相比,最令人惊讶的是它们训练了 100 个 epoch。现在GPT 很少会看到重复的数据,即使看到了,它们通常也只会看到某些数据点少量次数(2-4 倍),很难想象其重复了 100 次。
GPT-2
GPT-2 是GPT语言模型开始变大的地方,这是 OpenAI 第一次训练超过 1B 个参数的模型。
通过提升模型的规模,来凸显GPT的优势。在 GPT-1 中,作者训练了单个模型,但在这里,作者训练了一系列模型,其大小范围从 1x GPT-1 到 10x GPT-1(这是实际的 GPT-2 模型)。
与GPT-1相比,架构上有如下差异:
对不同层级对输入进行了层归一化操作,以加速训练和提高模型性能。此外,在最后一个自注意力块的输出上添加了额外的层归一化; 在权重初始化时,通过 1/sqrt(n) 进行缩放。这种缩放有助于减少梯度更新的方差,使训练过程更加稳定; 扩大了其词汇表的大小,词汇表大小约为 50,000(相比于约 40,000); 文本输入序列固定长度 1024(相比于 512)这使得模型能够更好地理解和生成更长的文本; batch size大小为 512(相比于 64)较大的批次大小有助于提高训练效率和模型并行计算的能力。 最大的模型具有约 15 亿个参数。
相比GPT-1数据集要大得多,从包含公开数据的大约 20M tokens (4GB) 数据到从互联网 ( WebText ) 抓取的 9B tokens 1 (40GB) 文本。
目前还不清楚他们是否像以前一样对模型进行了 100 epoch训练;他们说他们遵循了相同的训练程序,所以想必他们也遵循了同样的训练程序。同样,这与后来的工作有很大的不同。
从这里可以看出GPT-2与GPT-1 没有什么特别不同,最大的变化就是模型变大了。其他变化中比较重要的是是层规范的变化和权重缩放,但这似乎并没有产生很大的差异。
GPT-3
GPT-3是大语言模型开始受到关注的开始。在论文中,作者训练了 10 个模型,参数范围从 125M 个参数(“GPT-3 Small”)到 175B 个参数(“GPT-3”)。
在GPT-3中,模型的架构与GPT-2完全相同。唯一的区别是它们在transformer的各层中使用了“交替的稠密和本地带状稀疏注意力模式”。简单来说,GPT-3在注意力机制上进行了优化,引入了稀疏注意力的概念。
传统的点积注意力在计算复杂度上较高,而稀疏注意力可以提供更高的扩展性,并且在处理长序列时具有更高的效率。这种改进使得GPT-3能够更好地处理长文本输入,并且在计算效率和模型表现方面有所提升。
GPT-3引入稀疏注意力的原因尚不清楚,也许是因为计算限制造成的,论文中并没详细的说明如何如何使用模型并行性训练模型,使得论文更难以复现。
Megatron-Turing NLG
Megatron 是一篇极具影响力的论文,介绍了高效的模型并行架构。Megatron引入了张量并行(tensor parallelism),这是一种模型并行的变体,它将模型分割成多块,以实现层内模型并行,从而达到与单个GPU基准线76%效率相当的水平(尽管基准线只有峰值FLOPS的30%)。
在Megatron之前,模型并行ism的最新研究成果是使用模型流水线技术,例如GPipe。然而,这种方法很难实现,并且代码支持不够完善。也有一些尝试支持张量并行ism的工作,比如Mesh-Tensorflow,它引入了一种在TensorFlow中指定一类通用分布式计算的语言,但是并没有真正占据主导地位。
有趣的是,该论文的第一作者在发表前一年刚刚离开DeepMind进入Nvidia,这可能是他在Nvidia的第一个项目。
Megatron意识到如果,你有一个网络模型Y=f(XW),你沿着列拆分开了W=[W1, W2],然后Y=[f(XW1), f(XW2)],所以你不需要做任何操作来同步Y,transformer中唯一需要同步(all-reduce)的点是:
通过在这两个关键点进行同步操作,可以保证Transformer模型在计算过程中的正确性和一致性。
我强烈怀疑这就是 GPT-3 所做的,但GPT-3没有详细说明它们使用的具体并行模型。
他的原话是这样的:
To train the larger models without running out of memory, we use a mixture of model parallelism within each matrix multiply and model parallelism across the layers of the network.
推测这种并行方式就是“每个矩阵乘法内的模型并行性”的含义。
PaLM
PaLM才是真正的“大”模型。它是迄今为止训练的最大的密集语言模型,参数为 540B,需要 6144 个 TPU 来训练(这是 3 个完整的 TPU pod,每个包含 2048 个 TPU)。这太贵了!可能只有谷歌拥有资源+基础设施来做到这一点。
与GPT-3相比的变化:
多查询注意力(Multi-query attention):在每个注意力头中共享K/V(Key/Value)嵌入,但使用独立的Q(Query)嵌入。这样做可以在推理阶段显著提高模型的速度。 并行Transformer块:使用并行的Transformer块来提高训练时间,相较于传统的串行设计,可以减少约15%的训练时间。 SwiGLU激活函数:与GPT-3使用的GELU激活函数不同,这里采用了SwiGLU激活函数。 RoPE嵌入:使用RoPE(Relative Positional Encodings)嵌入代替学习得到的嵌入方式。 输入-输出嵌入共享:共享输入和输出的嵌入层。 无偏置向量:模型中没有使用偏置向量。 SentencePiece与256k标记:使用SentencePiece进行分词处理,标记数量为256k。
所以,有很多变化!同样,其中很多都是常见的,例如使用 GPT-3 的学习嵌入向量已经非常过时了,现在几乎没有人这样做。
LLaMa
LLaMa结合了PaLM和Chinchilla两个模型的最佳特点,并做出了一些改进:
预归一化(Pre-normalize):在每个Transformer子层之前对输入进行预归一化。 使用RMSNorm:使用RMSNorm代替LayerNorm,与Gopher模型中一样。 SwiGLU激活函数:使用了PaLM中的SwiGLU激活函数,但是维度从PaLM的值改为了新的值。 旋转位置嵌入(Rotary positional embeddings):采用RoPE(相对位置编码)替代了PaLM中的绝对位置嵌入法。 使用AdamW:与Chinchilla模型一样,使用AdamW优化算法。
在计算方面的变化有:
有趣的是,他们似乎在所有地方都使用了float32。但它没有像Chinchilla那样使用较低精度的计算。 作者唯一的抱怨是他希望他们能够将模型训练更长时间,因为学习曲线与收敛相差甚远!
GPT-4
GPT-4是一种基于Transformer的模型,经过预训练来预测文档中的下一个标记(token),其中使用了公开可用的数据(如互联网数据)和从第三方提供商获得的数据进行训练。
接着,该模型使用强化学习从人类反馈中进行了优化。考虑到竞争环境和GPT-4等大规模模型的安全性影响,该技术报告没有提供有关架构(包括模型大小)、硬件、训练计算资源、数据集构建、训练方法等方面的进一步细节信息。
希望 OpenAI 未来发布一些有关其模型的信息。
总结
我们简单总结下GPT模型的发展与变化:
GPT-1:第一个使用生成式预训练的模型,具有12层的解码器结构。 GPT-2:超过10亿个参数的模型,与GPT-1相似但规模更大。 GPT-3:引入稀疏注意力机制,提高处理长文本和计算效率。 Megatron-Turing NLG:引入张量并行模型架构,提高训练效率。 PaLM:迄今为止训练的最大的密集语言模型,具有540B个参数。 LLaMa:结合了前几个模型的优点,并进行了一些改进。
|