返回介绍

数学基础

统计学习

深度学习

工具

Scala

七、OPT [2022]

发布于 2023-07-17 23:38:25 字数 44689 浏览 0 评论 0 收藏 0

  1. 在大规模文本集合上训练的大语言模型 Large language model: LLM 已经展示出令人惊讶的能力来生成文本、执行 zero-shot/few-shot learning 。虽然在某些情况下,公众可以通过付费 API 与这些模型交互,但是完整的模型访问权限仅限于少数资源丰富的实验室。这种受限的访问权限限制了研究人员的能力来研究这些大语言模型如何工作以及为什么工作,从而阻碍了在robustness, bias, toxicity 等领域的已知挑战方面取得进展。

    在论文 《OPT: Open Pre-trained Transformer Language Models》中,作者介绍了 Open Pretrained Transformer: OPT,这是一套 decoder-only pre-trained transformer ,参数范围从 125M175B 。 论文的目标是与感兴趣的研究人员充分和负责地分享 OPT 。作者训练 OPT 模型从而大致匹配 GPT-3 族模型的性能和大小,同时在数据收集和高效训练方面应用最新的最佳实践。作者开发这一套 OPT 模型的目的是实现可重复的和负责任的大规模研究,并在研究这些大语言模型的影响时带来更多的观点。risk, harm, bias, toxicity 等等的定义,应该由协作的研究团体作为一个整体来阐述,这只有在模型可供研究时才有可能。

    作者正在发布 125M66B 参数之间的所有模型,并将根据请求提供对 OPT-175B 的完全的研究访问。下列研究人员将获准进入:

    • 隶属于政府、民间社会和学术界的组织内的研究人员。
    • 工业研究实验室内的研究人员。

    作者还发布了模型创建日志和代码库(https://github.com/facebookresearch/metaseq),该代码库支持在 99280GBA100 GPU 上训练 OPT-175B ,每个 GPU 达到 147 TFLOPS/s 的利用率。通过该实现,以及使用最新一代的 NVIDIA 硬件,我们能够开发 OPT-175B ,其碳排放量 carbon footprint 仅为 GPT-31/7 。虽然这是一个重大的成就,但是创建这样一个模型的能源成本仍然是不小的,反复地 replicate 这种规模的模型只会放大这些大语言模型不断增长的计算量。

    论文认为,考虑到这些大语言模型在许多下游 language application 中的核心地位,整个人工智能社区(包括学术研究人员、民间社会、政策制定者、以及工业界)必须共同努力,围绕负责任的人工智能(尤其是负责任的大语言模型)制定明确的指导方针。更广泛的人工智能社区需要访问这些模型,以便进行可重复的研究,并共同推动该领域向前发展。随着 OPT-175B 和更小规模 baseline 的发布,作者希望增加声音的多样性,从而定义这些技术的道德考虑。

  2. 相关工作:自从 Transformer《Attention is all you need》)和 BERT《BERT: Pre-training of deep bidirectional transformers for language understanding》)发表以来,NLP 领域经历了向使用具有自监督预训练的大语言模型的巨大转变。包括 T5《Exploring the limits of transfer learning with a unified text-to-text transformer》)和 MegatronLM《Megatron-lm: Training multi-billion parameter language models using model parallelism》)在内的多个 masked language model 都显示出了 scale 上的一致的改善。这些 scaling 增益不仅来自于模型中参数总量的增加,还来自于预训练数据的数量和质量(《Roberta: A robustly optimized bert pretraining approach》《Training compute-optimal large language models》(Chinchilla))。

    • 自回归语言模型的模型规模增长最快,从 1.17M 参数(《Improving language understanding with unsupervised learning》)增加到超过 500B 参数(《 Using deepspeed and megatron to train megatron-turing NLG 530b, A large-scale generative language model》《Palm: Scaling language modeling with pathways》)。由此带来的文本生成流畅性和质量的巨大改善首先体现在 GPT-2《Language models are unsupervised multitask learners》)中,并在 GPT-3《 Language models are few-shot learners》)和更 later 的模型中得到进一步改善。尽管现在已经训练了各种非常大的(超过 100B 个参数)的生成式模型(《Jurassic-1: Technical details and evaluation》(Jurassic-1)、《Scaling language models: Methods, analysis & insights from training gopher》Gopher)、《Lamda: Language models for dialog applications》《Using deepspeed and megatron to train megatron-turing NLG 530b, A large-scale generative language mode》《Palm: Scaling language modeling with pathways》),但是它们都是闭源代码,只能在内部或者通过付费 API service 来访问。包括 EleutherAI《Gpt-neox-20b: An opensource autoregressive language model》)和 BigSciencehttps://huggingface.co/bigscience/tr11-176B-ml-logs/tensorboard)在内的非盈利研究结构在开源 LLM 方面做出了一些引人注目的努力。这些模型在预训练数据、目标语言target language 、模型规模方面不同于 OPT 模型,这使得社区可以比较不同的预训练策略。
    • 自从 GPT-3 以来,大语言模型的主要评估准则一直是 prompt-based《Gpt-neox-20b: An opensource autoregressive language model》《Scaling language models: Methods, analysis & insights from training gopher》《Palm: Scaling language modeling with pathways》),本文中也执行该准则。这在很大程度上是因为在许多任务上进行评估的便利性,因为该准则不需要专门的 task-specific fine-tuningPrompting 本身有很长的历史:cloze evaluation 可以追溯到十几年前(《Unsupervised learning of narrative event chains》《A corpus and evaluation framework for deeper understanding of commonsense stories》)。最近,prompting 或者masked infilling 已被用于 probe models for knowledge《Language models as knowledge bases?》)、或者用于执行各种 NLP 任务(GPT-2GPT-3)。也有一些工作是在在较小模型中引发 prompting behavior 、改善 prompting 的灵活性(《AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts》)、以及理解 prompting 为什么以及如何工作(《 What makes good in-context examples for gpt-3?》《Rethinking the role of demonstrations: What makes in-context learning work?》)。
    • 最近的工作表明:通过微调模型来直接响应 instruction-style prompting 有所增益。然而,有效的 prompt engineering 仍然是一个未解决的研究挑战。结果会随着 prompt 的选择而发生显著且不可预测的变化(《Fantastically ordered prompts and where to find them: Overcoming few-shot prompt order sensitivity》),并且模型似乎并不像我们预期的那样完全理解 prompt《Do prompt-based models really understand the meaning of their prompts》)。此外,在没有验证集的情况下编写 prompt 具有挑战性,这就带来问题,即我们在实践中在多大程度上真正实现了 zero-shot/few-shot learning《True few-shot learning with language models》)。我们并不试图解决这些关于 prompting 的问题,相反,我们的目的只是在现有环境下提供对 OPT-175B 的评估。然而,我们希望 OPT-175Bfull release 将使其他人能够在未来更好地研究这些挑战。

