9-7 從頭開始構建LLM

目录

  • 介绍
  • 步骤 1:获取和预处理数据
  • OpenAI 的 GPT 家族
  • 谷歌的 540B PaLM 模型
  • 我该如何处理这些信息?
  • 第 2 步:标记和嵌入
  • OpenAI 的 GPT 家族
  • 谷歌的 540B PaLM 模型
  • 我可以对什么东西进行实验?
  • 步骤 3:模型架构
  • OpenAI 的 GPT 家族
  • 谷歌的 540B PaLM 模型
  • 思考和实验模型
  • 步骤 4:训练细节
  • OpenAI 的 GPT 家族
  • 谷歌的 540B PaLM 模型
  • 有效学习的结论
9-7 從頭開始構建LLM

图 1:一些流行的大型语言模型及其功能

介绍

大型语言模型 (LLM) 是当今的热门话题。GPT-3、PaLM、T5、BERT 等模型将 NLP 领域的最先进 (SoTA) 成果推向了新的水平。即使是对机器学习领域没有任何先验知识的完全新手,也能够体验这些巨型模型提供的大量应用。特别是,如果不是 OpenAI,它与其他 AI 组织不同,后者以普通人可以交互和欣赏的方式发布了它开发的所有模型,让世界意识到正在发生一些大事。它提供的 API游乐场以及它为与其模型交互而创建的网站(例如chatGPT)确实应该受到赞赏,因为没有其他组织真正接近向普通公众展示他们的创新,就像 OpenAI 那样。

直奔主题,这篇博客太冗长了,可能很难一口气看完,所以如果你心情好的话,就去读一下吧。这篇文章只是关于如何从头开始构建大型语言模型的信息的总结,即它们用于训练的数据和深层的内部工作原理。这是通过同时比较各种 LLM 来实现的。所以,如果你在构建 LLM 的团队中工作,或者你只是一个好奇的人,那么这篇博客将会很有用,因为正如我之前提到的,这篇博客将有关各种 LLM 的信息集中在一个地方,并附上一些简单的解释和插图。

9-7 從頭開始構建LLM

图 2:每个语言模型都从无监督的预训练开始,学习语言底层的不同模式

步骤 1:获取和预处理数据

问题就在这里。我们需要文本来训练我们的神经网络模型,对吗?数据越多,模型越好。如今,由于 Common Crawl 可以执行操作并以各种格式存储这些文本数据,因此从互联网上获取大量文本非常容易。但是,如果他们想将这些“原始文本”直接输入到他们的神经网络模型中,他们应该能够回答以下推论:

  • 互联网是一个混乱的世界,万维网上的文档、句子、文字等错误百出,如无意义的、重复的文档、不真实和低质量的句子、拼写错误的单词等等,我们有时甚至无法猜到,甚至无法一一列出。
  • 但我们只知道一件事,即我们知道好数据是什么样子,而不是考虑坏数据是什么样子的可能性。那么,我们如何才能从包含坏数据的互联网中获取这种好的文本数据,即词汇使用良好、句子和单词组织良好的高质量文档?
  • 典型的 NLP 预处理技术(如删除停用词、将大写字母转换为小写字母等)不再有意义,因为我们希望 LLM 生成类似人类的文本,因此必须保留每个小细节。那么,我们如何预处理、过滤或清理我们收集的数据集呢?
9-7 從頭開始構建LLM

图 3:说明需要删除坏数据的图片

我们来看看大型AI组织是如何通过研究回答上述问题的:

OpenAI 的 GPT 家族

正如我之前提到的,OpenAI 的 GPT 模型非常出名,尤其是 GPT-3,它为我们带来了 chatGPT。可以说他们从小处着手,然后逐步提高水平。你马上就会明白我的意思。

