基础
用于语言建模的最常见架构是 Transformer 架构,由 Vaswani 等人在著名论文《Attention Is All You Need》中提出。我们不会在这里讨论该架构的具体细节,因为我们必须讨论导致并促成其创建的所有旧技术。Transformer 使我们能够训练具有惊人推理能力的大型语言模型 (LLM),同时保持架构足够简单,以便机器学习新手可以开始训练/使用它们。
用于训练和构建 Transformer 模型的最常见语言是 Python,这是一种非常高级(即远离原始机器代码)的语言。这使得外行人很容易熟悉该过程。最流行的库是 HuggingFace Transformers,它是当今几乎每个 LLM 培训师的支柱。
本质上,LLM 是一种有损文本压缩形式。我们创建具有随机值和参数的张量(多维矩阵),然后向其输入大量文本数据(以 TB 为单位!),以便它们能够学习所有数据之间的关系并识别它们之间的模式。所有这些模式都存储在我们随机初始化为概率的张量中 - 模型会学习一个特定单词后面跟着另一个单词的可能性,依此类推。LLM 的一个非常高级的定义是“将一种语言(例如英语)的概率分布压缩成一组矩阵。”
例如,如果你在 LLM 中输入“How are”,它会计算下一个单词出现的概率。例如,它可能会为“you?”分配 60% 的概率,“things”分配 20% 的概率,等等。
上面讨论的随机初始化在很大程度上不适用于我们,因为它非常昂贵(我们说的是大型模型的数百万美元)。本文将介绍如何微调模型
- 即采用预先训练的模型并为其提供少量数据(通常为几 MB),以使其行为与您所想的任何任务保持一致。例如,如果您想要一个编码助手模型,您可以根据编码示例对模型进行微调,等等。
Transformer 架构
了解您正在处理的内容始终是一种很好的做法,尽管对于微调目的而言这并不是绝对必要的,因为您将运行调用 Transformers 库的类的脚本。
当然,最好的来源是《Attention Is All You Need》这篇论文。它介绍了 Transformer 架构,是一篇非常重要的论文。不过,你可能需要先阅读这些,因为作者假设你已经对神经网络有了基本的了解。我建议按顺序阅读这些:
论文太难读?
你并不孤单。学者们往往会故意混淆他们的论文。你可以随时查找每个主题的博客文章或文章,它们往往会提供易于理解的解释。一个很好的资源是 HuggingFace 博客文章。
训练基础知识
训练 LLM 基本上有三 (3) 种方法:预训练、微调和 LoRA/Q-LoRA。
预训练
预训练涉及几个步骤。首先,收集大量文本数据集(通常以 TB 为单位)。接下来,选择或创建专门用于当前任务的模型架构。此外,训练标记器以适当处理数据,确保它能够有效地对文本进行编码和解码。然后使用标记器的词汇表对数据集进行预处理,将原始文本转换为适合训练模型的格式。此步骤涉及将标记映射到其相应的 ID,并合并任何必要的特殊标记或注意掩码。数据集预处理后,即可用于预训练阶段。
在预训练期间,模型会利用大量数据来学习预测句子中的下一个单词或填补缺失的单词。此过程涉及通过迭代训练程序优化模型的参数,以最大限度地提高根据上下文生成正确单词或单词序列的可能性。
为实现此目的,预训练阶段通常采用自监督学习技术
的变体。向模型提供部分掩蔽的输入序列,其中某些标记被故意隐藏,并且模型必须根据周围上下文预测那些缺失的标记。通过以这种方式对大量数据进行训练,模型逐渐对语言模式、语法和语义关系有了丰富的理解。这种特定方法用于掩蔽语言建模。然而,当今最常用的方法是因果语言建模。与掩蔽语言建模(其中某些标记被掩蔽并且模型预测那些缺失的标记)不同,因果语言建模侧重于根据前面的上下文预测句子中的下一个单词
。
初始预训练阶段旨在捕捉一般语言知识,使模型成为熟练的语言编码器。但毫不奇怪,它缺乏有关特定任务或领域的具体知识。为了弥补这一差距,预训练之后是后续的微调阶段
。
微调
在初始预训练阶段之后,模型会学习一般的语言知识,然后通过微调我们可以专门化模型的功能,并在更窄、特定于任务的数据集上优化其性能
。
微调过程涉及几个关键步骤。首先,收集特定于任务的数据集,其中包含与所需任务相关的标记示例。例如,如果任务是指令调整,则收集指令-响应
对的数据集。微调数据集的大小明显小于通常用于预训练的数据集。
接下来,使用之前学习到的参数初始化预训练模型。然后在特定任务数据集上训练模型,优化其参数以最小化特定任务的损失函数(即模型与期望结果的“偏差”程度)。
在微调过程中,使用基于梯度的优化算法(例如随机梯度下降 (SGD)或Adam )调整预训练模型的参数。通过在模型层中反向传播损失来计算梯度,从而使模型能够从错误中学习并相应地更新其参数。
为了增强微调过程,可以采用其他技术,例如学习率调度、正则化方法(如dropout或权重衰减)或提前停止以防止过度拟合。这些技术有助于优化模型的泛化能力,并防止其过于紧密地记忆训练数据集。
低秩自适应(LoRA)
微调的计算成本很高,需要数百 GB 的 VRAM 来训练数十亿参数的模型。为了解决这个特定问题,提出了一种新方法:低秩自适应。与使用 Adam 对 OPT-175B 进行微调相比,LoRA 可以将可训练参数的数量减少 10,000 倍,并将 GPU 内存需求减少 3 倍以上。请参阅论文《LoRA:大型语言模型的低秩自适应》和博客文章《HuggingFace PEFT:在低资源硬件上对十亿规模模型进行参数高效微调》。
对于普通消费者来说,将内存需求减少 3 倍仍然是不可行的。幸运的是,引入了一种新的 LoRA 训练方法:量化低秩自适应 (QLoRA)。它利用 bitsandbytes 库对语言模型进行即时和近乎无损的量化,并将其应用于 LoRA 训练过程。这大大减少了内存需求 - 使得在 2 个 NVIDIA RTX 3090 上训练多达 700 亿个参数的模型成为可能!相比之下,通常需要超过 16 个 A100-80GB GPU 来微调该大小的模型;相关成本将是巨大的。
本系列的下一部分将重点介绍微调和 LoRA/QLoRA 方法。
微调
如前所述,微调的成本可能很高,具体取决于您选择的模型大小。您通常需要至少 6B/7B 个参数。我们将介绍一些获取训练计算的选项。
如何系统的去学习大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。