7.1 方法

  1. 模型:我们给出了八个 Transformer 语言模型的结果,它们的参数规模从 125M175B 。模型架构的细节如下表所示。为了提高透明度并降低训练不稳定性的风险,我们的模型和超参数在很大程度上遵循 GPT-3 ,除了变化 batch size 从而提高计算效率。

  2. 训练配置Training Setup

    • 对于权重初始化,我们遵循 Megatron-LM 代码库(https://github.com/NVIDIA/Megatron-LM/blob/main/examples/pretrain_gpt3_175B.sh)中提供的相同设置,使用均值为零且标准差为 0.006 的正态分布。
    • 输出层的标准差按照1.0/2L$ 1.0/\sqrt{2L} $ 来缩放,其中L$ L $ 是 layer 的总数。
    • 所有 bias 都初始化为零,所有模型都使用 ReLU 激活函数以及 2048 的序列长度。
    • 我们使用 AdamW 优化器,设置(β1,β2)$ (\beta_1,\beta_2) $ 为(0.9,0.95)$ (0.9,0.95) $ ,以及 weight decay0.1

    • 我们遵循线性的learning rate schedule ,在 OPT-175B 中的前面 2000 steps (或者在我们的更小的 baseline 中选择前面的 375Mtoken )中将学习率从 0 warm up 到最大值,并在 300Btoken 上衰减到最大学习率的 10%

      还需要对学习率进行一些 mid-flight 的调整(参考后文)。

    • 根据不同的模型,我们的 batch size 设定为 0.5M ~ M,并且在整个训练过程中固定不变。

    • 我们始终使用 0.1dropout,但是我们不对 embedding 应用任何 dropout
    • 我们将梯度范数超过 1.0 时裁剪到 1.0 ,除了一些 mid-flight 调整时将这个阈值从 1.0 降低到 0.3(参考后文)。
    • 我们还包括一个梯度预除因子 gradient pre-divide factor ,从而在计算所有 rank 的梯度时降低上溢出/下溢出的风险(把除以 word sizeN$ N $ 的操作拆分为两个除以N$ \sqrt N $ 的操作)。
  3. 预训练语料库 Pre-training Corpus:预训练语料库包含 RoBERTaPile、和 PushShift.io Reddit 。所有语料库先前都被收集或过滤为主要包含英文的文本,但是 CommonCrawl 语料库中仍然存在少量非英语的数据。

    我们通过 MinhashLSH 过滤掉 Jaccard similarity 超过 0.95 的文档,从而删除了所有数据集中的重复文档。我们发现 Pile 尤其充满了重复的文件,并建议未来使用 Pile 的研究人员执行额外的重复数据删除处理。

    我们使用 GPT-2byte-level BPE tokenizer 。我们的最终语料库包含大约 180Btoken

    • RoBERTa:我们包括了 RoBERTa 语料库的 BookCorpusStories 子集,并利用了 CCNewsupdated version ,其中包含截至 2021928 日的新闻报导。这个 CCNews v2 语料库的预处理方式与原始 RoBERTaCCNews 相同。
    • Pile:我们包含了 Pile 的一个子集,包括:CommonCrawlDM MathematicsProject GutenbergHackerNewsOpenSubtitlesOpenWebText2USPTOWikipediaPile 的其它子集被删除,因为我们发现它们增加了不稳定的风险(这是通过在 1.3B 规模时所引起的梯度范数峰值的趋势来衡量的),或者被认为是不合适的。所有的子集都经过额外的临时的 whitespace normalization
    • PushShift.io Reddit:这是 《The pushshift reddit dataset》 所提出的数据集的一个子集,并且之前由 《Recipes for building an open-domain chatbot》 所使用。为了将 conversational tree 转换为语言模型可以访问的文档,我们提取了每个 thread (即,发表的帖子)中最长的评论链,并丢弃了树中的所有其它 path 。这将语料库减少了大约 66%
  4. 训练效率:我们在 99280GBA00 GPU 上训练 OPT-175B,方法是利用具有 Megatron-LM Tensor ParallelismFully Sharded Data Parallel 。我们实现了每个 GPU 高达 147 TFLOP/s 的利用率。我们将 Adam stateFP32 保存,因为我们将它分片到所有 host 中,而模型权重仍然以 FP16 保存。为了避免下溢出,我们使用了动态损失缩放 dynamic loss scaling,如《Mixed precision training》 所述。

  5. 训练过程:这里我们描述了在 OPT-175B 预训练期间出现的重大的训练过程调整 training process adjustment

    • 硬件故障 Hardware Failures:在训练 OPT-175B 时,我们在计算集群中遇到了大量的硬件故障。在 2 个月的时间里,硬件故障导致100 台主机上至少 35 次手动重启、以及 cycling (即自动重启)。在手动重启期间, training run 被暂停,并进行了一系列诊断测试从而检测有问题的节点。然后关闭标记的异常节点,并从最后保存的 checkpoint 恢复训练。考虑到主机 cycled out 的数量和手动重启的数量之间的差异,我们估计有 70+ 次由于硬件故障而自动重启。

    • 损失函数发散 Loss Divergences:损失发散也是我们训练过程中的一个问题。当损失发散时,我们发现降低学习率并从一个较早的 checkpoint 重新开始可以让作业恢复并继续训练。我们注意到:损失发散、动态损失标量dynamic loss scalar崩溃到 0 、以及最后一层激活值 activationL2 范数达到峰值,这三者之间的相关性。这些观察结果使我们选择这样的启动点:我们的动态损失标量仍处于健康状态(大于等于 1.0),并且在该点之后的最后一层激活值的范数呈现下降趋势而不是无限增长的趋势。

      我们的 empirical LR schedule 如下图所示。

      在训练的早期,我们还注意到更低的梯度裁剪(从 1.0 降低到 0.3 )有助于稳定性。有关详细信息,请参考我们发布的训练日志。

      下图展示了我们验证损失的曲线。

    • Other Mid-flight Changes:我们进行了许多其它实验性的 mid-flight changes 来处理损失发散。其中包括:

      • 切换到普通 SGD(优化很快进入瓶颈,然后我们又切换回 AdamW)。
      • 重设动态损失标量(这有助于恢复一些发散,但是无法解决全部的发散)。
      • 切换到更新版本的 Megatron(这减少了激活值范数的压力并提高了吞吐量)。

7.2 评估

7.2.1 Prompting & Few-Shot

  1. 我们在 16 个标准的 NLP 任务上评估我们的模型,这些任务在一些文献中被使用:

    • HellaSwag《Hellaswag: Can a machine really finish your sentence? 》
    • StoryCloze《A corpus and evaluation framework for deeper understanding of commonsense stories》
    • PIQA《Piqa: Reasoning about physical commonsense in natural language》
    • ARC Easy and Challenge《Think you have solved question answering? try arc, the AI2 reasoning challenge》
    • OpenBookQA《Can a suit of armor conduct electricity? A new dataset for open book question answering》
    • WinoGrad《The Winograd schema challenge》
    • WinoGrande《Winogrande: An adversarial winograd schema challenge at scale》
    • SuperGLUE《SuperGLUE: A stickier benchmark for general-purpose language understanding systems》

    我们遵从 GPT-3 并使用它的 prompt 和整体实验配置。我们主要与 GPT-3 进行比较,旨在重新实现它的评估配置 evaluation setting,但是在可能的情况下在每个任务上报告其它大语言模型的性能(Jurassic-1GopherChinchillaGPT-NeoX-20B)。

    我们报告了准确率指标(考虑到评估指标的一致性,对于 MultiRCReCoRD 省略了 F1)。对于SuperGLUE benchmark 中的Winograd Schema Challenge: WSC 任务,我们遵循 GPT-3 并将该任务形式化为选择题,众所周知这将影响性能(《Precise task formalization matters in Winograd schema evaluations》)。

  2. Zero-shot:所有 14 个任务的总体平均 zero-shot 性能如下图所示(忽略了 MultiRCWIC )。总体而言,我们看到我们的平均性能遵循 GPT-3 的趋势。

    然而,不同任务的性能可能会有很大差异,完整的数据如下图所示(原始论文的附录 A ) 。

    注意,我们有意从这些均值中删除了 MultiRCWIC 任务的结果,因为这两个数据集似乎系统性地倾向于 GPT-3 或者 OPT

    可以看到:

    • OPT10 个任务上的表现大致与 GPT-3 相当,在 3 个任务上(ARC 的两个任务和 MultiRC 任务)表现不佳。
    • 3 个任务上(CB, BoolQ, WSC),我们发现 GPTOPT 模型在规模scale 方面都表现出不可预测的行为,这可能是由于这 3 个任务的验证集规模较小(分别为 56277104 个样本)。
    • WIC 中,我们看到 OPT 模型总是优于 GPT-3 模型,尽管 GPT-3 报告的数字似乎也值得怀疑,因为 WIC 是一个二分类任务。
    • 对于 MultiRC,我们无法在我们的评估配置中使用 Davinci API 复现 GPT-3 的结果,这表明该任务的评估方法存在差异。
    • 对于 BoolQWSC,我们注意到 OPTGPT 模型似乎都徘徊在 majority-class 准确率附近,这表明概率质量 probability masses 中的小扰动可能在评估中占主导地位。
    • ChinchillaGopher 在参数规模方面的表现与其它模型大致一致,而 PaLM 通常在所有配置中表现更好,即使在控制参数数量时也是如此。我们推测 PaLM 的良好性能主要来自于更高质量和多样性的预训练数据。
  3. One-shot and Few-shot:下图展示了平均的 multi-shot 性能(同样地,忽略了 MultiRCWIC )。

    完整的数据如下图所示(原始论文的附录 A ) 。

    可以看到:

    • 在所有指标的均值中,我们发现 OPT 模型的性能类似于 GPT-3 模型。

    • 然而,与 zero-shot 一样,分解每个任务的这些结果展示了一个不同的故事:

      • zero-shot 相同的 10 个数据集中,我们看到OPT模型和 GPT-3 模型的性能相似。
      • BoolQ, CB, WSC, RTE 数据集上,我们发现 OPTGPT-3 模型在规模scale 方面都表现出不可预测的行为。
      • MultiRC 中,我们始终看到 OPT 模型与 GPT-3 模型相比表现不佳。与 zero-shot 评估类似,我们猜测我们的 one-hot 评估和 few-shot 评估的配置可能与 GPT-3 显著不同。

7.2.2 Dialogue

  1. 众所周知,大语言模型是现代对话模型dialogue model的一个组成部分,我们还在几个开源对话数据集上评估 OPT-17B。具体而言,我们遵循 《Recipes for building an open-domain chatbot》 ,并评估了以下数据集:

    • ConvAI2《The second conversational intelligence challenge (ConvAI2)》
    • Wizard of Wikipedia《Wizard of Wikipedia: Knowledge-powered conversational agents》
    • Empathetic Dialogues《Towards empathetic opendomain conversation models: A new benchmark and dataset》
    • Blended Skill Talk《Can you put it all together: Evaluating conversational agents’ ability to blend skills》
    • Wizard of Internet《Internet-augmented dialogue generation》

    我们重点比较现有的开源对话模型,包括 fine-tuned BlenderBot 1《Recipes for building an open-domain chatbot》 ),及其预训练部分 Reddit 2.7B 。我们还与 fine-tuned R2C2 BlenderBot 进行比较,这是一个由 《Language models that seek for knowledge: Modular search & generation for dialogue and prompt completion》 所训练的 2.7B 参数的 BlenderBot-like 模型。

    我们遵从 ConvAI2 竞赛(《The second conversational intelligence challenge (ConvAI2)》)的指标报告 PerplexityUnigram F1 (UF1) overlap 。为了控制每个模型中的不同 tokenization,我们将所有 perplexity 标准化为 GPT-2 tokenizer 的空间。

    我们还注意哪些模型在这些对话任务上是监督的,哪些模型是无监督的。对于 OPT-175B,所有的对话生成都使用贪婪解码 greedy decoding 执行最多 32token 。除了交替使用 "Person 1:""Person 2:" 的对话行之外,我们没有尝试 prompt 模型。

    其它模型使用 BlenderBot 1 中的对话生成参数。

  2. 实验结果如下表所示。可以看到:

    • OPT-175B 在所有任务上的表现都显著优于同样无监督的 Reddit 2.7B 模型,并且与完全监督的 BlenderBot 1 模型具有竞争力,尤其是在 ConvAI2 数据集中。

    • 在所有模型都完全无监督的 Wizard-of-Internet 数据集上,我们看到 OPT-175B 达到了最低的 perplexity

    • 在有监督的 Wizard-of-Wikipedia 数据集上,OPT-175B 仍然低于有监督的模型。

    • 我们有些惊讶的是,在 ConvAI2 数据集上,无监督 OPT-175B 和监督模型 BlenderBot 1 具有相同的竞争力。这可能表明 ConvAI2 数据集泄露到 general pre-training corpus 、甚至是下表中用于评估的验证集中。

      为了解决数据泄露问题,我们在预训练语料库中搜索了 ConvAI2 的第一个对话 first conversation,但是没有发现任何 overlap

      • 我们还在从未公开发布过的 ConvAI2 hidden test 集合上评估了 OPT-175B ,并达到了 10.7 ppl.185 UF1,与验证集的性能相匹配。
      • 我们在 ConvAI2-likeMultiSessionChat: MSC 数据集(《Beyond goldfish memory: Long-term open-domain conversation》)的子集上评估了 OPT-175B,并获得了 9.7 ppl.177 UF1 ,表明 OPT-175B 模型在多个 PersonaChat-like 数据集中很好地泛化。

      由于 MSC 数据集和 WoI 数据集都是在 CommonCrawl snapshot (由预训练语料库所使用)之后发布的,因此数据泄露的风险很小。我们得出结论:OPT-175B 具有很强的能力在不同的对话中保持一致的角色 consistent persona ,在 LaMDA 中也强调了这一行为。

