登录    注册      
    
  

News Message

LLMs模型(GPTs、LaMDA、GLM/ChatGLM、PaLM/Flan-PaLM、BLOOM、LLaMA、Alpaca)



LLMs模型(GPTs、LaMDA、GLM/ChatGLM、PaLM/Flan-PaLM、BLOOM、LLaMA、Alpaca)





下部分详见:

基础模型:

在这里插入图片描述

下表是在上述基础模型上进行指令微调的大模型:

在这里插入图片描述
在这里插入图片描述


一、 GPT系列

模型发布日期
GPT2018-11-14
GPT-22019-11-27
GPT-32020-6-11
InstructGPT2022-3-4
ChatGPT2022-11-30
GPT-42023-3-14
ChatGPT Plugin2023-5-12

1.1 GPTs(OpenAI,2018——2020)


GPT是自回归模型(auto-regression),使用 Transformer 的 Decoder 模块构建。原始的Transformer Decoder 比Encoder 多了一个encoder-decoder-attention层(第二个自注意力层,k和v来自encoder层最后的输出memory),使得它可以关注来自 Encoder 的信息。在GPT中,使用的decoder去掉了这一层。

自回归:生每个 token 之后,将这个 token 添加到输入的序列中,形成一个新序列。然后这个新序列成为模型在下一个时间步的输入。

Mask 操作是在 Self-Attention 进行 Softmax 之前进行的,具体做法是将要 Mask 的位置用一个无穷小的数替换 -inf,然后再 Softmax,如下图所示。

在这里插入图片描述
在这里插入图片描述

下图是 GPT 整体模型图,其中包含了 12 个 Decoder:

GPT提出来“生成式预训练(无监督)+判别式任务精调(有监督)”的范式来处理NLP任务。

  • 生成式预训练:在大规模无监督语料上进行预训练一个高容量的语言模型,学习丰富的上下文信息,掌握文本的通用语义。
  • 判别式任务精调:在通用语义基础上根据下游任务进行领域适配。具体的在预训练好的模型上增加一个与任务相关的神经网络层,比如一个全连接层,预测最终的标签。并在该任务的监督数据上进行微调训练(微调的一种理解:学习率较小,训练epoch数量较少,对模型整体参数进行轻微调整)

GPT-2(2019-2)GPT-3(2020-6)的区别: - GPT-3使用了更深的网络层数和更宽的Transformer网络结构,模型更大,参数更多,表达能力和语言理解能力更强; - GPT-3在预训练阶段使用了更大规模的数据集,并采用了更多样化的预训练任务 - GPT-3的微调阶段采用了zero-shot学习和few-shot的方法,使得GPT-3具备更强的泛化能力和迁移学习能力。

1.2 InstructGPT(2022-3)

《李沐论文精度系列之九:InstructGPT》、bilibili视频《InstructGPT 论文精读》

1.2.1 算法

语言模型扩大并不能代表它们会更好地按照用户的意图进行工作,大语言模型很可能会生成一些不真实的、有害的或者是没有帮助的答案。换句话说,这些模型和用户的意图并不一致(not aligned with their users)。由此OpenAI提出了“align”的概念,即希望模型的输出与人类意图“对齐”,符合人类真实偏好。

InstructGPT提出了语言模型的三个目标: - helpful——帮助用户解决问题 - honest——不能伪造信息或误导用户 - harmless——不会令人反感,也不会对他人或社会有害

InstructGPT使用来自人类反馈的强化学习(利用人类的偏好作为奖励信号,让模型仿照人来生成答案),对GPT-3进行微调,实现以上目标。具体实现步骤如下:

在这里插入图片描述

1. 收集示范数据,进行有监督微调SFT。 - 标注数据:根据prompts(提示,这里就是写的各种各样的问题),人类会撰写一系列demonstrations(演示)作为模型的期望输出(主要是英文); - 模型微调:将prompts和人类标注的答案拼在一起,作为人工标注的数据集,然后使用这部分数据集对预训练的GPT-3进行监督微调,得到第一个模型SFT(supervised fine-tuning,有监督微调) - 因为问题和答案是拼在一起的,所以在 GPT 眼中都是一样的,都是给定一段话然后预测下一个词,所以在微调上跟之前的在别的地方做微调或者是做预训练没有任何区别。 2. 收集比较数据,训练奖励模型RM。 - 生成式标注是很贵的一件事,所以第二步是进行排序式/判别式标注。用上一步得到的SFT模型生成各种问题的答案,标注者(labelers)会对这些输出进行比较和排序(由好到坏,比如下图D>C>A=B)。 - 基于这个数据集,用强化学习训练一个RM(reward model)。训练好了之后这个RM模型就可以对生成的答案进行打分,且打出的分数能够满足人工排序的关系。 3. 使用强化学习的机制,优化SFT模型,得到最终的RL模型(InstructGPT)。 将SFT模型的输出输入RM进行打分,通过强化学习来优化SFT模型的参数,详见本文4.3节。

步骤2和步骤3可以连续迭代。第二步可以使得在同样的标注成本下得到更多的数据,模型的性能会更好一些,最终得到的模型就是InstructGPT。

1.2.2 损失函数

语言模型通过预测下一个词的方式进行训练,其目标函数是最大化给定语言序列的条件概率,而不是“有帮助且安全地遵循用户的指示”,所以当前的语言模型训练的目标函数有问题。这部分在第三步RL模型(InstructGPT)中体现。简单来说就是新的损失函数包括以下几个部分:

在这里插入图片描述


  • 在标注数据集上训练,期望RL模型的输出在RM模型里打分尽可能的高
  • $\beta log(\pi_{\phi }^{RL}(y|x)/\pi^{SFT} (y|x) )$:正则项。 随着模型的更新,RL产生的输出$y$和原始的SFT模型输出的$y$会逐渐不一样,所以作者在loss里加入了一个KL散度(评估两个概率分布的差异),希望RLSFT模型的基础上优化一些就行,但是不要偏太远,即相当于加入了一个正则项。
  • $\gamma E_{x}\sim D_{pretrain}[log(\pi_{\phi }^{RL}(x)]$:GPT-3模型原来的的目标函数
    • 如果只使用上述两项进行训练,会导致该模型仅仅对人类的排序结果较好,而在通用NLP任务上,性能可能会大幅下降。文章通过在loss中加入了GPT-3预训练模型的目标函数来规避这一问题。

1.3 ChatGPT(2022.11.30)

ChatGPTInstructGPT在模型结构,训练方式上都完全一致,即都使用了指示学习(Instruction Learning)和人工反馈的强化学习(RLHF,Reinforcement Learning from Human Feedback)来指导模型的训练。区别是InstructGPT是在GPT3上微调,ChatGPT是在GPT3.5上微调的。

1.4 ChatGPT plugin


为了能够更加灵活的扩展 ChatGPT 的现有功能,OpenAI 正式上线了以安全为核心的 ChatGPT plugin,在保障数据安全性的前提下,让 ChatGPT 功能再度提升一整个数量级!plugin(插件)可以允许 ChatGPT 执行以下操作:

  • 检索实时信息: 例如,体育比分、股票价格、最新消息等。
  • 检索知识库信息: 例如,公司文件、个人笔记等。
  • 代表用户执行操作;例如,订机票、订餐等。

ChatGPT plugin,其实就是类似Toolformer技术的应用,使得模型可以连接成百上千个API,这样大语言模型只是一个交互的工具,真正完成任务的还是之前的各种工具。这样不仅准确度可以提升,而且3月24ChatGPT plugin开通联网后,还可以更新自己的知识库,开启了无限可能。

比如用计算器进行计算肯定是可以算对的,而不需要像之前一样进行推理了。

1.5 GPT-4(2023.3.14)

《李沐论文精度系列之十:GPT-4》

GPT-4 是 OpenAI 继 ChatGPT 之后发布的一个大规模的多模态模型,之前的 GPT 系列模型都是只支持纯文本输入输出的语言模型,而 GPT-4 可以接受图像和文本作为输入,并产生文本输出。
GPT-4 仍然是基于 Transformer 的自回归结构的预训练模型。OpenAI 的博客中表示在随意的对话中,GPT-3.5 和 GPT-4 之间的区别可能很微妙,当任务的复杂性达到足够的阈值时,差异就会出现,即 GPT-4 比 GPT-3.5 更可靠、更有创意,并且能够处理更细微的指令。
虽然在许多现实场景中的能力不如人类,但 GPT-4 在各种专业和学术基准测试中表现出人类水平的表现,包括通过模拟律师考试,得分在应试者的前 10% 左右。和 ChatGPT RLHF 的方法类似,alignment(对齐)训练过程可以提高模型事实性和对期望行为遵循度的表现,具有强大的意图理解能力,并且对 GPT-4 的安全性问题做了很大的优化和提升。
GPT-4 的基础模型其实于 2022 年 8 月就已完成训练。OpenAI 对于基础理解和推理能力越来越强的 LLM 采取了更为谨慎的态度,花 6 个月时间重点针对 Alignment、安全性和事实性等问题进行大量测试和补丁。2023 年 3 月 14 日,OpenAI 发布 GPT-4 及相关文章。文章中几乎没有披露任何技术细节。同时当前公开的 GPT-4 API 是限制了 few-shot 能力的版本,并没有将完整能力的基础模型开放给公众(这个版本会维护到6月14号)。

二、 LaMDA系列

2.1 LaMDA(Google 2021.5)


2.1.1 简介

LaMDA 是谷歌在2021年开发者大会上公布的,专用于对话的大语言模型。模型基于Transformer架构,并在具有1.56T单词的公开对话数据和其他网页文档上预训练,最终尺寸从2B到137B。

论文中提出三个指导模型更好训练的指标,并概括了如何在这三个方面取得进展: - 质量: - 合理性/Sensibleness:生成在对话上下文中有意义的响应 - 特异性/Specificity:通过判断系统的响应是否特定于前面的对话上下文来衡量的,而不是适用于大多数上下文的通用回应; - 趣味性/Interestingness,SSI):衡量模型是否产生了富有洞察力、出乎意料或机智的回应,因此更有可能创造更好的对话。 - 安全性: - 根基性,Groundedness :生成的响应中包含的声明能够被参考和与已知来源进行核实的程度。当前这一代语言模型通常会生成看似合理但实际上与已知外部事实相矛盾的陈述。