为了训练 GPT 模型,他们收集了BookCorpus 数据集,其中包含数千本未出版的书籍,涉及各种类型,如冒险、浪漫等……您可能已经猜到了,GPT-1 不是在互联网上训练的,但我们可以说,在某种程度上,他们收集了一个高质量的数据集,因为我们知道书籍与整个互联网垃圾相比包含优质文本。所以,这里不用担心预处理步骤(标准化一些标点符号和空格就足够了)。此外,当时 OpenAI 真正想要尝试模型架构,而不是思考数据集。

9-7 從頭開始構建LLM

是时候让 GPT-2 升级它要训练的文本数据量了。因此,他们意识到,正如我们之前讨论的那样,像 Commoncrawl 这样的大型多样化数据集(它拥有几乎无限的文本)存在严重的数据质量问题,而且内容大多难以理解,即坏数据。但如果我们考虑收集好数据的关键,那么我们有一个可靠的来源,即人类智能,因为作为人类,我们只喜欢阅读包含好文本数据的网页。因此,他们做了以下事情,希望获得好的数据,即他们删除了所有出站链接(从 Reddit 到外部网站的链接),大约 4500 万个 Reddit 链接😲,这些链接至少获得了 3 个 karma(用户得分,即他们的赞成票数与反对票数之和),从而产生了一个新的数据集,他们将其命名为 WebText。不幸的是,WebText 尚未公开发布,但最接近的是OpenWebText

预处理阶段

在预处理阶段,他们删除了所有维基百科文档并执行了重复数据删除(删除重复的文档)和一些基于启发式的清理(见下面的列表)

关于启发式清理的说明

启发式清理涉及使用规则或算法根据经验或常识来清理或过滤数据集中的数据。可用于清理 WebText 等文本数据集的一些可能的启发式清理方法包括:

  1. 删除字数或内容质量较低之文档或网页。
  2. 过滤掉非英文的页面。
  3. 删除含有损坏或缺失链接的页面。
  4. 删除含有大量广告或垃圾内容的页面。
  5. 过滤掉重复或近似重复的页面。
  6. 删除包含不相关或无信息内容的页面,例如占位符页面或登录页面。
  7. 从文本中删除 HTML 标签或其他格式元素等…(取决于收集的数据集)

随着时间的推移,OpenAI 意识到他们的模型架构在理解文本方面是成功的,但现在是时候让他们的模型审视整个互联网(Common Crawl 数据集),因为模型必须知道一切才能对每个人都可靠和实用,但长期未解的问题仍然存在:“我们如何处理互联网上的混乱?”。事实证明,答案只是将好文本数据的标准保持在尽可能高的高度,高于坏文本数据,这样模型就更容易生成好文本而不是坏文本。这正是该组织在处理它为训练 GPT-3 而收集的 CommonCrawl 数据集时所做的:

预处理阶段

  1. 过滤后的 CommonCrawl:开发了一种自动过滤方法来提高 Common Crawl 的质量。对高质量文档进行逻辑回归分类器训练,并根据预测的质量分数对 Common Crawl 文档进行优先排序和抽样。
  2. 模糊去重:为了防止过度拟合,使用 Spark 的 MinHashLSH 实现删除了重叠度较高的文档,并从 Common Crawl 中删除了 WebText。这平均减少了 10% 的数据集大小。
  3. 将已知的高质量参考语料库(如 WebText 的扩展版本、两个基于互联网的书籍语料库(Books1 和 Books2)以及英语维基百科)添加到训练组合中,以增强 CommonCrawl 并增加其多样性。
9-7 從頭開始構建LLM