7.3 Bias & Toxicity 评估

  1. 为了了解 OPT-175B 的潜在危害,我们评估了一系列 benchmark ,关于仇恨言论检测hate speech detection、刻板印象stereotype awareness、以及有毒内容生成toxic content generation。尽管这些 benchmark 可能存在缺陷,但是这些评估结果为了解 OPT-175B 的局限性迈出了第一步。我们主要与 GPT-3 Davinci API 进行比较,因为这些 benchmark 尚未包含在 GPT-3 论文中。

  2. Hate Speech Detection:使用 《ETHOS: an online hate speech detection dataset》 提供的 ETHOS 数据集,并根据 《Detecting hate speech with gpt-3》 的指示,我们度量了 OPT-175B 的能力,从而确定某些英语 statement 是否具有种族主义或性别歧视(或者两者都不是)。

    zero-shot/one-shot/few-shot 的二元分类 case 中,我们会给模型提供文本,并要求模型回答该文本是种族主义还是性别歧视,并提供 yes/noresponse 。在 few-shot 的多类分类 case 中,模型需要提供 yes/no/neitherresponse

    实验结果如下表所示。可以看到:在所有的 zero-shot/one-shot/few-shot setting 中,OPT-175B 的性能显著优于 GPT-3 Davinci API

    我们推测这来自于两个来源:

    • 通过 GPT-3 Davinci API 进行评估可能会带来安全控制机制safety control mechanism ,而这个机制是原始的 175B GPT-3 模型(原始论文中的)所没有的(从而导致无法区别种族主义或性别歧视)。
    • 在预训练数据集中大量存在未经审核的社交媒体讨论 social media discussion ,这为此类分类任务提供了额外的 inductive bias

  3. CrowS-PairsCrowSPairs《Crows-pairs: A challenge dataset for measuring social biases in masked language models》)是为 masked language model 开发的,它是一个众包的 benchmark,旨在度量 9 个类目中的 intra-sentence levelbias ,这些类目包括:性别gender、宗教religion、种族/肤色 race/color、 性取向sexual orientation、年龄 age、国籍nationality、残疾 disability、外貌physical appearance、社会经济状况socioeconomic status

    每个样本由一对句子组成,代表关于某个群体的刻板印象stereotype 或者 anti-stereotype ,目标是衡量模型对 stereotypical expression 的偏好。得分越高则表明模型表现出的 bias 越大。

    实验结果如下表所示。可以看到:与 GPT-3 Davinci API 相比,OPT-175B 似乎在除了宗教之外的几乎所有类目中都表现出更多的 stereotypical bias

    同样地,这可能是由于训练数据的差异所致。《Crows-pairs: A challenge dataset for measuring social biases in masked language models》 表明:Pushshift.io Reddit 语料库比其它语料库(如 Wikipedia)在 stereotype 和歧视性文本 discriminatory text 上具有更高的发生率。鉴于Pushshift.io Reddit 语料库是 OPT-175B 的一个主要数据源,因此OPT-175B 可能已经学习了更多的歧视性关联,从而直接影响了它在 CrowS-Pairs 上的性能。

  4. StereoSet:遵从 《Jurassic-1: Technical details and evaluation》《Efficient large scale language modeling with mixtures of experts》 ,我们使用 StereoSet《Measuring stereotypical bias in pretrained language models》)来衡量 4 个类目的 stereotypical bias:职业 profession、性别 gender、宗教 religion、种族 race 。除了 intra-sentence 度量(类似于 CrowSPairs),StereoSet 还包括 inter-sentence level 度量从而测试模型融合 additional context 的能力。

    为了说明 bias detectionlanguage modeling capability 之间的潜在 trade-offStereoSet 包含两个指标:Language Modeling Score: LMSStereotype Score: SS。这两个指标然后被组合从而构成 Idealized Context Association Test: ICAT 分。不像 《Jurassic-1: Technical details and evaluation》 ,我们通过 token count 而不是 character count 来归一化得分,他们报告说通过 character count 来归一化改进了几个模型的指标。

    结果如下表所示。可以看到:

    • GPT-3 Davinci APIOPT-175B 在总分上表现出相似的得分(尤其是在后两个类目)。

    • 具体而言:

      • GPT-3 Davinci API 在职业和种族方面表现出色,而 OPT-175B 在性别和宗教方面表现出色。
      • OPT-175BSS 指标上的整体表现更好,而 GPT-3 Davinci APILMS 指标上的表现通常更好。

  5. RealToxicityPrompts:我们通过 RealToxicityPrompts 数据集(《RealToxicityPrompts: Evaluating neural toxic degeneration in language models》)评估 OPT-175B 对毒性语言 toxic language 做出的反应。遵从 PaLM,对来自 RTP 数据集的每 10k 个随机采样的 prompt ,我们使用 nucleus sampling 采样 25 个长度为 20 tokengeneration (其中p=0.9$ p=0.9 $ ),然后报告 continuation 的平均毒性概率mean toxicity probability (根据原始 promptbucketed toxicities 进行分层)。

    为了比较,我们报告了来自 GPT-3 Davinci APIPaLMbucketed toxicity rate

    结果如下表所示。可以看到:

    • OPT-175Btoxicity rate 高于 PaLMGPT-3 Davinci API
    • 随着 prompt 的毒性的增加,所有三个模型都增加了生成 toxic continuation 的可能性,这与 《Palm: Scaling language modeling with pathways》 等人的观察结果一致。

    与我们在仇恨言论检测方面的实验一样,我们怀疑在预训练语料库中包含未经审核的社交媒体文本会提高模型对有毒文本toxic text 的熟悉程度,从而倾向于提高生成和检测有毒文本。取决于下游 application 的具体要求,这种对有毒语言 toxic language 的强烈意识 strong awareness 可能是想要的也可能是不想要的。OPT-175B 的未来应用应该考虑模型的这一方面,并且采取额外的缓解措施,或者酌情完全避免使用。

  6. Dialogue Safety Evaluations:最后,我们在两个 Dialogue Safety 评估中比较 OPT-175B

    • 第一个是 SaferDialogues《Saferdialogues: Taking feedback gracefully after conversational safety failures》),它衡量从明显的安全故障中恢复的能力(通常以道歉或承认错误的形式)。
    • 第二个是 Safety Bench Unit Tests《Anticipating safety issues in e2e conversational ai: Framework and tooling》),它衡量模型响应的不安全程度,分为 4leveltopic sensitivitySafeRealisticUnsafeAdversarial。我们对比了几个现有的开源对话模型。

    实验结果如下表所示,可以看到:

    • SaferDialoguesUnit Tests 上,OPT-175BReddit 2.7B 具有相似的性能,其中 OPT-175BSafeAdversarialsetting 上表现略好(得分越低越好)。

    • 我们发现在精选的对话数据集(BlenderBot 1R2C2 )上微调的模型总体上具有较低的毒性,这与 《Recipes for building an open-domain chatbot》《Recipes for safety in open-domain chatbots》 一致。

      我们得出结论:未来对 OPT-175B 的对话实验应该包含对 curated dataset 的显式微调,从而提高安全性。