2.1.2 LaMDA 预训练与微调

在定义了对话模型训练的指导指标之后,LaMDA 讲过预训练与微调两个阶段的训练。 - 预训练:从公共对话数据和其他公共网页文档中收集并创建了一个具有 1.56T 单词的数据集,是用于训练以往对话模型的单词量的近 40 倍 - 微调阶段做两个工作: - LaMDA 生成器:执行混合生成任务,以生成对给定上下文的自然语言响应(模式是预测两个角色来回对话的对话数据集中下一个token) - LaMDA 分类器:预测LaMDA 生成器生成的响应的安全与质量(SSI)分数,安全分数低的候选响应首先被过滤掉,剩下的候选响应根据 SSI 分数重新排名,并选择分数最高的作为最终响应。


在这里插入图片描述


谷歌使用 LaMDA 分类器进一步过滤掉用于生成任务的训练数据,以增加高质量候选响应的密度

2.1.3 事实根基(真实性、可靠性)

人们能够使用工具并参考已建立的知识库来检测事实,但是很多语言模型仅利用内部模型参数来获取知识。谷歌通过与人的对话数据集进行微调,让LaMDA模型能够更好地利用外部知识来提供更可靠的回应。
具体来说,为了提高LaMDA模型原始回应的可靠性,谷歌采集了人与LaMDA之间的对话数据集。这些对话数据集在适当的情况下使用了搜索查询和搜索结果进行注释。谷歌通过对这个数据集进行微调,让LaMDA模型的生成器和分类器能够学习在与用户交互时如何调用外部信息检索系统,以增强回应的可靠性。虽然这项工作仍处于早期阶段,但谷歌已经看到了一些有希望的结果。

2.1.4 实验&结论

谷歌对预训练模型(PT)、微调模型(LaMDA)、人类评估者在多轮双作者对话上的响应进行评估,指标是质量、安全性和根基性,结果如下:

在这里插入图片描述

- 质量:LaMDA 在每个维度和所有模型大小情况下都显著优于预训练模型,合理性、特异性和趣味性等质量度量通常会随模型参数量提升; - 安全性:可以通过微调提升,但是无法仅从模型缩放中得到收益; - 根基性:随着模型大小的增加,根基性也提升,这或许是因为更大的模型具备更大的记住不常见知识的能力

微调使模型可以访问外部知识源并有效地将记住知识的负载转移到外部知识源。微调还可以缩小与人类水平的质量差距,尽管该模型在安全性和根基性方面的性能依然低于人类。

2.2 Bard(Google 2023.3.21)

Bard 是谷歌基于 LaMDA 研制的对标 ChatGPT 的对话语言模型,目前应该只支持英文对话,限美国和英国用户预约访问。

三、GLM

3.1 GLM生态

  • GLM:一种基于Transformer架构进行改进的通用预训练框架,GLM将不同任务的预训练目标统一为自回归填空任务(Autoregressive Blank Infilling),使得模型在自然语言理解和文本生成方面性能都有所改善。
在这里插入图片描述


  • GLM-130B:于2022年8月由清华智谱AI开源放出。该大语言模型基于之前提出的GLM(General Language Model),在Norm处理、激活函数、Mask机制等方面进行了调整,目的是训练出开源开放的高精度千亿中英双语稠密模型,能够让更多研发者用上千亿模型。
  • ChatGLM: 基于GLM-130B,引入面向对话的用户反馈,进行指令微调后得到的对话机器人。ChatGLM解决了大基座模型在复杂问题、动态知识、人类对齐场景的不足。ChatGLM于2023年3月开启申请内测,目前暂停了公开申请。
  • ChatGLM-6B:于2023年3月开源。在进行ChatGLM千亿模型内测的同时,清华团队也开放出了同样技术小参数量的版本,方便研发者们进行学习和开发(非商用)。


在这里插入图片描述


3.2 GLM(清华等,2022.3.17)


3.2.1 背景

NLP任务分为NLU(文本分类、分词、句法分析、信息抽取等)、有条件生成任务(seq-seq,如翻译任务、QA)、无条件生成任务(用预训练模型直接生成内容)三大类。基础的预训练模型也分为三种: | 预训练模式 | 代表模型 | 说明 | |------------|----------|------------------------------------------------------------------------------------------------| | 自编码 | BERT | 双向的transformer作为编码器,在语言理解相关的文本表示效果很好。缺点是不能直接用于文本生成。 | | 自回归 | GPT | 从左往右学习的模型,在长文本的生成能力很强。缺点是单向的注意力机制在NLU任务中,不能完全捕捉token的内在联系。| | 编码解码 | T5 | 编码器使用双向注意力,解码器使用单向注意力,并且有交叉注意力连接两者。在有条件生成任务中表现良好(文本摘要,回答生成)。 |

所以用一张表格简单总结就是:

在这里插入图片描述


注:✅表示擅长,x表示无法直接应用,— 表示可以做

目前这些训练前框架都不足以在所有NLP中具有竞争力任务。以往的工作(T5)试图通过多任务学习统一不同的框架。然而,由于自编码和自回归的目标性质不同,简单的统一不能完全继承这两个框架的优点。

3.2.2 主要贡献

  • 提出了一种基于自回归空白填充的通用语言模型(GLM)来应对上述三种任务。
  • GLM通过添加2D位置编码并允许任意顺序预测跨度来改进空白填充预训练,从而在NLU任务上比BERT和T5获得了性能提升。
  • 通过变化空白数量和长度,可以针对不同类型的任务对GLM进行预训练。
  • 在跨NLU、有条件和无条件生成的广泛任务范围内,GLM在相同的模型大小和数据情况下优于BERT、T5和GPT,并且使用BERTLarge的1.25×参数的单个预训练模型实现了最佳性能,展示了其对不同下游任务的通用性。

3.2.3 预训练


在这里插入图片描述


GLM 将 NLU 任务制定为包含任务描述的完形填空问题,并通过自回归生成来回答

3.2.3.1 模型输入

GLM通过优化自回归空白填充目标进行训练。给定输入文本x =[x 1 ,··· ,x n ],对多个文本跨度spans {s 1 ,··· ,s m } 进行采样,然后将这些span进行mask(用[mask]标记替换),形成损坏的文本xcorrupt。span的长度服从泊松分布(λ=3),与BART一样,重复采样,直到15%的token被mask(根据经验,15% 的比率对于下游 NLU 任务的良好性能至关重要)。

下面举例说明。对于input=[x1,x2,x3,x4,x5,x6],假设mask 掉 [x3] 和 [x5,x6]。然后输入x包括两部分: - part A:损坏的文本xcorrupt,例子中是[x1,x2,mask,x4,mask] - part B :mask掉的span部分,例子中是 [x5,x6],[x3]。为了完全捕捉不同跨度之间的相互依赖关系,会随机排列跨度的顺序,类似于置换语言模型XLNet

3.2.3.2 预训练目标&Mask矩阵

预训练的目标是:通过自回归方式从损坏的文本xcorrupt中预测跨度span中被mask的部分,即从part A预测part B。下图显示了mask矩阵,可以看出: - Part A部分采用双向注意力,可以关注它们自己(蓝框)前后的信息,但不能关注 B; - Part B采用单向注意力,可以关注 A 部分及 B 部分中的前文。

为了启用自回归生成,每个span都自动填充了特殊标记 [S] 和 [E] ,表示预测从start到end跨度的部分。通过这种方式,GLM在统一模型中自动学习双向编码器(Part A)和单向解码器(Part B)

在这里插入图片描述


[M] := [MASK], [S] := [START], [E] := [END]

3.2.3.3 二维位置编码


在这里插入图片描述


如上图所示,Part A与PartB拼接成一个sequence,每个token都用两个位置编码 ids( two positional ids): - positional id1:表示损坏的文本xcorrupt中的位置,PartB以span被mask的位置表示 - positional id2:表示跨度内的位置,所以Part A统一以0表示。PartB中的token,以从开始到此位置的span长度表示。

最终两个位置编码都会加入到输入token 的embedding向量中。

3.2.3.4 多任务预训练

前面的介绍中,span都比较短,适用于NLU任务。然而,我们希望模型能同时处理NLU任务和文本生成任务是,所以我们设置了第二个预训练任务——长文本生成,分两个级别:

  • 文档级别(gMASK)。我们随机抽样一个跨度,其长度从原始长度的50%到100%的均匀分布中抽样。该目标旨在进行长文本生成。
  • 句子级别(sMASK)。我们限制掩蔽跨度必须是完整的句子。我们随机抽样多个跨度(句子)以覆盖15%的原始令牌。此目标旨在进行序列到序列任务,其预测通常为完整的句子或段落。

这两个级别的生成任务和NLU任务相同,唯一的区别在于跨度数量和跨度长度。在实际使用中,可以根据不同的任务需要,设置不同mask方式的比例。例如,如果希望模型有更强的生成能力,可以把文档级别的gMASK的比例设置地比较高。在GLM-130B中,采用了70%文档级别的gMASK和30%单词级别的MASK。

3.2.4 模型结构


GLM 使用单个Transformer ,并对架构进行了多项修改: 1. 采用Sandwich-LN。LayerNorm会影响训练的稳定性,目前认为认为稳定性上: Sandwich-LN > Pre-LN > Post-LN(原始的BERT) 2. 使用单个线性层来进行输出Token预测 3. ReLU激活函数替换为GELU


在这里插入图片描述


3.2.5 下游任务微调


在这里插入图片描述

对于下游NLU任务,我们通常会在模型之上添加线性分类器,以前层的输出作为输入来预测正确的标签,但这会导致预训练和微调之间的不一致。 GLM微调时,分类任务转换为完形填空,类似PET。如上图示例,原本的“positive”和“negative”二分类任务,转换为预测[mask]的任务(映射到单词“good”和“bad”)。

