创建自己的大语言模型

本文翻译自Step-by-Step Guide to Creating Your Own Large Language Model。从大语言模型的基本概念开始,逐步介绍如何创建自己的大语言模型。

什么是大语言模型(LLM)

大语言模型是先进的人工智能系统。它能够通过复杂的神经网络(比如 transform)生成人们可以接受、理解的文本。它可以生成内容、翻译语言、回答问题、参与对话等,这使得它在各个行业都具备广泛的应用,包括客服和数据分析。

  • 自回归 LLM(Autoregressive LLMs):根据前面的单词预测下一个单词,这使得它非常适合文本生成的任务。
  • 自动编码的 LLM(Autoencoding LLMs):专注于编码和文本重建,擅长情感分析和信息任务检索等任务。
  • 混合 LLM(Hybrid LLMs ):结合上述两种方法的优势,为复杂的应用提供通用的解决方案。

从架构本质来看,Autoencoding LLMs 最典型的代表是 BERT。这类模型的核心特点是它们可以同时看到输入文本的全部内容,而不是像自回归模型那样只能看到之前的文本。这就像是一个人在做完形填空题 - 虽然某些词被遮住了,但是可以通过上下文的完整信息来推断缺失的部分。 [译注]

LLM 通过大量的来自于各个数据源的文本,学习它们的 语法规则,亦如通过阅读大量的书籍来学习语言。
一旦训练完成,他们可以基于已经习得的知识,写作、回答问题、参与对话。

比如,LLM 可以根据阅读太空冒险故事中的知识,创建一个关于太空的故事,或者通过回顾生物学文本中的信息来解释光合作用。

构建自己的 LLM

LLM 的数据管理

最近的 LLM(比如 Llama 3 和 GPT-4)使用了大量的数据进行训练。
Llama 3 使用了 1.5 万亿个 token 进行训练,而 GPT-4 使用了 6.5 万亿个 token 进行训练。

这些数据集来自不同的环境,包括社交媒体(140 万亿个 token)和私人数据,涵盖数百个 TB 到多个 PB 的数据量。这种广泛的训练确保模型能够深入理解语言,涵盖各种模式、词汇和上下文。

数据预处理

在为 LLM 整理数据时,清理和结构化之后,需要通过 tokenization、embedding 和注意力机制将数据转换成模型可以学习的格式。

  • Tokenization:将文本分割成单词或子词,使得模型可以有效地处理和理解每个部分。

  • Embedding: 将客户评论转换为步骤情感和含义的数值向量,帮助模型分析、反馈并改进。

  • Attention: 关注句子中的重要部分,确保模型可以精确的抓取关键情感,例如区分产品质量和服务问题。

这三个机制协同工作的方式是:首先通过 tokenization 将文本分解成基本单位,然后使用 embedding 将这些单位转换为计算机可以处理的数值形式,最后通过 attention 机制确定不同部分的重要性,从而做出准确的理解和判断。就像是一个精密的翻译系统,不仅要认识每个字(tokenization),理解它们的含义(embedding),还要把握它们在整体语境中的重要性(attention)。 [译注]

LLM 训练循环

数据准备

  1. 数据摄取:从各个数据源收集并加载数据。
  2. 数据清理:消除噪声、处理丢失数据并编辑敏感信息。
  3. 标准化:标准化文本,处理分析数据,并确保数据一致性。
  4. 分块:将大文本分割成可管理的块,同事保留上下文。
  5. Tokenization:将文本分割成单词或子词,使得模型可以有效地处理和理解每个部分。
  6. 加载数据:有效加载和洗牌数据以优化训练。

数据准备过程感觉是少了 Embedding 的部分。网络最终能够理解的输入,应该也是 Embedding 后的结果。 [译注]

损耗计算

  1. 计算损失:使用损失函数计算预测值和真实值之间的差异,将这种差异转化为损失值或者误差值。
  2. 性能指标:高损失意味着低准确性;低损失意味着和真实目标更好的对齐。

超级参数调优

  1. 学习率:控制模型在训练过程中调整参数的速度。太高可能会导致模型在训练过程中震荡,太低可能会导致模型收敛缓慢。
  2. 批量大小:每次迭代中使用的样本数量。批量大小太小可能会导致训练不稳定,批量大小太大可能会导致训练速度变慢。

应该还包括正则化、激活函数、残差连接等调优手段。 [译注]

并行化和资源管理

  1. 数据并行化:将数据集拆分到多个 GPU 上并行计算,以加快处理速度。
  2. 模型并行化:将模型划分到 GPU 之间,以处理更大的模型。
  3. 梯度检查点:通过选择性的存储中间结果以减少训练过程中的内存消耗。

迭代和 Epochs

  1. 迭代:处理批量数据,更新每次的权重。
  2. Epochs:完成数据集的传递,每次遍历都优化模型参数。
  3. 监控:跟踪每个 epoch 之后的损失和准确率等指标,以防止过度拟合。

一次 epoch 表示整个训练数据集被用来训练模型一次。换句话说,在一个 epoch 内,模型会处理训练集中每一个样本一次。Iterations 是指在一个 epoch 中更新参数的次数,等于总样本数除以批次大小。[译注]

LLM 评估

在训练之后,评估 LLM 的性能,以确保其符合标准。常用的行业标准基准测试包括:

  • MMLU(Massive Multitask Language Understanding):大规模多任务语言理解,评估自然语言理解和广泛主题上的推理能力。
  • GPQA(General Purpose Question Answering):通用问答,测试模型处理跨域、复杂问题能力。
  • MATH:通过解决多步骤问题来测量模型的数学推理。
  • HumanEval:评估模型生成准确、功能性代码的能力,以评估编码熟练程度。
  1. MMLU(Massive Multitask Language Understanding):
    类型: 多任务基准
    目标: 评估模型在各种语言理解任务上的表现,涵盖了多个领域,如数学、科学、历史等。
    数据集: 包含多种类型的问题,通常要求模型理解和生成语言,涉及从简单的问答到复杂的推理任务。
  2. GPQA(Generalized Pre-trained Question Answering):
    类型: 问答基准
    目标: 测试模型在回答基于文本的问题上的能力,包括对未见过的内容或样本的泛化能力。
    数据集: 通常包含开放领域的问题,模型需要从上下文中提取相关信息来生成答案。
  3. MATH:
    类型: 数学问题解决基准
    目标: 专注于评估模型解决数学问题的能力,包括基本算术、代数、几何等问题。
    数据集: 包含各种难度级别的数学题目,旨在考察模型的推理和计算能力。
  4. HumanEval:
    类型: 编程基准
    目标: 设计用于评估代码生成模型(如 OpenAI 的 Codex)在自动编写 Python 函数上的能力。
    数据集: 包含函数描述及其对应的目标函数,测试模型理解问题并生成有效代码的能力。 [译注]

在为特定任务微调 LLM 时,指标应与应用程序的目标保持一致。例如,在医疗环境中,可以优先考虑将疾病描述与代码匹配的准确性。

© 2025 YueGS