7.4 局限性

  1. 在前面章节中,我们对所发布的不同规模的模型进行了广泛的评估。我们看到 OPT 模型在标准评估数据集上与 GPT-3 模型的性能相当。此外,我们进行了safetybias、以及 inclusion 的评估,再次看到在毒性和仇恨言论检测方面,OPTGPT-3 模型有一些大致相当的性能。然而,这种评估可能无法完全描述这些模型的全部局限性。总体而言,我们定性地观察到 OPT-175B 受到其它大语言模型中所指出的相同局限性。具体而言:

    • 我们发现 OPT-175B 无法很好地处理陈述性指令 declarative instruction 或直截了当的疑问句。用这样的指令进行 prompting 倾向于一个以该指令开始的对话的模拟,而不是一条指令的执行。在 InstructGPT《Training language models to follow instructions with human feedback》)的指导下,instruction learning 的未来工作可能会缓解这些局限性。
    • OPT-175B 也倾向于重复,很容易陷入循环。虽然采样可以降低重复行为的发生率,但是我们有趣地发现:当仅采样 one generation 时,该问题并未完全消除。未来的工作可能希望纳入更多的现代策略,从而减少重复和提高多样性,如 unlikelihood training《Neural text generation with unlikelihood training》)、best-first decoding《Best-first beam search》)。
    • 与其它大语言模型类似,OPT-175B 会生成与事实不符的 statement。这在信息准确性至关重要的 application 中尤为有害,例如医疗保健、科学发现。最近,一些工作报告了检索增强模型 retrieval-augmented mode 可以提高大语言模型的事实正确性factual correctness 。我们相信 OPT-175B 也将在未来的迭代中受益于检索增强。
    • 如前所述,我们还发现 OPT-175B 具有高度倾向来生成有毒语言toxic language 和强化有害刻板印象harmful stereotype,即使在提供相对无害的 prompt 时也是如此,并且很容易发现对抗的 prompt 。在缓解毒性和 bias 方面,人们已经做了大量工作。根据下游应用,OPT-175B 的未来使用可能需要采用这些缓解措施,尤其是在任何实际部署之前。鉴于我们的主要目标是复制 GPT-3,我们选择不在第一版中应用这些缓解措施。

    总之,我们仍然认为这项技术的商业部署还为时过早。尽管包括 data sheetsmodel cards,我们认为,为了负责任地使用数据,应该通过额外的数据特征和选择标准对训练数据进行更多的审查。当前的做法是向模型提供尽可能多的数据,并在这些数据集中最小化选择(即,无需人工选择,让模型自己去学习)。尽管有全面的评估,但我们最好有更精简和一致的评估配置,从而确保评估场景的可复现性。在 in-context learning 中,不同的 prompting 方式和不同的 shot 数量会产生不同的结果。我们希望 OPT 模型的公开发布将使更多的研究人员致力于这些重要的问题。