其实这部分就是Prompt Tuning,有三种主要算法:PET、P-Tuning和EFL。有兴趣的可以参考《PaddleNLP系列课程一:Taskflow、小样本学习、FasterTransformer》第二章。

3.2.6 实验结果

  1. SuperGLUE:NLU任务上,GLM在大多数具有基础架构或大型架构的任务上始终优于BERT。平均而言,GLMBase 得分比BERT Base 高 4.6%,GLMLarge 得分比BERT Large 高 5.0%。
在这里插入图片描述


  1. Sequence-to-Sequence:GLM RoBERTa可以实现匹配Seq2Seq BART模型的性能,并且优于T5和UniLMv2


在这里插入图片描述

3. 有条件生成和无条件生成

在这里插入图片描述

其它结果请看论文。

3.2.7 结论

GLM是一种用于自然语言理解和生成的通用预训练框架。论文展示了NLU任务可以被形式化为条件生成任务,因此可以由自回归模型解决。GLM将不同任务的预训练目标统一为自回归空白填充,具有混合的注意力掩码和新颖的二维位置编码。我们的实验证明GLM在NLU任务中优于先前的方法,并且可以有效地共享参数以用于不同的任务。

3.3 GLM-130B


3.3.1 背景&模型优势

GPT-3是一款强大的语言模型,但由于未公开,存在技术瓶颈。目前的语言模型规模庞大,训练需要数百张A100以上的显卡,非常困难。GLM-130B是2022年8月由清华AI向研究界和工业界开放的拥有1300亿参数的中英双语稠密模型。本文介绍了GLM-130B的训练过程,包括设计选择、高效稳定的训练策略和工程努力。
在广泛的英语测试中,GLM-130B的性能明显优于GPT-175B,但在OPT-175B和BLOOM-176B上并未观察到性能优势。在相关测试中,GLM-130B也始终明显优于最大的中文模型ERNIE TITAN 3.0 260B。最后,利用GLM-130B独特的缩放特性,实现了INT4量化使其成为100B缩放模型中的先驱,可进行快速推理(小型多任务模型成为一种趋势)。

  • 可复现性: 所有结果(超过 30 个任务)均可通过我们的开源代码和模型参数复现。
  • 跨平台: 支持在国产的海光 DCU、华为昇腾 910 和申威处理器及美国的英伟达芯片上进行训练与推理。


2022年11月,在斯坦福大学大模型中心对全球30个主流大模型的评测报告中,GLM-130B 在准确性和恶意性指标上与 GPT-3 175B (davinci) 接近或持平,鲁棒性和校准误差在所有千亿规模的基座大模型(作为公平对比,只对比无指令提示微调模型)中表现不错(下图)。


在这里插入图片描述


  
  


在这里插入图片描述


3.3.2 Deep Layer Norm

DeepNorm:Deepnet: Scaling transformers to 1,000 layers
训练不稳定性是训练LLMs的一个主要挑战,适当选择LNs有助于稳定LLM的训练。作者发现GLM的训非常不稳定,于是使用了Deep Layer Norm机制,公式为:
在这里插入图片描述

此外,所有偏置项都被初始化为零。下图显示Deep Layer Norm显著有利于GLM-130B的训练稳定性,比Sandwich-LN更稳定。


在这里插入图片描述


GLM-130B训练不同层次规范的试验。事实证明,DeepNorm是最稳定的一种,因为它具有较小的梯度范数,并且在早期训练中不会出现尖峰

3.3.3 位置编码

位置编码分为绝对位置编码和相对位置编码。一些较新的在大模型中应用较多的位置编码有ALiBiRoPEGLM-130B采用的是后者。GLM-130B团队的观点是虽然RoPE外推性能有限,但是并不应该把长文本的处理问题完全依赖于位置编码的外推,而是需要什么样的长度就在什么样的context length上做训练。

在这里插入图片描述


3.3.4 大模型训练系列技术(混合精度训练、激活函数重演、数据并行、流水线气泡)

这部分内容请参考官方视频《从GLM-130B到ChatGLM:大模型预训练与微调》视频笔记

3.4 ChatGLM(2023.3.22)

官网(内测申请)

由于GLM-130B的动态知识欠缺、知识陈旧、缺乏可解释性,同时缺少高效“Prompt工程”,在对话场景中使用时很难尽人意。所以清华大学参考了 ChatGPT 的设计思路,在 GLM-130B 中注入了代码预训练,通过有监督微调(Supervised Fine-Tuning)、反馈自助(Feedback Bootstrap)、人类反馈强化学习(Reinforcement Learning from Human Feedback) 等技术实现人类意图对齐。

ChatGLM千亿参数版本由于还处于内测,没有太多的公开信息,报告中给出了目前的一些成绩对比:

  • MMLU评测基准上,较GLM-130B有了有更大提升,超过GPT3 davinci版本30%,达到了ChatGPT(GPT-3.5-turbo)的81%
  • 在非数学知识场景达到了ChatGPT(GPT-3.5-turbo)的95%
  • 在非数学推理场景达到了ChatGPT(GPT-3.5-turbo)的96%
  • 在高考、SAT、LSAT等考试的综合成绩上,达到了ChatGPT(GPT-3.5-turbo)的90%。

3.5 ChatGLM-6B


3.5.1 简介

由于ChatGLM千亿参数版本暂未公开,为了与社区一起更好地推动大模型技术的发展,清华团队开源了62亿参数版本的ChatGLM-6B。结合模型量化技术,用户可以在消费级的显卡上进行本地部署。

该版本具有以下特点:

  • 充分的中英双语预训练: ChatGLM-6B 在 1:1 比例的中英语料上训练了 1T 的 token 量,兼具双语能力。
  • 优化的模型架构和大小: 吸取 GLM-130B 训练经验,修正了二维 RoPE 位置编码实现,使用传统FFN结构。6B(62亿)的参数大小,也使得研究者和个人开发者自己微调和部署 ChatGLM-6B 成为可能。
  • 较低的部署门槛: FP16 半精度下,ChatGLM-6B 需要至少 13GB 的显存进行推理,结合模型量化技术,这一需求可以进一步降低到 10GB(INT8) 和 6GB(INT4), 使得 ChatGLM-6B 可以部署在消费级显卡上。
  • 更长的序列长度: 相比 GLM-10B(序列长度1024),ChatGLM-6B 序列长度达 2048,支持更长对话和应用。
  • 人类意图对齐训练: 使用了监督微调(Supervised Fine-Tuning)、反馈自助(Feedback Bootstrap)、人类反馈强化学习(Reinforcement Learning from Human Feedback) 等方式,使模型初具理解人类指令意图的能力。输出格式为 markdown,方便展示。

3.5.2 局限性

  • 模型容量较小: 6B 的小容量,决定了其相对较弱的模型记忆和语言能力。在面对许多事实性知识任务时,ChatGLM-6B 可能会生成不正确的信息;她也不擅长逻辑类问题(如数学、编程)的解答。
  • 偏见:ChatGLM-6B 只是一个初步与人类意图对齐的语言模型,可能会生成有害、有偏见的内容。
  • 多轮对话能力较弱:ChatGLM-6B 的上下文理解能力还不够充分,在面对长答案生成,以及多轮对话的场景时,可能会出现上下文丢失和理解错误的情况。
  • 英文能力不足:训练时使用的指示大部分都是中文的,只有一小部分指示是英文的。因此在使用英文指示时,回复的质量可能不如中文指示的回复,甚至与中文指示下的回复矛盾。
  • 易被误导:ChatGLM-6B 的“自我认知”可能存在问题,很容易被误导并产生错误的言论。例如当前版本模型在被误导的情况下,会在自我认知上发生偏差。即使该模型经过了1万亿标识符(token)左右的双语预训练,并且进行了指令微调和人类反馈强化学习(RLHF),但是因为模型容量较小,所以在某些指示下可能会产生有误导性的内容。

3.5.3 环境配置

如何评价智谱 AI 发布的 ChatGLM,以及开源支持单卡推理的 ChatGLM-6B 模型?


在这里插入图片描述

ChatGLM-6B所有模型文件,总共13G左右,显存不够时可以使用量化模型的方式加载,4-bit量化后可以加载到显存,占用5.2G显存左右,但是量化加载需要13G的内存,就是无论无何这13G的模型文件要么直接加载到显存,要么加载到内存量化后再加载到显存

下面官方直接提供了量化后的模型文件,也就避免了上述处理13G模型文件的操作。 - 4-bit量化后的模型文件下载:GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b-int4 - 进一步提对Embedding量化后的模型,模型参数仅占用4.3 GB显存:GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b-int4-qe

3.5.4 相关开源项目

  • Chinese-LangChain:中文langchain项目,基于ChatGLM-6b+langchain实现本地化知识库检索与智能答案生成,增加web search功能、知识库选择功能和支持知识增量更新
  • langchain-ChatGLM:基于 langchain 的 ChatGLM 应用,实现基于可扩展知识库的问答
  • ChatGLM-6B-Engineering:基于 ChatGLM-6B 后期调教,网络爬虫及 Stable Diffusion 实现的网络搜索及图片生成
  • ChatGLM-OpenAI-API:将 ChatGLM-6B 封装为 OpenAI API 风格,并通过 ngrok/cloudflare 对外提供服务,从而将 ChatGLM 快速集成到 OpenAI 的各种生态中。

对 ChatGLM-6B 进行微调的开源项目: - InstructGLM:基于ChatGLM-6B进行指令学习,汇总开源中英文指令数据,基于Lora进行指令数据微调,开放了Alpaca、Belle微调后的Lora权重,修复web_demo重复问题 - ChatGLM-Finetuning:一种平价的chatgpt实现方案,基于清华的ChatGLM-6B+ LoRA 进行finetune。

  • ChatGLM-Efficient-Tuning:基于ChatGLM-6B模型进行定制化微调,汇总10余种指令数据集和3种微调方案,实现了4/8比特量化和模型权重融合,提供微调模型快速部署方法。
  • ChatGLM-Tuning:基于 LoRA 对 ChatGLM-6B 进行微调。

四、 PaLM(Google Research 2022.4 )


4.1 简介

