Pre-training large language models

黎 浩然/ 5 10 月, 2023/ 序列模型/SEQUENCEMODEL, 机器学习/MACHINELEARNING/ 0 comments

“大型语言模型(LLM)的预训练”是一个复杂的过程,涉及许多关键步骤和概念。

  1. 预训练的概念
    • 预训练是大型语言模型学习语言深层统计表示的阶段。
    • 这一阶段,模型通过自监督学习,从海量的非结构化文本数据中学习。
    • 数据量可达GB、TB甚至PB级别,来源包括互联网抓取内容和专为语言模型训练组织的文本语料库。
  2. 训练数据处理
    • 训练数据需要经过处理以提高质量,处理内容包括减少偏见和移除有害内容。
    • 通常只有1-3%的数据被用于预训练。
  3. 预训练的目标
    • 在预训练阶段,模型权重根据训练目标进行更新,以减少损失。
    • 对每个输入token,编码器生成一个嵌入向量或向量表示。
  4. 预训练的计算需求
    • 预训练需要大量计算资源,通常需要使用GPU。
  5. Transformer模型的变体
    • 有三种Transformer模型变体:仅编码器模型、编码器-解码器模型和仅解码器模型。
    • 每种变体根据不同的训练目标进行训练,因而适用于不同的任务。
  6. 不同模型的预训练方法
    • 仅编码器模型(如BERT和RoBERTa):使用掩码语言建模进行预训练,通过随机掩蔽输入序列中的token并来重构原始句子。Sentiment Analysis, Named Entity Recognition, Word Classification
    • 仅解码器模型(如GPT和BLOOM):使用因果语言建模进行预训练,目标是预测基于先前序列的下一个token。Text Generation, Other Emergent Behavior
    • 编码器-解码器模型(如T5和BART): 使用序列到序列的结构,预训练目标各不相同,例如T5使用跨度腐败方法。Translation, Text Summarization, Question Answering
  7. 模型选择
    • 选择特定模型取决于需要执行的任务细节。
    • 大型模型通常更能有效完成任务,趋势是开发越来越大的模型。
  8. 模型增长的挑战
    • 虽然模型规模增加可以提高性能,但训练这些巨大的模型既困难又昂贵,无法持续进行

总的来说,大型语言模型的预训练是一个涉及数据处理、学习目标和计算资源的复杂过程。不同的模型结构和预训练方法使得各种模型适用于不同的NLP任务。随着模型规模的增长,虽然性能有所提升,但同时也带来了训练成本和资源的挑战。

在训练阶段,Transformer 解码器的处理流程与推理阶段有所不同。这里的关键差别在于使用了“教师强制”(teacher forcing)策略, 其中解码器在每一步都接收到正确的目标序列作为输入,而不是依赖于它自己之前的输出。以下是训练阶段的详细流程:

  1. 初始输入
    • 解码器接收编码器的输出,这与推理阶段相同。
    • 初始输入还包括目标序列的起始部分,通常是一个起始符号(如 <start>)。
  2. 教师强制
    • 在每个训练步骤中,解码器的输入包括编码器的输出和目标序列的一个已知部分。这个已知部分是真实的目标序列,而不是由模型生成的。
    • 例如在机器翻译训练中,如果目标句子是“我爱学习”,在某个训练步骤中,解码器可能接收“I love”作为输入,并且需要预测“study”。
  3. 逐步预测
    • 在每一步,解码器预测下一个token的概率分布。例如,给定“我爱”作为输入,它可能需要预测“学习”作为下一个token。
    • 解码器的预测结果(概率分布)随后用于计算损失,通常是与真实的下一个token(在这个例子中是“学习”)之间的差异。
  4. 训练迭代
    • 这个过程在整个目标序列上重复进行。每个时间步解码器预测当前时间步的token并使用实际的下一个token来计算损失和更新模型。
  5. 目标
    • 训练的目标是最小化预测输出和真实目标序列之间的差异,从而使模型能够更准确地生成期望的输出。

通过这种方式,解码器在训练过程中学习如何根据输入序列和已知的目标序列的上下文来预测下一个 token 。与推理阶段相比,训练阶段通过直接提供正确的输出序列,帮助模型更快地学习和适应任务。这种方法也有助于提高模型在实际应用中的性能和准确性。

在推理(Inference)阶段,Transformer 解码器对于每一个输入序列会进行多次的输入和输出过程,以逐步生成整个输出序列。这个过程通常被称为“自回归”(autoregressive)生成,每一步生成一个token,然后将其作为下一步的输入。以下是这个过程的详细描述:

  1. 初始输入
    • 解码器初始输入通常包括编码器输出和一个起始符号(如<start> 或特定token).
  2. 逐步生成
    • 在每一步,解码器基于当前已生成的序列(包括起始符号和之前生成的token)和编码器的输出来预测下一个token。
    • 预测通常是基于生成的概率分布,可以使用不同的策略选择下一个token,如选择概率最高的token(贪婪解码)或使用概率采样。
  3. 迭代过程
    • 生成的新token被添加到已有序列的末尾。
    • 这个更新后的序列再次作为输入送入解码器,用于生成下一个token。
  4. 终止条件
    • 达到某个终止条件,如生成了特定的结束符号(如 <end>)或达到最大长度限制.
  5. 最终输出
    • 连续生成的token形成了最终的输出序列,例如完整的翻译句子或生成的文本。

通过这种方式,解码器在训练过程中学习如何根据输入序列和已知的目标序列的上下文来预测下一个 token 。与推理阶段相比,训练阶段通过直接提供正确的输出序列,帮助模型更快地学习和适应任务。这种方法也有助于提高模型在实际应用中的性能和准确性。

Share this Post

Leave a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注

*
*