7.5 发布的注意事项

  1. 遵从 Partnership for AI 对每个研究人员的建议,以及 NIST 概述的治理指南 governance guidance ,我们正在通过我们的 logbook 以及我们的代码来披露训练 OPT-175B 所涉及的所有细节,并为研究人员提供访问 OPT-175B 的模型权重,以及一套小型 baseline (该 baseline 反映了 OPT-175Bsetup)。我们的目标是对 OPT-175B 的开发周期完全负责,只有通过提高大语言模型的开发的透明度,我们才能在更广泛的部署之前开始了解大语言模型的局限性和风险。

  2. 通过分享我们日常训练过程的详细说明,我们不仅批露了训练当前版本的 OPT-175B 使用了多少计算,而且还批露了当底层基础设置或训练过程本身随着模型规模增大而变得不稳定时所需的人力开销。这些细节通常在以前的出版资料中被忽略,可能是由于无法完全消除 mid-flight 的变化(没有大幅增加计算预算compute budget)。我们希望通过揭示某些临时性 ad-hoc 的设计决定是如何做出的,从而使得我们可以在未来改进这些做法,并共同提高开发这种规模的模型的实验鲁棒性experimental robustness

    在这些说明之外,metaseq 代码库本身是我们许多实现细节的最终真相来源 final source of truth 。通过发布我们的开发代码库,我们旨在阐明任何可能在本文中被忽略的实现细节,因为这些细节要么被认为是该领域的标准做法,要么只是我们未能考虑到的细节。目前的这个代码库也是唯一已知的、在 NVIDIA GPU 上不使用 pipeline paralellism 的情况下训练一个 >= 175B 参数的 decoder-only transformer 的开源实现。

    为了实现在 175B 规模上的实验,我们为研究人员提供了直接访问 OPT-175B 参数的机会。这里的理由有两个:使得 Responsible AI 的研究能够进入大语言模型的领域,同时减少在这种规模下进行研究的环境影响environmental impact 。 越来越多的工作详述了部署大型的、具有新兴能力emergent capability的语言模型的伦理和道德风险。通过将 OPT-175B 的使用限制在非商业许可的研究社区,我们的目的是在更广泛的商业部署发生之前,首先将开发工作聚焦在量化大语言模型的局限性上。

  3. 此外,当复现这种规模的模型时存在大量的计算成本和碳排放。虽然 OPT-175B 在开发时估计碳排放carbon emissions footprintCO2eq) 为 75 吨,相比之下 GPT-3 估计使用 500 吨、Gopher 需要 380 吨。 这些估计并不是通用的报告,这些计算的核算方法也没有标准化。此外,模型训练只是人工智能系统整体碳排放量的一个组成部分:我们还必须考虑实验成本和最终的下游推断成本。所有这些都将导致创建大模型的能源量energy footprint 不断增加。

    通过发布我们的日志,我们希望强调:假设没有硬件故障或训练不稳定的理论碳成本估计,与旨在包括整个大语言模型开发生命周期的碳成本估计之间的 gap 。我们需要了解这些系统的制造碳manufacturing carbon ,因为它们越来越复杂。我们希望我们的论文可以帮助未来的工作,从而确定在衡量规模对环境的影响时需要考虑的额外因素。

  4. 类似地,通过制作一组跨越各种规模的 baseline,我们希望能让更广泛的研究社区研究这些模型仅在规模方面的影响和局限。正如 《Training compute-optimal large language models》 所报告的那样,作为训练数据量的函数,许多这些大语言模型可能训练不足,这意味着纳入更多的数据并继续训练这些 baseline 模型可能会继续提高性能。还有证据表明,容量的阶跃函数变化step-function change 可能发生在比 175B 小得多的规模上(《Finetuned language models are zero-shot learners》),这表明需要为不同的application 考察更广泛的规模。