PaLM(Pathways Language Model )是谷歌2022年提出的 540B 参数规模的大语言模型,论文主要贡献有:

  • PaLM 使用 谷歌提出的Pathways系统 在 6144 TPU v4 芯片上进行训练(Pathways 是一种新的 ML 系统,可以跨多个 TPU Pod 进行高效训练,详情可参考李沐的Pathways论文精读
  • 它通过在数百种语言理解和生成基准上实现小样本学习sota结果,证明了scaling的良好效果。

4.2 模型结构

PaLM 使用Transformer decoder架构,但是做了一些修改: - 采用SwiGLU激活函数,提供更好的性能和梯度流动,提高模型效果 - 提出Parallel Layers,并行处理多个输入,训练速度提高约 15% - Multi-Query Attention共享key/query的映射,自回归时解码更快 - 位置嵌入使用RoPE embeddings,在长文本上性能更好 - 采用Shared Input-Output Embeddings,输入、输出embedding矩阵是共享 - 不使用偏置项:在dense kernel或layer norm中都没有使用偏差,这种操作提高了大模型的训练稳定性

4.2.1 SwiGLU层


在论文《GLU Variants Improve Transformer》中提到,使用SwiGLU替换transformer中FFN的第一层,得到的FFNSwiGLU,已被证明可以显著提高模型效果,下面进行简单的介绍。

4.2.1.1 FFN

一个Transformer Bolck中主要包含三部分:MultiheadAttention(多头注意力)、FFN(前馈神经网络)和Add&Norm(残差连接和LayerNorm),其中FFN是由两个线性变换层和激活函数组成。

在这里插入图片描述


Transformer Block 所以Transformer中的FFN层可表示为: (,1,2,1,2)=2((1+1))+2=(0,1+1)2+2 - relu的优点:神经元只需要进行加、乘和比较这些简单的计算操作,而且有很好的稀疏性,大约有50%的神经元会处于激活状态 - relu的缺点:输出是非零中心化的,会给后面的计算引入偏置转移的问题,影响梯度下降的效率。 神经元在训练时容易死亡,不恰当的更新会导致参数梯度一直为0,永远无法被激活。

在T5模型中去除了FFN的偏置项,所以T5中的FFN表示为: (,1,2)=(0,1)2

4.2.1.2 swish激活函数及FFN变体

后面的一些工作也使用了其它的激活函数替换ReLU,例如Hendrycks等人就使用了GELU来进行替换,Ramachandran等人使用了Swish来进行替换 :


在这里插入图片描述


其中,GELU(高斯误差线性单元)公式为:(erf 表示误差函数) GELU()=12(1+erf(2)) Swish: Swish()=sigmoid()

Swish具有以下特性: - 平滑性:Swish函数在整个实数域上是连续且可微的,没有突变点或不连续的部分,这有助于提高梯度的稳定性和训练的效果。(比ReLU更平滑)

  • 渐进饱和性:Swish函数在输入为正或负的大值时,会趋向于饱和,即输出值接近于输入值。这有助于抑制大幅度的激活响应,减轻梯度爆炸的问题。
  • 自适应性:Swish函数具有自适应的特性,它的形状和曲线根据输入值的变化而变化。在较大的负值范围内,Swish函数趋向于线性变换;在较大的正值范围内,Swish函数趋向于饱和(Sigmoid函数的特性),保持输入的大部分信息。Swish函数结合了ReLU的线性增长特性,和Sigmoid函数的平滑特性,使得处理复杂的非线性关系时更具表达能力。
  • 较低的计算复杂度:相比于其他激活函数(如ReLU),Swish函数的计算复杂度较低,可以更高效地进行前向传播和反向传播。

4.2.1.3 GLU一般形式及变体

GLU,门控线性单元(Gated Linear Units),是一种神经网络层,其核心思想是通过门控机制来控制激活函数的输出,由线性变换和门控机制组成: - 输入$x$通过线性变换得到两个输出向量,分别称为"门"向量(下式中的$xW + b$)和"中间"向量(下式中的$xV + c$) - 门向量通过一个激活函数(通常是sigmoid函数)进行门控,产生一个介于0和1之间的值,表示在给定位置上的输入是否应该被过滤或保留 - 中间向量与门向量进行Hadamard乘积,从而对输入进行控制和加权。

GLU的一般形式可表示为: (,,,,)=σ(+)(+)

如果将激活函数省略,就可以得到一个双线性变换函数(Bilinear),可表示为: (,,,,)=(+)(+) GLU变体



从GLU的变体中我们不难发现ReGLU的表达式与FFN的表达式是相似的,所以考虑将FFN的第一次线性和激活函数替换为GLU,所以有:

在这里插入图片描述


不难看出,替换操作是FFN原先第一层的$xW_1$替换为GLU的$(xW) \odot xV$,所以对比于原始的FFN来说,多了一项线性变换$xV$。作者为了保持参数数量和计算量不变,将hidden unit减少2/3,即$W,V$的第二维和$W_2$的第一维减少2/3。

4.2.1.4 实验结果

使用T5模型作为baseline,设置编码器和解码器各由12层组成,维度768,注意力层采用 $head=12,d_k = d_v = 64$ ,FFN层及其变体采用3072个神经元,而GLU及其变体则采用2048个神经元,实验结果如下所示:

在这里插入图片描述

在GLUE语言理解基准数据集的任务上进行对比:

在这里插入图片描述


4.2.2 Parallel Layers

在传统的语言模型中,模型的每一层负责特定的任务,每一层都必须等待前一层完成后才能开始处理。Parallel Layers是PaLM的一个关键创新,通过并行层,可以同时处理多个任务,显著提高模型的速度和准确性(并行层可以同时从多个示例中进行学习)。 标准的transformer block中,输出公式可以写成: =+((+(())) 在Parallel Layers中,可以写成:(代码可参考LLM系列之PaLM) =+(())+(())

并行公式使大规模训练速度提高了大约 15%。消融实验显示在 8B 参数量下模型效果下降很小,但在 62B 参数量下没有模型效果下降的现象。

4.2.3 共享键/值的映射

标准的transformer block中,假设有k个注意力头,则计算过程为: - 使用矩阵$W$将Q、K、V映射到k个不同的语义空间中,形状为[k, h]; - 进行Attention计算,得到k个head矩阵。 - 将这k个矩阵串联拼接起来,乘以矩阵$W^o$(保持维度一致)得到多头注意力结果。

故多头注意力模型公式可以写成:

,,)=(1....)=[(1,1...,1)...(1,...,]


在这里插入图片描述

而在PaLM中,每个head的key/value权值共享,即key和value被映射为[1,h],但query仍然被映射为shape[k,h]。论文发现这种操作对模型质量和训练速度没有影响,但在自回归解码时间上有效节省了成本。(标准的多头注意力在自回归解码过程中,键(key)和值(value)张量在不同样本之间不共享,并且每次只解码一个单词,所以在加速器硬件上的效率较低)

4.2.4 RoPE embeddings

RoPE 嵌入在长文本上具有更好的性能 ,具体原理可看苏神文章《Transformer升级之路:2、博采众长的旋转式位置编码》

4.2.5 Shared Input-Output Embeddings

在自然语言处理任务中,输入序列和输出序列都需要经过嵌入层来获取对应的嵌入向量。而在PaLM中,输入序列和输出序列共享相同的嵌入层参数矩阵,即输入序列中的单词通过嵌入层获得其嵌入向量,同时输出序列中的单词也通过相同的嵌入层获得对应的嵌入向量。

这样做的目的是为了让输入和输出之间共享语义信息,表示更加一致和相互关联,使得模型能够更好地理解输入和输出之间的语义关系,并更准确地进行预测和生成。

需要注意的是,共享嵌入层并不意味着输入和输出之间的嵌入是完全相同的,而是共享参数矩阵,通过参数的共享来实现输入和输出之间的信息传递和一致性。

4.3 模型尺度和训练数据

考虑了三种不同的模型尺度:540B、62B 和 8B 参数:

在这里插入图片描述


PaLM 预训练数据集: - 包含 7800 亿个标记的高质量语料库,代表了广泛的自然语言用例。该数据集是经过过滤的网页、书籍、维基百科、新闻文章、源代码和社交媒体对话的混合体。该数据集基于用于训练 LaMDA(Thoppilan 等人,2022 年)和 GLaM(Du 等人,2021 年)的数据集。 - 所有三个模型都只在一个时期的数据上进行训练(所有模型的数据清洗方式都相同)。 - 除了自然语言数据,预训练数据集还包含 196GB 代码,从 GitHub 上的开源存储库获取,包括 Java、HTML、Javascript、Python、PHP、C#、XML、C++ 和 C。


在这里插入图片描述


4.4 训练硬件资源


在这里插入图片描述

总体来说,该程序包含: - 组件 A:用于 pod 内前向+反向计算(包括 pod 内梯度减少) - 组件 B:用于跨 pod 梯度传输的传输子图,以及用于优化器更新的(包括本地和远程梯度的求和)

Pathways 程序在每个 pod 上执行组件 A,然后将输出梯度传输到另一个 pod,最后在每个 pod 上执行组件 B。因此,它掩盖了延迟,还分摊了管理数据传输的成本,PaLM 代表了 LLM 训练效率向前迈出的重要一步。(PaLM的硬件FLOPs利用率为57.8%,模型FLOPs利用率见下表)

在这里插入图片描述


FLOPS表示每秒钟可以执行的浮点运算次数,Model FLOPS utilization(模型FLOPS利用率)是指在机器学习模型中使用的浮点运算数(FLOPS)的有效利用程度,表示实际执行的浮点运算与模型的理论计算能力之间的关系。一个高的Model FLOPS utilization意味着模型能够有效地利用计算资源,并将其转化为有意义的计算任务。这意味着模型的计算效率较高,能够更快地完成训练或推断任务。

4.5 实验

PaLM 540B 在所有基准测试中都优于类似尺寸的模型(Megatron-Turing NLG 530B)。这表明预训练数据集、训练策略和训练期间观察到的标记数量在实现这些结果方面也起着重要作用。


在这里插入图片描述
在这里插入图片描述


PaLM-Coder 540B 的性能进一步提高,在 HumanEval 上达到 88.4% pass@100,在 MBPP 上达到 80.8% pass@80。

在这里插入图片描述


下部分详见:

基础模型:

在这里插入图片描述

下表是在上述基础模型上进行指令微调的大模型:

在这里插入图片描述
在这里插入图片描述


一、 GPT系列

模型发布日期
GPT2018-11-14
GPT-22019-11-27
GPT-32020-6-11
InstructGPT2022-3-4
ChatGPT2022-11-30
GPT-42023-3-14
ChatGPT Plugin2023-5-12

1.1 GPTs(OpenAI,2018——2020)


GPT是自回归模型(auto-regression),使用 Transformer 的 Decoder 模块构建。原始的Transformer Decoder 比Encoder 多了一个encoder-decoder-attention层(第二个自注意力层,k和v来自encoder层最后的输出memory),使得它可以关注来自 Encoder 的信息。在GPT中,使用的decoder去掉了这一层。

自回归:生每个 token 之后,将这个 token 添加到输入的序列中,形成一个新序列。然后这个新序列成为模型在下一个时间步的输入。

Mask 操作是在 Self-Attention 进行 Softmax 之前进行的,具体做法是将要 Mask 的位置用一个无穷小的数替换 -inf,然后再 Softmax,如下图所示。

在这里插入图片描述
在这里插入图片描述

下图是 GPT 整体模型图,其中包含了 12 个 Decoder:

GPT提出来“生成式预训练(无监督)+判别式任务精调(有监督)”的范式来处理NLP任务。

  • 生成式预训练:在大规模无监督语料上进行预训练一个高容量的语言模型,学习丰富的上下文信息,掌握文本的通用语义。
  • 判别式任务精调:在通用语义基础上根据下游任务进行领域适配。具体的在预训练好的模型上增加一个与任务相关的神经网络层,比如一个全连接层,预测最终的标签。并在该任务的监督数据上进行微调训练(微调的一种理解:学习率较小,训练epoch数量较少,对模型整体参数进行轻微调整)

GPT-2(2019-2)GPT-3(2020-6)的区别: - GPT-3使用了更深的网络层数和更宽的Transformer网络结构,模型更大,参数更多,表达能力和语言理解能力更强; - GPT-3在预训练阶段使用了更大规模的数据集,并采用了更多样化的预训练任务 - GPT-3的微调阶段采用了zero-shot学习和few-shot的方法,使得GPT-3具备更强的泛化能力和迁移学习能力。

1.2 InstructGPT(2022-3)

《李沐论文精度系列之九:InstructGPT》、bilibili视频《InstructGPT 论文精读》

1.2.1 算法

语言模型扩大并不能代表它们会更好地按照用户的意图进行工作,大语言模型很可能会生成一些不真实的、有害的或者是没有帮助的答案。换句话说,这些模型和用户的意图并不一致(not aligned with their users)。由此OpenAI提出了“align”的概念,即希望模型的输出与人类意图“对齐”,符合人类真实偏好。

InstructGPT提出了语言模型的三个目标: - helpful——帮助用户解决问题 - honest——不能伪造信息或误导用户 - harmless——不会令人反感,也不会对他人或社会有害

InstructGPT使用来自人类反馈的强化学习(利用人类的偏好作为奖励信号,让模型仿照人来生成答案),对GPT-3进行微调,实现以上目标。具体实现步骤如下:

在这里插入图片描述

1. 收集示范数据,进行有监督微调SFT。 - 标注数据:根据prompts(提示,这里就是写的各种各样的问题),人类会撰写一系列demonstrations(演示)作为模型的期望输出(主要是英文); - 模型微调:将prompts和人类标注的答案拼在一起,作为人工标注的数据集,然后使用这部分数据集对预训练的GPT-3进行监督微调,得到第一个模型SFT(supervised fine-tuning,有监督微调) - 因为问题和答案是拼在一起的,所以在 GPT 眼中都是一样的,都是给定一段话然后预测下一个词,所以在微调上跟之前的在别的地方做微调或者是做预训练没有任何区别。 2. 收集比较数据,训练奖励模型RM。 - 生成式标注是很贵的一件事,所以第二步是进行排序式/判别式标注。用上一步得到的SFT模型生成各种问题的答案,标注者(labelers)会对这些输出进行比较和排序(由好到坏,比如下图D>C>A=B)。 - 基于这个数据集,用强化学习训练一个RM(reward model)。训练好了之后这个RM模型就可以对生成的答案进行打分,且打出的分数能够满足人工排序的关系。 3. 使用强化学习的机制,优化SFT模型,得到最终的RL模型(InstructGPT)。 将SFT模型的输出输入RM进行打分,通过强化学习来优化SFT模型的参数,详见本文4.3节。

步骤2和步骤3可以连续迭代。第二步可以使得在同样的标注成本下得到更多的数据,模型的性能会更好一些,最终得到的模型就是InstructGPT。

1.2.2 损失函数

语言模型通过预测下一个词的方式进行训练,其目标函数是最大化给定语言序列的条件概率,而不是“有帮助且安全地遵循用户的指示”,所以当前的语言模型训练的目标函数有问题。这部分在第三步RL模型(InstructGPT)中体现。简单来说就是新的损失函数包括以下几个部分:

在这里插入图片描述


  • 在标注数据集上训练,期望RL模型的输出在RM模型里打分尽可能的高
  • $\beta log(\pi_{\phi }^{RL}(y|x)/\pi^{SFT} (y|x) )$:正则项。 随着模型的更新,RL产生的输出$y$和原始的SFT模型输出的$y$会逐渐不一样,所以作者在loss里加入了一个KL散度(评估两个概率分布的差异),希望RLSFT模型的基础上优化一些就行,但是不要偏太远,即相当于加入了一个正则项。
  • $\gamma E_{x}\sim D_{pretrain}[log(\pi_{\phi }^{RL}(x)]$:GPT-3模型原来的的目标函数
    • 如果只使用上述两项进行训练,会导致该模型仅仅对人类的排序结果较好,而在通用NLP任务上,性能可能会大幅下降。文章通过在loss中加入了GPT-3预训练模型的目标函数来规避这一问题。

1.3 ChatGPT(2022.11.30)

ChatGPTInstructGPT在模型结构,训练方式上都完全一致,即都使用了指示学习(Instruction Learning)和人工反馈的强化学习(RLHF,Reinforcement Learning from Human Feedback)来指导模型的训练。区别是InstructGPT是在GPT3上微调,ChatGPT是在GPT3.5上微调的。

1.4 ChatGPT plugin


为了能够更加灵活的扩展 ChatGPT 的现有功能,OpenAI 正式上线了以安全为核心的 ChatGPT plugin,在保障数据安全性的前提下,让 ChatGPT 功能再度提升一整个数量级!plugin(插件)可以允许 ChatGPT 执行以下操作:

  • 检索实时信息: 例如,体育比分、股票价格、最新消息等。
  • 检索知识库信息: 例如,公司文件、个人笔记等。
  • 代表用户执行操作;例如,订机票、订餐等。

ChatGPT plugin,其实就是类似Toolformer技术的应用,使得模型可以连接成百上千个API,这样大语言模型只是一个交互的工具,真正完成任务的还是之前的各种工具。这样不仅准确度可以提升,而且3月24ChatGPT plugin开通联网后,还可以更新自己的知识库,开启了无限可能。

比如用计算器进行计算肯定是可以算对的,而不需要像之前一样进行推理了。

1.5 GPT-4(2023.3.14)

《李沐论文精度系列之十:GPT-4》

GPT-4 是 OpenAI 继 ChatGPT 之后发布的一个大规模的多模态模型,之前的 GPT 系列模型都是只支持纯文本输入输出的语言模型,而 GPT-4 可以接受图像和文本作为输入,并产生文本输出。
GPT-4 仍然是基于 Transformer 的自回归结构的预训练模型。OpenAI 的博客中表示在随意的对话中,GPT-3.5 和 GPT-4 之间的区别可能很微妙,当任务的复杂性达到足够的阈值时,差异就会出现,即 GPT-4 比 GPT-3.5 更可靠、更有创意,并且能够处理更细微的指令。
虽然在许多现实场景中的能力不如人类,但 GPT-4 在各种专业和学术基准测试中表现出人类水平的表现,包括通过模拟律师考试,得分在应试者的前 10% 左右。和 ChatGPT RLHF 的方法类似,alignment(对齐)训练过程可以提高模型事实性和对期望行为遵循度的表现,具有强大的意图理解能力,并且对 GPT-4 的安全性问题做了很大的优化和提升。
GPT-4 的基础模型其实于 2022 年 8 月就已完成训练。OpenAI 对于基础理解和推理能力越来越强的 LLM 采取了更为谨慎的态度,花 6 个月时间重点针对 Alignment、安全性和事实性等问题进行大量测试和补丁。2023 年 3 月 14 日,OpenAI 发布 GPT-4 及相关文章。文章中几乎没有披露任何技术细节。同时当前公开的 GPT-4 API 是限制了 few-shot 能力的版本,并没有将完整能力的基础模型开放给公众(这个版本会维护到6月14号)。

二、 LaMDA系列

2.1 LaMDA(Google 2021.5)


2.1.1 简介

LaMDA 是谷歌在2021年开发者大会上公布的,专用于对话的大语言模型。模型基于Transformer架构,并在具有1.56T单词的公开对话数据和其他网页文档上预训练,最终尺寸从2B到137B。

论文中提出三个指导模型更好训练的指标,并概括了如何在这三个方面取得进展: - 质量: - 合理性/Sensibleness:生成在对话上下文中有意义的响应 - 特异性/Specificity:通过判断系统的响应是否特定于前面的对话上下文来衡量的,而不是适用于大多数上下文的通用回应; - 趣味性/Interestingness,SSI):衡量模型是否产生了富有洞察力、出乎意料或机智的回应,因此更有可能创造更好的对话。 - 安全性: - 根基性,Groundedness :生成的响应中包含的声明能够被参考和与已知来源进行核实的程度。当前这一代语言模型通常会生成看似合理但实际上与已知外部事实相矛盾的陈述。

2.1.2 LaMDA 预训练与微调

在定义了对话模型训练的指导指标之后,LaMDA 讲过预训练与微调两个阶段的训练。 - 预训练:从公共对话数据和其他公共网页文档中收集并创建了一个具有 1.56T 单词的数据集,是用于训练以往对话模型的单词量的近 40 倍 - 微调阶段做两个工作: - LaMDA 生成器:执行混合生成任务,以生成对给定上下文的自然语言响应(模式是预测两个角色来回对话的对话数据集中下一个token) - LaMDA 分类器:预测LaMDA 生成器生成的响应的安全与质量(SSI)分数,安全分数低的候选响应首先被过滤掉,剩下的候选响应根据 SSI 分数重新排名,并选择分数最高的作为最终响应。


在这里插入图片描述


谷歌使用 LaMDA 分类器进一步过滤掉用于生成任务的训练数据,以增加高质量候选响应的密度

2.1.3 事实根基(真实性、可靠性)

人们能够使用工具并参考已建立的知识库来检测事实,但是很多语言模型仅利用内部模型参数来获取知识。谷歌通过与人的对话数据集进行微调,让LaMDA模型能够更好地利用外部知识来提供更可靠的回应。
具体来说,为了提高LaMDA模型原始回应的可靠性,谷歌采集了人与LaMDA之间的对话数据集。这些对话数据集在适当的情况下使用了搜索查询和搜索结果进行注释。谷歌通过对这个数据集进行微调,让LaMDA模型的生成器和分类器能够学习在与用户交互时如何调用外部信息检索系统,以增强回应的可靠性。虽然这项工作仍处于早期阶段,但谷歌已经看到了一些有希望的结果。

2.1.4 实验&结论

谷歌对预训练模型(PT)、微调模型(LaMDA)、人类评估者在多轮双作者对话上的响应进行评估,指标是质量、安全性和根基性,结果如下:

在这里插入图片描述

- 质量:LaMDA 在每个维度和所有模型大小情况下都显著优于预训练模型,合理性、特异性和趣味性等质量度量通常会随模型参数量提升; - 安全性:可以通过微调提升,但是无法仅从模型缩放中得到收益; - 根基性:随着模型大小的增加,根基性也提升,这或许是因为更大的模型具备更大的记住不常见知识的能力

微调使模型可以访问外部知识源并有效地将记住知识的负载转移到外部知识源。微调还可以缩小与人类水平的质量差距,尽管该模型在安全性和根基性方面的性能依然低于人类。

2.2 Bard(Google 2023.3.21)

Bard 是谷歌基于 LaMDA 研制的对标 ChatGPT 的对话语言模型,目前应该只支持英文对话,限美国和英国用户预约访问。

三、GLM

3.1 GLM生态

  • GLM:一种基于Transformer架构进行改进的通用预训练框架,GLM将不同任务的预训练目标统一为自回归填空任务(Autoregressive Blank Infilling),使得模型在自然语言理解和文本生成方面性能都有所改善。
在这里插入图片描述


  • GLM-130B:于2022年8月由清华智谱AI开源放出。该大语言模型基于之前提出的GLM(General Language Model),在Norm处理、激活函数、Mask机制等方面进行了调整,目的是训练出开源开放的高精度千亿中英双语稠密模型,能够让更多研发者用上千亿模型。
  • ChatGLM: 基于GLM-130B,引入面向对话的用户反馈,进行指令微调后得到的对话机器人。ChatGLM解决了大基座模型在复杂问题、动态知识、人类对齐场景的不足。ChatGLM于2023年3月开启申请内测,目前暂停了公开申请。
  • ChatGLM-6B:于2023年3月开源。在进行ChatGLM千亿模型内测的同时,清华团队也开放出了同样技术小参数量的版本,方便研发者们进行学习和开发(非商用)。


在这里插入图片描述


3.2 GLM(清华等,2022.3.17)


3.2.1 背景

NLP任务分为NLU(文本分类、分词、句法分析、信息抽取等)、有条件生成任务(seq-seq,如翻译任务、QA)、无条件生成任务(用预训练模型直接生成内容)三大类。基础的预训练模型也分为三种: | 预训练模式 | 代表模型 | 说明 | |------------|----------|------------------------------------------------------------------------------------------------| | 自编码 | BERT | 双向的transformer作为编码器,在语言理解相关的文本表示效果很好。缺点是不能直接用于文本生成。 | | 自回归 | GPT | 从左往右学习的模型,在长文本的生成能力很强。缺点是单向的注意力机制在NLU任务中,不能完全捕捉token的内在联系。| | 编码解码 | T5 | 编码器使用双向注意力,解码器使用单向注意力,并且有交叉注意力连接两者。在有条件生成任务中表现良好(文本摘要,回答生成)。 |

所以用一张表格简单总结就是:

在这里插入图片描述


注:✅表示擅长,x表示无法直接应用,— 表示可以做

目前这些训练前框架都不足以在所有NLP中具有竞争力任务。以往的工作(T5)试图通过多任务学习统一不同的框架。然而,由于自编码和自回归的目标性质不同,简单的统一不能完全继承这两个框架的优点。

3.2.2 主要贡献

  • 提出了一种基于自回归空白填充的通用语言模型(GLM)来应对上述三种任务。
  • GLM通过添加2D位置编码并允许任意顺序预测跨度来改进空白填充预训练,从而在NLU任务上比BERT和T5获得了性能提升。
  • 通过变化空白数量和长度,可以针对不同类型的任务对GLM进行预训练。
  • 在跨NLU、有条件和无条件生成的广泛任务范围内,GLM在相同的模型大小和数据情况下优于BERT、T5和GPT,并且使用BERTLarge的1.25×参数的单个预训练模型实现了最佳性能,展示了其对不同下游任务的通用性。

3.2.3 预训练


在这里插入图片描述


GLM 将 NLU 任务制定为包含任务描述的完形填空问题,并通过自回归生成来回答

3.2.3.1 模型输入

GLM通过优化自回归空白填充目标进行训练。给定输入文本x =[x 1 ,··· ,x n ],对多个文本跨度spans {s 1 ,··· ,s m } 进行采样,然后将这些span进行mask(用[mask]标记替换),形成损坏的文本xcorrupt。span的长度服从泊松分布(λ=3),与BART一样,重复采样,直到15%的token被mask(根据经验,15% 的比率对于下游 NLU 任务的良好性能至关重要)。

下面举例说明。对于input=[x1,x2,x3,x4,x5,x6],假设mask 掉 [x3] 和 [x5,x6]。然后输入x包括两部分: - part A:损坏的文本xcorrupt,例子中是[x1,x2,mask,x4,mask] - part B :mask掉的span部分,例子中是 [x5,x6],[x3]。为了完全捕捉不同跨度之间的相互依赖关系,会随机排列跨度的顺序,类似于置换语言模型XLNet

3.2.3.2 预训练目标&Mask矩阵

预训练的目标是:通过自回归方式从损坏的文本xcorrupt中预测跨度span中被mask的部分,即从part A预测part B。下图显示了mask矩阵,可以看出: - Part A部分采用双向注意力,可以关注它们自己(蓝框)前后的信息,但不能关注 B; - Part B采用单向注意力,可以关注 A 部分及 B 部分中的前文。

为了启用自回归生成,每个span都自动填充了特殊标记 [S] 和 [E] ,表示预测从start到end跨度的部分。通过这种方式,GLM在统一模型中自动学习双向编码器(Part A)和单向解码器(Part B)

在这里插入图片描述


[M] := [MASK], [S] := [START], [E] := [END]

3.2.3.3 二维位置编码


在这里插入图片描述


如上图所示,Part A与PartB拼接成一个sequence,每个token都用两个位置编码 ids( two positional ids): - positional id1:表示损坏的文本xcorrupt中的位置,PartB以span被mask的位置表示 - positional id2:表示跨度内的位置,所以Part A统一以0表示。PartB中的token,以从开始到此位置的span长度表示。

最终两个位置编码都会加入到输入token 的embedding向量中。

3.2.3.4 多任务预训练

前面的介绍中,span都比较短,适用于NLU任务。然而,我们希望模型能同时处理NLU任务和文本生成任务是,所以我们设置了第二个预训练任务——长文本生成,分两个级别:

  • 文档级别(gMASK)。我们随机抽样一个跨度,其长度从原始长度的50%到100%的均匀分布中抽样。该目标旨在进行长文本生成。
  • 句子级别(sMASK)。我们限制掩蔽跨度必须是完整的句子。我们随机抽样多个跨度(句子)以覆盖15%的原始令牌。此目标旨在进行序列到序列任务,其预测通常为完整的句子或段落。

这两个级别的生成任务和NLU任务相同,唯一的区别在于跨度数量和跨度长度。在实际使用中,可以根据不同的任务需要,设置不同mask方式的比例。例如,如果希望模型有更强的生成能力,可以把文档级别的gMASK的比例设置地比较高。在GLM-130B中,采用了70%文档级别的gMASK和30%单词级别的MASK。

3.2.4 模型结构


GLM 使用单个Transformer ,并对架构进行了多项修改: 1. 采用Sandwich-LN。LayerNorm会影响训练的稳定性,目前认为认为稳定性上: Sandwich-LN > Pre-LN > Post-LN(原始的BERT) 2. 使用单个线性层来进行输出Token预测 3. ReLU激活函数替换为GELU


在这里插入图片描述


3.2.5 下游任务微调


在这里插入图片描述

对于下游NLU任务,我们通常会在模型之上添加线性分类器,以前层的输出作为输入来预测正确的标签,但这会导致预训练和微调之间的不一致。 GLM微调时,分类任务转换为完形填空,类似PET。如上图示例,原本的“positive”和“negative”二分类任务,转换为预测[mask]的任务(映射到单词“good”和“bad”)。

其实这部分就是Prompt Tuning,有三种主要算法:PET、P-Tuning和EFL。有兴趣的可以参考《PaddleNLP系列课程一:Taskflow、小样本学习、FasterTransformer》第二章。

3.2.6 实验结果

  1. SuperGLUE:NLU任务上,GLM在大多数具有基础架构或大型架构的任务上始终优于BERT。平均而言,GLMBase 得分比BERT Base 高 4.6%,GLMLarge 得分比BERT Large 高 5.0%。
在这里插入图片描述


  1. Sequence-to-Sequence:GLM RoBERTa可以实现匹配Seq2Seq BART模型的性能,并且优于T5和UniLMv2


在这里插入图片描述

3. 有条件生成和无条件生成

在这里插入图片描述

其它结果请看论文。

3.2.7 结论

GLM是一种用于自然语言理解和生成的通用预训练框架。论文展示了NLU任务可以被形式化为条件生成任务,因此可以由自回归模型解决。GLM将不同任务的预训练目标统一为自回归空白填充,具有混合的注意力掩码和新颖的二维位置编码。我们的实验证明GLM在NLU任务中优于先前的方法,并且可以有效地共享参数以用于不同的任务。

3.3 GLM-130B


3.3.1 背景&模型优势

GPT-3是一款强大的语言模型,但由于未公开,存在技术瓶颈。目前的语言模型规模庞大,训练需要数百张A100以上的显卡,非常困难。GLM-130B是2022年8月由清华AI向研究界和工业界开放的拥有1300亿参数的中英双语稠密模型。本文介绍了GLM-130B的训练过程,包括设计选择、高效稳定的训练策略和工程努力。
在广泛的英语测试中,GLM-130B的性能明显优于GPT-175B,但在OPT-175B和BLOOM-176B上并未观察到性能优势。在相关测试中,GLM-130B也始终明显优于最大的中文模型ERNIE TITAN 3.0 260B。最后,利用GLM-130B独特的缩放特性,实现了INT4量化使其成为100B缩放模型中的先驱,可进行快速推理(小型多任务模型成为一种趋势)。

  • 可复现性: 所有结果(超过 30 个任务)均可通过我们的开源代码和模型参数复现。
  • 跨平台: 支持在国产的海光 DCU、华为昇腾 910 和申威处理器及美国的英伟达芯片上进行训练与推理。


2022年11月,在斯坦福大学大模型中心对全球30个主流大模型的评测报告中,GLM-130B 在准确性和恶意性指标上与 GPT-3 175B (davinci) 接近或持平,鲁棒性和校准误差在所有千亿规模的基座大模型(作为公平对比,只对比无指令提示微调模型)中表现不错(下图)。


在这里插入图片描述


  
  


在这里插入图片描述


3.3.2 Deep Layer Norm

DeepNorm:Deepnet: Scaling transformers to 1,000 layers
训练不稳定性是训练LLMs的一个主要挑战,适当选择LNs有助于稳定LLM的训练。作者发现GLM的训非常不稳定,于是使用了Deep Layer Norm机制,公式为:
在这里插入图片描述

此外,所有偏置项都被初始化为零。下图显示Deep Layer Norm显著有利于GLM-130B的训练稳定性,比Sandwich-LN更稳定。


在这里插入图片描述


GLM-130B训练不同层次规范的试验。事实证明,DeepNorm是最稳定的一种,因为它具有较小的梯度范数,并且在早期训练中不会出现尖峰

3.3.3 位置编码

位置编码分为绝对位置编码和相对位置编码。一些较新的在大模型中应用较多的位置编码有ALiBiRoPEGLM-130B采用的是后者。GLM-130B团队的观点是虽然RoPE外推性能有限,但是并不应该把长文本的处理问题完全依赖于位置编码的外推,而是需要什么样的长度就在什么样的context length上做训练。

在这里插入图片描述


3.3.4 大模型训练系列技术(混合精度训练、激活函数重演、数据并行、流水线气泡)

这部分内容请参考官方视频《从GLM-130B到ChatGLM:大模型预训练与微调》视频笔记

3.4 ChatGLM(2023.3.22)

官网(内测申请)

由于GLM-130B的动态知识欠缺、知识陈旧、缺乏可解释性,同时缺少高效“Prompt工程”,在对话场景中使用时很难尽人意。所以清华大学参考了 ChatGPT 的设计思路,在 GLM-130B 中注入了代码预训练,通过有监督微调(Supervised Fine-Tuning)、反馈自助(Feedback Bootstrap)、人类反馈强化学习(Reinforcement Learning from Human Feedback) 等技术实现人类意图对齐。

ChatGLM千亿参数版本由于还处于内测,没有太多的公开信息,报告中给出了目前的一些成绩对比:

  • MMLU评测基准上,较GLM-130B有了有更大提升,超过GPT3 davinci版本30%,达到了ChatGPT(GPT-3.5-turbo)的81%
  • 在非数学知识场景达到了ChatGPT(GPT-3.5-turbo)的95%
  • 在非数学推理场景达到了ChatGPT(GPT-3.5-turbo)的96%
  • 在高考、SAT、LSAT等考试的综合成绩上,达到了ChatGPT(GPT-3.5-turbo)的90%。

3.5 ChatGLM-6B


3.5.1 简介

由于ChatGLM千亿参数版本暂未公开,为了与社区一起更好地推动大模型技术的发展,清华团队开源了62亿参数版本的ChatGLM-6B。结合模型量化技术,用户可以在消费级的显卡上进行本地部署。

该版本具有以下特点:

  • 充分的中英双语预训练: ChatGLM-6B 在 1:1 比例的中英语料上训练了 1T 的 token 量,兼具双语能力。
  • 优化的模型架构和大小: 吸取 GLM-130B 训练经验,修正了二维 RoPE 位置编码实现,使用传统FFN结构。6B(62亿)的参数大小,也使得研究者和个人开发者自己微调和部署 ChatGLM-6B 成为可能。
  • 较低的部署门槛: FP16 半精度下,ChatGLM-6B 需要至少 13GB 的显存进行推理,结合模型量化技术,这一需求可以进一步降低到 10GB(INT8) 和 6GB(INT4), 使得 ChatGLM-6B 可以部署在消费级显卡上。
  • 更长的序列长度: 相比 GLM-10B(序列长度1024),ChatGLM-6B 序列长度达 2048,支持更长对话和应用。
  • 人类意图对齐训练: 使用了监督微调(Supervised Fine-Tuning)、反馈自助(Feedback Bootstrap)、人类反馈强化学习(Reinforcement Learning from Human Feedback) 等方式,使模型初具理解人类指令意图的能力。输出格式为 markdown,方便展示。

3.5.2 局限性

  • 模型容量较小: 6B 的小容量,决定了其相对较弱的模型记忆和语言能力。在面对许多事实性知识任务时,ChatGLM-6B 可能会生成不正确的信息;她也不擅长逻辑类问题(如数学、编程)的解答。
  • 偏见:ChatGLM-6B 只是一个初步与人类意图对齐的语言模型,可能会生成有害、有偏见的内容。
  • 多轮对话能力较弱:ChatGLM-6B 的上下文理解能力还不够充分,在面对长答案生成,以及多轮对话的场景时,可能会出现上下文丢失和理解错误的情况。
  • 英文能力不足:训练时使用的指示大部分都是中文的,只有一小部分指示是英文的。因此在使用英文指示时,回复的质量可能不如中文指示的回复,甚至与中文指示下的回复矛盾。
  • 易被误导:ChatGLM-6B 的“自我认知”可能存在问题,很容易被误导并产生错误的言论。例如当前版本模型在被误导的情况下,会在自我认知上发生偏差。即使该模型经过了1万亿标识符(token)左右的双语预训练,并且进行了指令微调和人类反馈强化学习(RLHF),但是因为模型容量较小,所以在某些指示下可能会产生有误导性的内容。

3.5.3 环境配置

如何评价智谱 AI 发布的 ChatGLM,以及开源支持单卡推理的 ChatGLM-6B 模型?


在这里插入图片描述

ChatGLM-6B所有模型文件,总共13G左右,显存不够时可以使用量化模型的方式加载,4-bit量化后可以加载到显存,占用5.2G显存左右,但是量化加载需要13G的内存,就是无论无何这13G的模型文件要么直接加载到显存,要么加载到内存量化后再加载到显存

下面官方直接提供了量化后的模型文件,也就避免了上述处理13G模型文件的操作。 - 4-bit量化后的模型文件下载:GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b-int4 - 进一步提对Embedding量化后的模型,模型参数仅占用4.3 GB显存:GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b-int4-qe

3.5.4 相关开源项目

  • Chinese-LangChain:中文langchain项目,基于ChatGLM-6b+langchain实现本地化知识库检索与智能答案生成,增加web search功能、知识库选择功能和支持知识增量更新
  • langchain-ChatGLM:基于 langchain 的 ChatGLM 应用,实现基于可扩展知识库的问答
  • ChatGLM-6B-Engineering:基于 ChatGLM-6B 后期调教,网络爬虫及 Stable Diffusion 实现的网络搜索及图片生成
  • ChatGLM-OpenAI-API:将 ChatGLM-6B 封装为 OpenAI API 风格,并通过 ngrok/cloudflare 对外提供服务,从而将 ChatGLM 快速集成到 OpenAI 的各种生态中。

对 ChatGLM-6B 进行微调的开源项目: - InstructGLM:基于ChatGLM-6B进行指令学习,汇总开源中英文指令数据,基于Lora进行指令数据微调,开放了Alpaca、Belle微调后的Lora权重,修复web_demo重复问题 - ChatGLM-Finetuning:一种平价的chatgpt实现方案,基于清华的ChatGLM-6B+ LoRA 进行finetune。

  • ChatGLM-Efficient-Tuning:基于ChatGLM-6B模型进行定制化微调,汇总10余种指令数据集和3种微调方案,实现了4/8比特量化和模型权重融合,提供微调模型快速部署方法。
  • ChatGLM-Tuning:基于 LoRA 对 ChatGLM-6B 进行微调。

四、 PaLM(Google Research 2022.4 )


4.1 简介

PaLM(Pathways Language Model )是谷歌2022年提出的 540B 参数规模的大语言模型,论文主要贡献有:

  • PaLM 使用 谷歌提出的Pathways系统 在 6144 TPU v4 芯片上进行训练(Pathways 是一种新的 ML 系统,可以跨多个 TPU Pod 进行高效训练,详情可参考李沐的Pathways论文精读
  • 它通过在数百种语言理解和生成基准上实现小样本学习sota结果,证明了scaling的良好效果。

4.2 模型结构

PaLM 使用Transformer decoder架构,但是做了一些修改: - 采用SwiGLU激活函数,提供更好的性能和梯度流动,提高模型效果 - 提出Parallel Layers,并行处理多个输入,训练速度提高约 15% - Multi-Query Attention共享key/query的映射,自回归时解码更快 - 位置嵌入使用RoPE embeddings,在长文本上性能更好 - 采用Shared Input-Output Embeddings,输入、输出embedding矩阵是共享 - 不使用偏置项:在dense kernel或layer norm中都没有使用偏差,这种操作提高了大模型的训练稳定性

4.2.1 SwiGLU层


在论文《GLU Variants Improve Transformer》中提到,使用SwiGLU替换transformer中FFN的第一层,得到的FFNSwiGLU,已被证明可以显著提高模型效果,下面进行简单的介绍。

4.2.1.1 FFN

一个Transformer Bolck中主要包含三部分:MultiheadAttention(多头注意力)、FFN(前馈神经网络)和Add&Norm(残差连接和LayerNorm),其中FFN是由两个线性变换层和激活函数组成。

在这里插入图片描述


Transformer Block 所以Transformer中的FFN层可表示为: (,1,2,1,2)=2((1+1))+2=(0,1+1)2+2 - relu的优点:神经元只需要进行加、乘和比较这些简单的计算操作,而且有很好的稀疏性,大约有50%的神经元会处于激活状态 - relu的缺点:输出是非零中心化的,会给后面的计算引入偏置转移的问题,影响梯度下降的效率。 神经元在训练时容易死亡,不恰当的更新会导致参数梯度一直为0,永远无法被激活。

在T5模型中去除了FFN的偏置项,所以T5中的FFN表示为: (,1,2)=(0,1)2

4.2.1.2 swish激活函数及FFN变体

后面的一些工作也使用了其它的激活函数替换ReLU,例如Hendrycks等人就使用了GELU来进行替换,Ramachandran等人使用了Swish来进行替换 :


在这里插入图片描述


其中,GELU(高斯误差线性单元)公式为:(erf 表示误差函数) GELU()=12(1+erf(2)) Swish: Swish()=sigmoid()

Swish具有以下特性: - 平滑性:Swish函数在整个实数域上是连续且可微的,没有突变点或不连续的部分,这有助于提高梯度的稳定性和训练的效果。(比ReLU更平滑)

  • 渐进饱和性:Swish函数在输入为正或负的大值时,会趋向于饱和,即输出值接近于输入值。这有助于抑制大幅度的激活响应,减轻梯度爆炸的问题。
  • 自适应性:Swish函数具有自适应的特性,它的形状和曲线根据输入值的变化而变化。在较大的负值范围内,Swish函数趋向于线性变换;在较大的正值范围内,Swish函数趋向于饱和(Sigmoid函数的特性),保持输入的大部分信息。Swish函数结合了ReLU的线性增长特性,和Sigmoid函数的平滑特性,使得处理复杂的非线性关系时更具表达能力。
  • 较低的计算复杂度:相比于其他激活函数(如ReLU),Swish函数的计算复杂度较低,可以更高效地进行前向传播和反向传播。

4.2.1.3 GLU一般形式及变体

GLU,门控线性单元(Gated Linear Units),是一种神经网络层,其核心思想是通过门控机制来控制激活函数的输出,由线性变换和门控机制组成: - 输入$x$通过线性变换得到两个输出向量,分别称为"门"向量(下式中的$xW + b$)和"中间"向量(下式中的$xV + c$) - 门向量通过一个激活函数(通常是sigmoid函数)进行门控,产生一个介于0和1之间的值,表示在给定位置上的输入是否应该被过滤或保留 - 中间向量与门向量进行Hadamard乘积,从而对输入进行控制和加权。

GLU的一般形式可表示为: (,,,,)=σ(+)(+)

如果将激活函数省略,就可以得到一个双线性变换函数(Bilinear),可表示为: (,,,,)=(+)(+) GLU变体



从GLU的变体中我们不难发现ReGLU的表达式与FFN的表达式是相似的,所以考虑将FFN的第一次线性和激活函数替换为GLU,所以有:

在这里插入图片描述


不难看出,替换操作是FFN原先第一层的$xW_1$替换为GLU的$(xW) \odot xV$,所以对比于原始的FFN来说,多了一项线性变换$xV$。作者为了保持参数数量和计算量不变,将hidden unit减少2/3,即$W,V$的第二维和$W_2$的第一维减少2/3。

4.2.1.4 实验结果

使用T5模型作为baseline,设置编码器和解码器各由12层组成,维度768,注意力层采用 $head=12,d_k = d_v = 64$ ,FFN层及其变体采用3072个神经元,而GLU及其变体则采用2048个神经元,实验结果如下所示:

在这里插入图片描述

在GLUE语言理解基准数据集的任务上进行对比:

在这里插入图片描述


4.2.2 Parallel Layers

在传统的语言模型中,模型的每一层负责特定的任务,每一层都必须等待前一层完成后才能开始处理。Parallel Layers是PaLM的一个关键创新,通过并行层,可以同时处理多个任务,显著提高模型的速度和准确性(并行层可以同时从多个示例中进行学习)。 标准的transformer block中,输出公式可以写成: =+((+(())) 在Parallel Layers中,可以写成:(代码可参考LLM系列之PaLM) =+(())+(())

并行公式使大规模训练速度提高了大约 15%。消融实验显示在 8B 参数量下模型效果下降很小,但在 62B 参数量下没有模型效果下降的现象。

4.2.3 共享键/值的映射

标准的transformer block中,假设有k个注意力头,则计算过程为: - 使用矩阵$W$将Q、K、V映射到k个不同的语义空间中,形状为[k, h]; - 进行Attention计算,得到k个head矩阵。 - 将这k个矩阵串联拼接起来,乘以矩阵$W^o$(保持维度一致)得到多头注意力结果。

故多头注意力模型公式可以写成:

,,)=(1....)=[(1,1...,1)...(1,...,]


在这里插入图片描述

而在PaLM中,每个head的key/value权值共享,即key和value被映射为[1,h],但query仍然被映射为shape[k,h]。论文发现这种操作对模型质量和训练速度没有影响,但在自回归解码时间上有效节省了成本。(标准的多头注意力在自回归解码过程中,键(key)和值(value)张量在不同样本之间不共享,并且每次只解码一个单词,所以在加速器硬件上的效率较低)

4.2.4 RoPE embeddings

RoPE 嵌入在长文本上具有更好的性能 ,具体原理可看苏神文章《Transformer升级之路:2、博采众长的旋转式位置编码》

4.2.5 Shared Input-Output Embeddings

在自然语言处理任务中,输入序列和输出序列都需要经过嵌入层来获取对应的嵌入向量。而在PaLM中,输入序列和输出序列共享相同的嵌入层参数矩阵,即输入序列中的单词通过嵌入层获得其嵌入向量,同时输出序列中的单词也通过相同的嵌入层获得对应的嵌入向量。

这样做的目的是为了让输入和输出之间共享语义信息,表示更加一致和相互关联,使得模型能够更好地理解输入和输出之间的语义关系,并更准确地进行预测和生成。

需要注意的是,共享嵌入层并不意味着输入和输出之间的嵌入是完全相同的,而是共享参数矩阵,通过参数的共享来实现输入和输出之间的信息传递和一致性。

4.3 模型尺度和训练数据

考虑了三种不同的模型尺度:540B、62B 和 8B 参数:

在这里插入图片描述


PaLM 预训练数据集: - 包含 7800 亿个标记的高质量语料库,代表了广泛的自然语言用例。该数据集是经过过滤的网页、书籍、维基百科、新闻文章、源代码和社交媒体对话的混合体。该数据集基于用于训练 LaMDA(Thoppilan 等人,2022 年)和 GLaM(Du 等人,2021 年)的数据集。 - 所有三个模型都只在一个时期的数据上进行训练(所有模型的数据清洗方式都相同)。 - 除了自然语言数据,预训练数据集还包含 196GB 代码,从 GitHub 上的开源存储库获取,包括 Java、HTML、Javascript、Python、PHP、C#、XML、C++ 和 C。


在这里插入图片描述


4.4 训练硬件资源


在这里插入图片描述

总体来说,该程序包含: - 组件 A:用于 pod 内前向+反向计算(包括 pod 内梯度减少) - 组件 B:用于跨 pod 梯度传输的传输子图,以及用于优化器更新的(包括本地和远程梯度的求和)

Pathways 程序在每个 pod 上执行组件 A,然后将输出梯度传输到另一个 pod,最后在每个 pod 上执行组件 B。因此,它掩盖了延迟,还分摊了管理数据传输的成本,PaLM 代表了 LLM 训练效率向前迈出的重要一步。(PaLM的硬件FLOPs利用率为57.8%,模型FLOPs利用率见下表)

在这里插入图片描述


FLOPS表示每秒钟可以执行的浮点运算次数,Model FLOPS utilization(模型FLOPS利用率)是指在机器学习模型中使用的浮点运算数(FLOPS)的有效利用程度,表示实际执行的浮点运算与模型的理论计算能力之间的关系。一个高的Model FLOPS utilization意味着模型能够有效地利用计算资源,并将其转化为有意义的计算任务。这意味着模型的计算效率较高,能够更快地完成训练或推断任务。

4.5 实验

PaLM 540B 在所有基准测试中都优于类似尺寸的模型(Megatron-Turing NLG 530B)。这表明预训练数据集、训练策略和训练期间观察到的标记数量在实现这些结果方面也起着重要作用。


在这里插入图片描述
在这里插入图片描述


PaLM-Coder 540B 的性能进一步提高,在 HumanEval 上达到 88.4% pass@100,在 MBPP 上达到 80.8% pass@80。

在这里插入图片描述



Share Http URL:  http://www.wittx.cn/get_news_message.do?new_id=1203



请输入评论