图 4:用于训练 GPT-3 的数据集和数据量(来源
9-7 從頭開始構建LLM

谷歌的 540B PaLM 模型

与 OpenAI 不同,谷歌在收集优质数据方面拥有丰富的经验和专业知识,因为其主要的搜索业务专注于向用户提供高质量和值得信赖的内容。因此,为训练 PaLM 模型而收集的数据集包括高质量的过滤网页、维基百科、新闻文章、源代码和社交媒体对话。一个好处是,相同的数据集也用于训练谷歌的对话式 LaMDA 模型1.2T 参数 GLaM 模型

9-7 從頭開始構建LLM

图 5:用于训练 PaLM 模型的数据来源图(来源

预处理步骤

  • 使用在已知高质量网页集合上训练的分类器为网页分配质量分数。网页的抽样与其分数成正比,优先考虑质量较高的网页,但不会完全排除质量较低的网页。
  • 他们根据存储库中包含的许可证筛选了文件,但排除了许多 AI 组织不做的版权许可证。
  • 根据文件之间的编辑距离删除重复项。
  • 将数据分为训练数据和验证数据后,会采用数据污染,因为您希望模型预测与训练数据不同的数据,从而产生真正的验证损失。

我该如何处理这些信息?

除非你是大型科技公司的研究工程师,否则这些信息不会帮助你建立自己的神经网络模型,因为处理如此大量的数据和用于训练模型的基础设施并不是你能够立即拥有的。但以下几点可以作为你的参考:

  1. 语言建模的任务是预测给定一个标记序列的下一个标记,通过这个预测过程,我们希望我们的模型能够生成类似人类的文本。因此,不应执行典型的 NLP 预处理技术,如删除标点符号、小写、词干提取、删除停用词等。
  2. 相反,根据您收集的数据集应用基于启发式的清理(参见上面提到的列表)。
  3. 在这些情况下,描述统计学的专业知识确实至关重要,因为广泛的数据分析比任何事情都重要。有助于量化好的数据,为数据污染(训练和验证数据之间的重叠)提供足够的证据,以及模型在多大程度上记忆数据等等……
  4. 训练分类器对于清理和过滤数据集确实是一个好主意,即在这个领域开发人工智能模型应该是至关重要的。

第 2 步:标记和嵌入

9-7 從頭開始構建LLM

图 6:标记化、词汇形成和嵌入显示在一张图片中。请注意,选择使用哪个标记器和嵌入算法有很多种。

假设我们已经对数据做了所有能做的事情,即最大化高质量文本数据相对于低质量文本数据存在的可能性。现在是时候进行标记化了,这仅仅意味着将文本分解为标记(请注意,标记可以是字符、单词或子单词)。我们为什么要这样做?嗯,还记得吗,这就是语言建模任务的工作原理?(给定一个标记序列,预测下一个标记)。基本上,执行标记化时,您将获得两件事:

  1. 词汇表是所有唯一标记的集合
  2. 数据集的标记总数

在标记化之前,我们必须再次回答一系列问题:

  • 当单词后面有句号(“。”)和空格(大多数情况下)时,模型可以知道句子已经结束,对吗?但我们如何教会它文档已经结束呢?
  • 这时特殊标记就派上用场了。不同的 LLM 使用不同类型的特殊标记,这些标记通常彼此不同。
  • 我们应该在标记化之前或标记化之后何时添加特殊标记?如果在标记化之后并形成序列批次,那么是将其添加到开始或结束,还是两者兼而有之,还是将其添加到序列中的一些随机位置?这应该通过一些规则来完成吗?
  • 此外,我们如何教会我们的模型何时应该结束生成文本?例如,如果我希望我的模型回答一个问题,那么它应该在生成充分的答案后立即结束。请注意,您不必在模型的预训练阶段(语言建模)担心这个问题,您可以稍后教会您的模型何时应该结束响应。但对于零样本设置,我们需要考虑一下。
  • 随着词汇量增加,token 总数减少,反之亦然。是否有最佳规则说明优先考虑词汇量还是 token 数量?(事实证明你需要优先考虑词汇量)

让我们来探究一下大型法学硕士如何通过他们的工作来回答这个问题。

OpenAI 的 GPT 家族

OpenAI 的第一个版本的 GPT 使用字节对编码 (BPE) 来创建词汇表。基本上,它在训练语料库上进行了 40,000 次合并(如果您对 BPE 算法有所了解,这将很有意义)。遗憾的是,他们没有提到词汇表的大小或标记的总数,也没有提到特殊标记的详细信息。但 BPE 算法是您可以注意的算法。

在讨论标记化之前,GPT-2 解决了选择字节级语言模型还是字级语言模型的问题。通常,在将单词加载到神经网络模型中时,单词被输入为(转换为)嵌入向量(称为编码)。这确实是一个字级语言模型。而在字节级中,您有字节(回想一下,一个字节由 8 位(0 或 1)组成)而不是单词。因此,该模型根据给定的字节序列来预测下一个字节。您应该立即想到的问题是“当我们可以处理单词时,为什么还要考虑使用字节?”。两种语言模型都有各自的优缺点,但上述问题的答案可以通过一个差异表很好地回答。

9-7 從頭開始構建LLM

图 7:字节级和词级语言模型之间的差异。请注意,当前的字节级语言模型在大规模数据集(例如十亿词基准)上无法与词级语言模型相媲美

  • 词汇量和处理词汇表外 (OOV) 标记:简而言之,使用单词级标记化,词汇量的大小将更大,并且取决于数据集,同时任何不在词汇表中的未知单词(当我们使用测试数据集在各种任务上测试我们的模型时)都无法处理。另一方面,字节级标记化的词汇表大小固定为256,可以处理任何 Unicode 字符序列,包括多种语言的文本、表情符号和特殊字符,但在处理大规模数据集时性能会落后。

那么 GPT-2 选择了哪一个呢?它选择了使用字节级编码 (BPE) 算法进行子字级标记化,该算法兼具字节级和字级的优点。BPE 算法的工作原理是迭代合并语料库中最常见的连续字节对,直到达到预定义的词汇量。因此,在使用此特定的标记化算法(在某些特定规则下)进行标记后,GPT-2 的词汇量为 50,247 个标记。事实上,GPT-2 现在已经开源了这个词汇量和相应的标记器,以便你可以使用它来标记你的数据集(请注意,词汇量是固定的,即 50,247),他们将其命名为tiktoken

GPT-3 使用子词标记器,其词汇量固定为 50,247 个标记,该标记器是在 GPT-2(在 WebText 上)在其庞大的数据集语料库上开发的,从而为模型提供了 3000 亿个标记供训练。接下来,即在标记化之后,形成一个长度为 2048 个标记(上下文大小或块大小)的序列数组,如果文档小于 2048,则将其与由特殊标记分隔的另一个文档合并<|endoftext|>

GPT 不使用任何预训练的嵌入矩阵,而是初始化一个随机嵌入层并在训练时对其进行调整。这是有道理的,因为他们建立了自己的词汇表。

9-7 從頭開始構建LLM

图 8:字符级、单词级和子词标记化的示例。请注意,如果您有预制的标记器,那么您应该使用嵌入权重或从头开始训练它,因为嵌入矩阵形状取决于词汇量

谷歌的 540B PaLM 模型

在对质量数据和训练数据与评估数据之间的数据污染进行彻底的数据分析之后,就到了标记化的时候了。他们使用仅应用于训练数据的SentencePiece Tokenizer(内部使用 BPE 算法),该算法具有固定词汇表和 256k 个唯一标记(支持大量语言),总共创建了 7800 亿个标记。此外,这些标记被拆分成每个长度为 2048 的序列(与 GPT-3 相同)。如果同一序列中存在不同的输入样本(文档),则使用标记进行区分<eod>

  • 随后,通过输入嵌入矩阵(其大小由 (vocab_size, embedding_dimension) 给出)将独热编码标记转换为数值密集向量(嵌入)。经过网络和输出嵌入矩阵后,我们得到网络的输出,即大小为 (vocab_size, 1) 的向量,将其与词汇表进行比较以确定下一个输出词。
9-7 從頭開始構建LLM

图 9:通过各自的矩阵大小说明 token 在语言模型中的传播过程。如果 (H == D),则共享输入输出嵌入是可能的(来源

我可以对什么东西进行实验?

  • 这里要注意的一件重要事情是,如果您正在处理自己的数据集,那么您不必开发自己的标记器,而是可以使用具有固定词汇大小的开源标记器并将它们嵌入权重加载到您的模型中。
  • 因此,人们应该考虑使用tiktokenSentencePeice标记器对他们的模型进行实验。

步骤 3:模型架构

在深入细节之前,有必要知道这是一个任何人,甚至是普通人都可以带来创新的领域。例如,Alex Krizhevsky 创建的 AlexNet 是第一个赢得 ImageNet 竞赛的 CNN 模型架构。无论如何,回到主题,2017 年 NLP 领域发生了一个无人预料的突破。这是一篇题为“Attention is all you need”的研究论文,由谷歌发表,介绍了一种将改变神经网络理解文本方式的新架构,即 Transformers。在它推出后不久,RNN、LSTM 和 GRU 的世界就变得毫无用处,在短短几年内,每个开发的模型都以某种方式借用了 Transformer 的架构理念。例如,GPT 系列使用 Transformers 仅解码器架构,BERT 使用 Transformers 编码器,而 T5 框架同时使用编码器和解码器将自己构建为大型语言模型 (LLM)。理解长序列的能力及其并行化处理能力让 transformers 稳坐王座,这是以前基于 RNN 的架构未能实现的。

你可能还没有猜到,在深入了解大型语言模型 (LLM) 的架构细节之前,了解 Transformers 的工作原理非常重要。我建议你阅读jay alammar 博客中的 transformers 图解指南,以掌握它。

9-7 從頭開始構建LLM

图 10:Transformer 编码器-解码器架构与典型的 Transformer 解码器架构

OpenAI 的 GPT 家族

正如我之前提到的,GPT 系列使用仅解码器的 Transformers。GPT-1 模型有 12 个解码器块。解码器块还包括两个部分:自注意力层和前馈神经网络 (MLP)。以下列表总结了详细信息:

  • 仅解码器的 Transformer 具有 12 个解码器块,带有 12 个注意力头的掩蔽自注意力头(当前标记看不到未来标记的值),每个标记的输出大小(来自解码器块)为 768(嵌入大小)。对于 FFNN,隐藏层中的神经元数量为 3072(始终为 768*4)。
  • 高斯误差线性单元 (GELU) 用作激活函数和随机初始化位置嵌入矩阵(元素在训练时进行调整),而不是 Transformer 中提出的正弦版本。
  • 使用了 LayerNormalization,还采用了值 (0, 0.2) 之间的权重初始化、残差连接、嵌入和 dropout,正则化率为 0.1。

GPT-2 和 GPT-3 具有相同的配置,但使用了多少个解码器块以及其他内部细节的细节有所不同。让我们用他们自己的话来阅读:

9-7 從頭開始構建LLM

图 11:GPT-2 模型的超参数

对于 GPT-2:“我们的语言模型基于与 OpenAI GPT 类似的 Transformer 架构,并进行了修改,例如输入层规范化、添加最终层规范化和修改权重初始化。词汇量已扩展到 50,257,上下文大小增加到 1024 个标记,批处理大小更大,为 512。残差层在初始化时已缩放以提高性能。”以下是摘要

  • 与 GPT-1 相同,但有一些修改。层规范化被移至每个自注意块(预激活)的输入,而附加层规范则移至最终的自注意块
  • 在初始化时将残差层的权重缩放 1/√N 倍,其中 N 是残差层的数量。
  • 批次大小从 64 增加到 512,并且每个批次的序列长度现在为 1024 个标记,而不是 512 个标记。
9-7 從頭開始構建LLM

图 12:GPT-3 模型的超参数

对于 GPT-3:“我们使用与 GPT-2 相同的模型和架​​构,包括其中描述的修改后的初始化、预规范化和可逆标记化(删除标记化 / 预处理工件),不同之处在于我们在 Transformer 的各层中使用交替密集和局部带状稀疏注意模式,类似于稀疏 Transformer”

9-7 從頭開始構建LLM

图 13:Transformer-解码器架构超参数

在继续讨论之前,我认为有必要思考以下问题:

  • 研究人员如何决定选择超参数以及模型层的位置?
  • 就像在 GPT 的情况下一样,我们应该使用多少个解码器块,注意力头的数量选择,每个注意力头的头大小(每个标记的输出向量大小),标记的嵌入维度,FFNN 中隐藏层的数量,隐藏层的维数,尝试哪个激活函数等等需要决定。
  • 这些问题确实没有具体的答案,只能使用计算成本低廉的数据集进行实证尝试。通过每个小实验,你可以从所做的观察中拼出一些单词。例如,增加自注意力层可以让 token 之间进行更多的交流,减小 FFNN 的大小可以让 token 有更多时间思考它们从自注意力层中看到的内容,等等……
  • 此外,时不时会有研究论文发表,阐明他们对模型超参数进行的实验得出的推论,从而进一步提供明智的初始化。
  • 故事并没有就此结束,如果你知道 Transformer 的工作原理,那么自注意力层中也有一些超参数。此外,我们还需要决定上下文大小(序列块大小)以及一次输入到模型中的批次数量。

谷歌的 540B PaLM 模型

9-7 從頭開始構建LLM

图 14:PaLM 模型的超参数(来源

PaLM 也使用了相同的仅解码器的 Transformer,但进行了一些修改,以加快与性能并行的训练过程。

修改 1#:使用 SwiGLU 激活函数代替标准 ReLU、GeLU 或 Swish 激活函数

修改 2#:使用并行层而不是标准序列化公式,即

y = x + MLP(LayerNorm(x) + Attention(LayerNorm(x)) 而不是

y = x + MLP(LayerNorm(x + 注意力(LayerNorm(x)))

修改 3#:多查询注意

标准 Transformer 模型使用 k 个注意力头,每个注意力头将输入向量线性投影到形状为 [k, h] 的查询、键和值张量中。但是,这里的键/值投影在所有头之间共享(这在标准 Transformer 中不会发生),而查询投影保持独立。虽然这不会影响模型质量或训练速度,但它显著降低了自回归解码的成本,因为键/值张量可以在示例之间共享,从而使其在加速器硬件上更加高效。

修改 4#:在任何密集核(权重矩阵)或层规范中均未使用偏差,因为这增加了大型模型的训练稳定性。

  • 核权重(即,除了嵌入和层范数尺度之外的所有内容)用“扇入方差缩放”初始化,即 W
  • 不使用 dropout 层

思考和实验模型

  • 训练大型语言模型(LLM)通常需要做出牺牲,即排除一些好的细节或对其进行优化以便更快地进行训练。
  • 然而,超参数的选择的答案纯粹是统计性的,即在计算成本低廉的数据集上进行实验,如果结果有所改善,则通过提供推论找出导致这种改善的原因,并通过将成功的实验堆叠在一起来重复该过程。

步骤 4:训练细节

我们可以通过以下段落来总结整个训练的故事:

大数据被收集、清理、标记化、转换为序列,最后分成多批训练数据,准备输入模型。模型不会输入全部数据或所有批次,而是只将固定的一组批次逐一输入模型,从而节省计算机内存 (RAM)。因此,模型从收到的批次流中学习。一个 epoch 是一个循环,表示让模型查看整个数据的次数(2 个 epoch 表示模型查看了两次整个训练数据)。一个 epoch 中的一个步骤表示,由于我们要输入批次,因此进入模型输入管道的一个批次对应一个步骤。因此,批次总数等于每个 epoch 的步骤数。

这是众所周知的典型训练理论,但还有另一种有趣的模型训练方法。基本上,多次输入大量数据(例如 Common Crawl)是一项艰巨的任务,而且计算成本高昂。相反,LLM 研究人员所做的是,他们打乱训练数据的批次,并通过以下两种方式对批次进行抽样来训练模型:有放回地抽样一批或无放回地抽样一批。在这种情况下,唯一保留的超参数不是 epoch 或每 epoch 的步骤,而是一个名为“迭代”的新术语,表示从一批批次中抽取的随机批次数(6000 次迭代意味着我们正在抽取 6000 个随机批次)。此外,在每次迭代中,训练和验证损失并不是针对整个数据进行计算的(这在计算上同样耗费大量资源),而是在完成特定次数的迭代(称为评估间隔)后进行计算,并且只针对固定数量的批次(针对整个总体中的样本)进行计算,这称为评估迭代。

让我们来看看不同的 LLM 如何训练模型的故事:

OpenAI 的 GPT 家族

GPT-1

后传详情

  • Adam 的优化方案使用随机梯度下降作为后向传播算法,最大学习率为 2.5e-4,它会针对每个批次(而不是一组批次)更新参数。
  • 在前 2000 次更新中,学习率从零线性增加,并使用余弦计划退火至 0。

总体培训细节

  • 使用一组 64 个批次(经过打乱和随机抽样)进行 100 个时期的训练(因为图书语料库并不是很大,需要处理),每个批次的序列长度为 512 个标记。

GPT-3

反向传播细节

  • “Adam 的 β1 = 0.9、β2 = 0.95 和 𝝐 = 10−8,我们将梯度的全局范数剪裁为 1.0,并使用余弦衰减将学习率降至其值的 10%,超过 2600 亿个 token(超过 2600 亿个 token 后,训练继续以原始学习率的 10%)。前 3.75 亿个 token 有一个线性 LR 热身。我们还根据模型大小,在前 40 亿到 120 亿个训练 token 中,将批处理大小从较小的值(32k 个 token)逐渐线性增加到完整值。”

总体培训细节

  • 在训练期间(直到达到一个时期的边界)对数据进行不重复采样,以尽量减少过度拟合。每个批次都有 2048 个标记的序列。

谷歌的 540B PaLM 模型

后传详情

  • “该模型使用标准语言建模损失函数进行训练,该函数是所有标记的平均对数概率,没有标签平滑。我们还使用辅助损失 z loss = 10−4 · log2 Z 来鼓励 softmax 正则化器 log(Z) 接近 0。”
  • “我们在前 10,000 步中使用 10−2 的 Adafactor 学习率,然后以 1/ √ k 的速率衰减,其中 k 是步数。我们以 β1 = 0.9 的动量进行训练。二阶矩插值计算为 β2 = 1.0 − k −0.8,其中 k 是步数。”
  • 我们对所有模型使用全局范数梯度裁剪,值为 1.0。我们在训练期间使用动态权重衰减 lr = 2.0,其中 lr 是当前学习率。

总体培训细节

  • 他们在数据的一个时期内对所有三个模型进行训练(所有模型的打乱方式相同),并选择混合比例以避免在任何子组件中重复数据。
  • 训练期间批次大小会增加,批次中的每个数据样本都有 2048 个序列标记。

要点:

  • 较大的模型使用较大的批量大小,但需要较小的学习率。
  • 我们始终的目标是提高训练效率,让模型最大限度地学习,但有时我们需要选择一个而牺牲另一个。

有效学习的结论

总而言之,我们从收集和清理数据以及构建模型,到如何使用这些数据训练模型。虽然其中的一些细节可能会让你感到困惑,但如果你愿意开始自己构建 LLM 或帮助他人做同样的事情,那么你花在这篇文章上的时间是值得的。正如他们所说,经验胜于雄辩,你尝试从头开始构建语言模型,例如 GPT,然后你会看到本博客中讨论的细节(即,清理数据的方法、各种标记器嵌入算法的选择、构建自定义模型的可能性,以及训练和提高模型效率的有效方法)反映在你的实施中,以便你更好地创新。

RA/SD 衍生者AI训练营。发布者:chris,转载请注明出处:https://www.shxcj.com/archives/4201

Like (0)
Previous 2024-07-19 2:26 下午
Next 2024-07-19 2:31 下午

相关推荐

发表回复

Please Login to Comment
本文授权以下站点有原版访问授权 https://www.shxcj.com https://www.2img.ai https://www.2video.cn