7.6 附录

7.6.1 数据集细节

  1. 整个预训练数据集是以下子数据集组合而成:

    • BookCorpus:包含超过 1 万本未出版的书籍。
    • CC-Storie:包含 CommonCrawl 数据的一个子集,该子集是 CommonCrawl经过过滤从而符合 Winograd schemasstory-like style
    • Pile :包含以下数据:Pile-CCOpenWebText2USPTOProject GutenbergOpenSubtitlesWikipediaDM MathematicsHackerNews
    • Pushshift.io Reddit:由 《The pushshift reddit dataset》 开发并由 《Recipes for building an open-domain chatbot》 处理。
    • CCNewsV2:包含 CommonCrawl News 数据集英文部分的 updated 版本,该数据集在 RoBERTa 中使用。

    这些数据集是公开可用,并从互联网上下载的。

  2. 数据集规模:包含 180Btoken,对应于 800GB 的数据。我们从预训练数据中拿出一个大约 200MB 的随机验证集,其中按照预训练语料库中每个数据集的大小比例进行采样。

    除了数据集之间可能出现的自然重复之外,我们没有添加其它冗余、错误、或噪音。注意,我们已经对数据集进行人工去重,但是仍然可能遗留某些重复数据

    数据集中可能包含攻击性、侮辱性、威胁性、或引发焦虑的句子。

  3. 预处理:每个子数据集进行了标准的清洗和重新格式化的做法,包括删除重复文本、删除没有信息量的文本(如 “第一章”、“This ebook by Project Gutenberg” )。

7.6.2 模型细节

  1. 模型发布时间:OPT-175B2022-05-03 日发布的。
  2. 模型是 AdamW 训练的,参数规模从 125M175B

7.6.3 输出的例子

  1. 这里所有的例子,最初始的 prompt 是黑体字给出的,其余部分是续接 continuation 。这些例子是有意选择的,从而突出 OPT-175B 的成功和失败。

  2. 诗歌生成:我们已经观察到模型能够写出有趣的诗歌,然而我们很难让模型观察到韵律或格律。

  3. 对话生成:当 prompt 为自由女神像时,模型采用了爱国的性格。然而,在进一步的对话中,模型演变成简单和重复的生成。

  4. few-shot 翻译:模型并未刻意地进行多语言的训练,但是我们发现它在德语、西班牙语、法语、中文的简单翻译上取得了有限的成功。

  5. 论文写作:相比较于以"Abstract"作为提示,以 "1. Introduction" 作为提示会产生更有趣的结果。我们这里的提示是受到 ResNet 论文的第一句话的启发。

  6. 四则运算:我们观察到从加法扩展到其它运算时的错误。

  7. Python 编程:简单地换掉一个变量名就可以改变模型生成的输出。

7.7 Logbook

  1. 参考内容:

    
    
    xxxxxxxxxx
    https://github.com/facebookresearch/metaseq/blob/main/projects/OPT/chronicles/OPT175B_Logbook.pdf https://github.com/facebookresearch/metaseq/blob/main/projects/OPT/chronicles/OPT_Baselines_Logbook.pdf
  2. OPT-175B 开发过程:

    
    
    xxxxxxxxxx
    https://github.com/facebookresearch/metaseq/blob/main/projects/OPT/chronicles/README.md
    • 10% 进度(主要解决训练收敛/数值稳定性问题):

      • Experiment 11.xx Lineage - November 5, 2021

        配置:batch size = 2MFP32AdamAdam beta20.988X 的张量并行,正弦初始化的 LPENormformer0.05weight decay,学习率 3e-4 ,结束学习率为 1e-5embedding 上没有 dropout,梯度预除因子 pre-divide factor32,梯度范数裁剪阈值为 2.5L2 范数)。

        在前几次运行中,损失函数会爆炸,我们主要集中在降低学习率,并增加梯度裁剪的频率(首先将梯度裁剪阈值降低到 1.5,然后将梯度裁剪阈值降低到 1.0)。

        从实验 11.4 开始,在每次重启后的几百次更新之后,我们看到梯度范数爆炸/损失函数爆炸/Nan,同时还有及其不稳定的 loss scale(这使得模型进入欠拟合)。我们开始采取越来越激烈的行动,从增加 weight decay0.1 开始,将 Adam beta2 降低到 0.95,再次降低学习率,最后在实验 11.10 中我们热交换到 ReLU (从 GeLU),同时也切换到更稳定的 MHA (注意,GeLU 中的 x**3 可能是 FP16 的一个不稳定来源)。

        注意:增加 weight decay 和降低 Adam beta2 都可能使梯度更加噪音,但好处是可以更快地 “适应” 来自较新 batch 的梯度。

        同时,我们发现我们的 LPE 没有训练。LPE 的正弦初始化有效地冻结了 positional embedding,这似乎表明我们的初始化方案在总体上存在一个潜在的问题。

      • Experiment 12.xx Lineage - November 11, 2021:现在,尽管我们在过去的 1k 次更新中没有出现梯度范数爆炸或到处是 NaN 的情况,但是似乎训练会停滞不前(参考上面的粉红色曲线,即实验 11.10 )。为此我们尽可能多地采用 Megatron/OpenAI GPT-3 的配置,因为 Megatron/OpenAI GPT-3 的配置是一致的,而且据说都已经成功地训练了一个 175B (及以上)的模型。

        我们的主要改变是:整体的权重初始化,移除 Normformer、移除 embedding scaling、将 LPE 初始化改变为标准 embedding 初始化而不是正弦初始化。

        11.11 日开始,我们开始用这些更新后的配置来训练我们的 12.xx 实验。从那时起,我们唯一不得不进行的重启都与硬件问题有关。现在情况看起来健康多了(激活值的范数、梯度范数、参数范数都显得正常)。我们要处理的下一个问题是 loss/ppl 的平原。

        注意,12.xx 实验中的 loss/ppl 开始时要比 11.xx 系列要高得多。但由于稳定性增加,在 7k 次更新后,loss/ppl 最终要降低很多。优化早期的最低 loss/ppl 似乎不一定能保证损失曲线的均匀移动,注意这些曲率的变化(在早期牺牲一些较高的 loss/ppl)可能对我们剩余的实验也是有用的。

    • 27% 进度(主要面临硬件问题):自从 11.17 日的更新以来,由于各种硬件、基础设施、或实验稳定性问题,我们在 175B 实验中重启了 40 多次。

      绝大多数的重启都是由于硬件故障,以及没有能力提供足够数量的 buffer 节点来替换坏的节点。通过云界面替换一台机器可能需要几个小时,而且更多的时候我们最终会再次得到相同的坏机器。

      总之,围绕基础设施问题的工作占据了团队过去两周的时间。自从感恩节之后,过去的一周充满了梯度溢出错误、损失值命中阈值下限之类的问题(它们是为了避免下溢出而设置的),这也导致了训练的停滞。我们从先前的 checkpoint 重启了几次,发现继续训练偶尔导致更进一步,然后又再次遇到同样的问题。在这个问题上,我们尝试了一些更激烈的方法:为 Adam 测试了类似于 SGD 的配置(通过将 beta1 设为 0,将 epsilon 设为 1),但是发现从 checkpoint 重新初始化 Adam 优化器也会重新加载之前保持的 beta。我们试图切换到真正的普通 SGD,这需要立即实现一个 FP16 友好的版本,结果发现我们的学习率可能被设置得太低,SGD 实际上无法取得进展。

      2021-12-03 号早上开始,我们决定继续使用 Adam ,并且尝试降低学习率,这似乎对降低梯度范数和激活值范数有惊人的效果,并允许 perpexity 继续稳步下降。我们最初选择从比 GPT-3 175B 高得多的学习率开始,因为较小规模的消融实验表明:在 fairseq codebase 中训练时,GPT-3 的学习率设置的太低。然而,现在我们在训练的后期,似乎学习率的衰减速度不够快,无法保持训练的稳定性。

      经过几周的血汗,这里是自上次更新以来的最终进展图。

    • 56% 进度(主要是得到云供应商的更多支持):主要是关于基础设置的工作。

      • 训练稳定性:在 run 12.43 时,我们注意到梯度范数和激活值范数开始飙升(浅蓝色曲线)。我们的补救方法为:对激活值进行裁剪。

      • Megatron v2.6 vs v2.4:当我们意外地将训练所依赖的 Megatron2.4 升级到 2.6 时,我们的训练动态 dynamics 发生了一个有趣的变化。我们注意到,突然之间,激活值范数的轨迹发生了显著的变化(红线到橙线),而我们的吞吐量(每秒单词数)增加了 2%

        我们把这个问题归结为 Megatron 中一行代码的变化,它组织了以下代码的执行:

        
        
        xxxxxxxxxx
        torch._C._jit_set_profiling_executor(False)

        我们仍然不清楚为什么这一行代码会以这种方式影响训练动态。

    • 100% 进度:截止北京时间 2022-01-06 号下午 12:46 分,我们的 175B 模型终于完成了对 300B token 的训练,这需要大约 4.30e+23 FLOPs 的计算量,或者在 102480GB A100 上连续训练大约 33 天(假设没有硬件问题、没有数值不稳定等等)。

      • OpenAI 训练的 175B GPT-3 模型需要在 10000V100 上计算 14.8 天,并消耗 3.14e+23 FLOPs 。这种做法的代码并未开源。
      • 一个 1.1T 的混合专家模型 Mixture-of-Experts model 需要在 512A100 上进行大约 2.16e+22 FLOps 的计算。这相当于一个 6.7B 的稠密模型。
      • 这并不是一个 benchmarking exercise。模型在 180B token 语料库上训练,我们没有时间在训练开始前策划一个更大的数据集。
      • 扩展到 1024A100 来处理这种规模的实际工作负载是非常不容易的。
      • 如果在中等规模下没有足够的消融实验,确保训练在这种规模下收敛也是非常不可行的。在小规模(小于 ~13B 参数)的训练中获得的结果在 scaled-up 时也不一定成立。

7.8 使用

  1. 安装 transformers 库:

    
    
    xxxxxxxxxx
    pip install transformers
  2. 根据 https://huggingface.co/facebook/opt-66b 来使用:

    • 直接使用:

      
      
      xxxxxxxxxx
      from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("facebook/opt-66b") # 模型名字 model = AutoModelForCausalLM.from_pretrained("facebook/opt-66b") # 模型名字
    • 或者下载模型权重到本地(模型有数百 GB ,最好提前下载下来):

      
      
      xxxxxxxxxx
      yum install git-lfs # git-lfs 是一个开源的Git大文件版本控制的解决方案和工具集 git clone https://huggingface.co/facebook/opt-66b

      然后使用:

      
      
      xxxxxxxxxx
      from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("./opt-66b") # 模型下载的位置 model = AutoModelForCausalLM.from_pretrained("./opt-66b") # 模型下载的位置

    也可以选择使用更小的模型,如 opt-125m 来进行研究。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文