自学内容网 自学内容网

大模型基础

现在网络太浮躁,对于ai,我们只想使用它们,却不知道具体的原理,所以然。这是一个AI草根的自我救赎,补充基础知识,概念

GitHub - datawhalechina/so-large-lm: 大模型基础: 一文了解大模型基础知识

一。引言

1)什么是语言模型

语言模型记载着词与词之间的关系,比如说apple与mac之间的关系(语言模型(LM)的经典定义是一种对词元序列(token)的概率分布。)

  • 语言模型是序列 x1:L 的概率分布 p。
  • 直观上,一个好的语言模型应具有语言能力和世界知识。
  • 自回归语言模型允许有效地生成给定提示 x1:i 的补全 xi+1:L。
  • 温度可以用来控制生成中的变异量。

2)语言模型的历史

大模型的进步史,就是语言模型的不断精进

从一开始的”n-gram模型“到“神经语言模型”(lstm,transformer)

限制语言模型的是“记忆力”,上下文长度,等因素,就好比,在无限的知识库上,apple. 与。banana都是一样的概率

3)大语言模型的能力

  • 单一的大型语言模型是一个万事通(也是一无所长)。它可以执行广泛的任务,并且能够具备上下文学习等新出现的行为。
  • 它们在现实世界中得到广泛部署。
  • 大型语言模型仍然存在许多重要的风险,这些风险是开放的研究问题。
  • 成本是广泛获取的一大障碍

二。大模型的能力

1)概述

首先,我们需要明白,GPT-3并未明确针对这些任务进行训练,它只是作为一个语言模型,被训练来预测下一个词。然而,即便没有“特别努力”,GPT-3平均来看,仍然可以在广泛的NLP任务中做得不错。

2)语言模型的适应性

从语言模型到任务模型的转化 

我们使用“适应(Adaptation)”一词来指代将语言模型转化为任务模型的过程。这个过程需要以下两个输入:

  1. 任务的自然语言描述
  2. 一组训练实例(输入-输出对)

两种适应的方法:训练(微调)或者 上下文提示学习

在这个选择过程中,训练可能会因为过拟合而变得具有挑战性(例如,想象一下根据5个例子微调一个有1750亿参数的模型)。如何有效进行训练将会在这门课程之后中进行讨论。现在,我们将先满足于使用提示进行GPT-3的适应。但是值得注意的是,提示的局限性在于我们只能利用少量的训练实例(一般情况只能塞进一个提示的数量)。这种输入的局限性由于Transformer自身的局限性导致的,模型可输入的长度具有约束(一般来讲是2048个tokens)。

困惑度(Perplexity)是一个重要的指标,是自然语言处理和语言模型中的一个重要概念,用于衡量语言模型的性能。它可以解释为模型在预测下一个词时的平均不确定性。简单来说,如果一个模型的困惑度较低,那么它在预测下一个词的时候就会更加准确。

  • GPT-3在广泛的标准NLP基准测试和一次性任务上进行了评估。
  • GPT-3可以表现得极好或者非常普通。
  • 增加模型的大小和示例的数量都有助于提高性能。
  • 有一些启发式的方法可以将语言模型适应到感兴趣的任务。
  • 但是为什么会有这样表现,没有人知道。

三。模型架构

1)大型语言模型是如何构建的,分别是分词和模型架构:

  • 分词(Tokenization):即如何将一个字符串拆分成多个词元。
  • 模型架构(Model architecture):我们将主要讨论Transformer架构,这是真正实现大型语言模型的建模创新。

 2)分词

语言模型 p 是建立在词元(token)序列的上的一个概率分布输出,其中每个词元来自某个词汇表$V$,如下的形式。

[the, mouse, ate, the, cheese]

然而,自然语言并不是以词元序列的形式出现,而是以字符串的形式存在(具体来说,是Unicode字符的序列),比如上面的序列的自然语言为“the mouse ate the cheese”。

分词器将任意字符串转换为词元序列: 'the mouse ate the cheese.' ⇒[the,mouse,ate,the,cheese,.]

 字符串:所以字母、符号和空格都是这这个字符串的一部分。 词元序列:由多个字符串组成(相当于把一个字符串分割为了多了子字符串,每个子字符串是一个词元)

分词就是将词分开从而对词进行单独的编码

分词方法:基于空格的分词,BPE分词器,Unigram model(定义一个目标函数来捕捉一个好的分词的特征,这种基于目标函数的分词模型可以适应更好分词场景)

3)模型架构

到目前为止,我们已经将语言模型定义为对词元序列的概率分布 p(x1,…,xL),我们已经看到这种定义非常优雅且强大(通过提示,语言模型原则上可以完成任何任务,正如GPT-3所示)。然而,在实践中,对于专门的任务来说,避免生成整个序列的生成模型可能更高效。

语言模型分类:对于语言模型来说,最初的起源来自于Transformer模型,这个模型是编码-解码端 (Encoder-Decoder)的架构。但是当前对于语言模型的分类,将语言模型分为三个类型:编码端(Encoder-Only),解码端(Decoder-Only)和编码-解码端(Encoder-Decoder)。因此我们的架构展示以当前的分类展开。

编码端:如BERT、RoBERTa等。这些语言模型生成上下文向量表征,但不能直接用于生成文本。通常用于分类任务(也被称为自然语言理解任务)

解码器(Decoder-Only)架构:解码器架构的著名模型就是大名鼎鼎的GPT系列模型。这些是我们常见的自回归语言模型

编码-解码端(Encoder-Decoder)架构:编码-解码端架构就是最初的Transformer模型,其他的还有如BART、T5等模型。

4)语言模型理论

4.1)基础架构

首先,我们需要将词元序列转换为序列的向量形式,这一步称为词嵌入。通过嵌入矩阵,将每个词元映射到一个向量空间中。词嵌入可以捕捉到词元之间的语义关系,是构建深度学习模型的关键。

嵌入的函数形式为:

EmbedToken(x_{1:L}: V^{L}) → ℝ^{d×L}

该函数通过嵌入矩阵 $E ∈ ℝ^{|V|×d}$ 生成每个词元的向量表示。词元序列 $x_{1

}$ 通过该映射被转换为上下文无关的词向量序列。接下来,语言模型会对这些向量进行处理,生成上下文相关的嵌入。

4.2)序列模型

在语言模型中,序列模型的任务是将上下文无关的词嵌入转化为上下文相关的词向量。常见的序列模型包括基于前馈网络、递归神经网络(RNN)和Transformer。

  1. 前馈网络(FeedForwardSequenceModel): 前馈网络通过对一定长度的上下文进行处理来生成新的词向量。它适用于简单的序列建模,但不适合长依赖关系的建模。

  2. 递归神经网络(RNN): RNN是一种序列模型,通过递归地计算隐藏状态来捕捉词元之间的依赖关系。RNN存在梯度消失问题,LSTM和GRU是RNN的改进版本,用来解决长依赖关系建模的问题。

  3. 双向RNN(Bidirectional RNN): 双向RNN从左到右、从右到左同时处理序列,可以更好地捕捉上下文中的依赖信息。

  4. Transformer模型: Transformer通过自注意力机制实现序列建模,是目前最先进的序列模型。与RNN不同,Transformer模型可以并行处理整个序列,大幅提高了训练效率。

4.3)注意力机制和自注意力机制

Transformer模型的核心是注意力机制。注意力机制通过对序列中的每个词元计算“相关性”分数,生成基于上下文的向量表示。自注意力机制是注意力机制的特殊形式,它计算每个词元与序列中其他词元的相关性,从而捕捉全局信息。

通过将多个注意力头(Multi-Head Attention)结合在一起,Transformer能够从多个角度分析词元之间的关系,生成更丰富的表示。

4.4)残差连接和归一化

Transformer引入了残差连接层归一化,使得模型在深度增加时仍然可以有效训练。残差连接通过在每一层之后保留输入,确保梯度可以顺利反向传播,避免梯度消失问题。层归一化则对每一层的输出进行归一化,确保数值稳定。

4.5)位置嵌入

为了捕捉序列中词元的位置信息,Transformer引入了位置嵌入。位置嵌入通过将位置编码与词嵌入相加,赋予模型位置信息,使得模型能够理解词元在句子中的顺序。

4.6)GPT-3 架构

GPT-3 是基于 Transformer 的解码器模型,架构可以简单表示为多个 Transformer 块的堆叠。GPT-3 的关键组件包括词嵌入层、自注意力机制、前馈网络、残差连接和位置嵌入。GPT-3通过将这些组件组合在一起,形成一个强大的语言模型。

总结:通过引入自注意力机制、残差连接和位置嵌入等技术,Transformer模型成为了当前语言建模的核心架构。GPT系列模型作为解码器架构的代表,展示了语言模型在生成任务中的强大能力。

四。新的模型架构

在第3章中,我们讨论了神经语言模型的基础,包括如何将token序列映射到上下文嵌入。GPT-3是一个经典例子,它通过堆叠96层Transformer block来处理token序列:

GPT-3(x1:L)=TransformerBlock96(EmbedTokenWithPosition(x1:L))\text{GPT-3}(x_{1:L}) = \text{TransformerBlock}^{96}(\text{EmbedTokenWithPosition}(x_{1:L}))GPT-3(x1:L​)=TransformerBlock96(EmbedTokenWithPosition(x1:L​))

每个Transformer block包含自注意力层和前馈层。这种稠密的Transformer模型是大语言模型开发的主流架构,但它在规模扩展时面临挑战,如需要更多的计算资源、网络带宽等限制。

为了解决这些问题,我们探讨了两种新的模型架构:

  1. 混合专家模型:该模型构建了一个专家系统,每个输入只激活一部分专家,减少了计算资源的使用。这种架构类似于由不同领域专家组成的团队,每个专家在特定任务上表现出色。

  2. 基于检索的模型:这类模型利用外部数据存储库,根据输入检索相关信息来生成输出。它类似于回答问题时进行网络搜索,通过参考相关文档得到答案。

4.1 混合专家模型

4.1.1 基础知识

混合专家模型的核心思想是为每个输入分配不同的专家,使模型根据输入选择性地激活某些专家,减少不必要的计算。基本思路是通过门控函数选择特定的专家,并通过专家的组合生成最终的输出。

为了节省计算,门控函数可以选择前两位最相关的专家,并只对这些专家进行前向传播和反向传播。这样大大提高了模型的效率。

4.1.2 Sparsely-gated Mixture of Experts

在语言模型中,混合专家思想被应用于Transformer架构的每一层。通过隔层使用MoE(混合专家)前馈网络,进一步提升了大模型的计算效率。

此外,为了保持专家之间的负载平衡,模型使用了一种负载均衡损失,使得每个专家都能被均匀使用,避免计算资源浪费。

4.1.3 Switch Transformer

Switch Transformer是另一种稀疏门控的混合专家模型,它通过选取top-1的专家进一步减少了计算量,达到了比T5-XXL快4倍的训练速度。

4.1.4 BASE layers

BASE层通过对batch中的token进行联合优化,将负载均衡作为约束条件进行专家分配,提升了模型的稳定性。

4.1.5 Generalist Language Model (GLaM)

GLaM是一个拥有1.2万亿参数的模型,它使用64名专家和64层Transformer。在处理每个token时,GLaM只激活大约8%的参数,从而极大降低了计算成本。

4.1.6 FacebookMoE

Facebook的MoE模型通过使用512名专家,构建了一个具有1.1万亿参数的语言模型。它在多个任务上的性能优异,但在处理性别偏见等问题时遇到了一些挑战。

4.1.7 去中心化混合专家

去中心化混合专家模型探索了如何通过分布式计算的方式训练大型语言模型,例如利用志愿者的PC资源来分布式训练模型,这极大降低了训练成本。

4.2 基于检索的模型

基于检索的模型通过在存储库中检索相关信息,生成更加准确和上下文相关的输出。这种方法在知识密集型任务(如问答任务)中非常有效。

4.2.1 Retrieval-augmented Generation (RAG)

RAG模型通过检索相关文档并将其与输入结合,生成最终的输出。该方法在开放领域问答等任务中表现出色。

4.2.2 RETRO

RETRO模型使用了一个包含2万亿token的存储库,并基于32个token块进行检索。在多项语言建模任务中取得了优异成绩。

总结

随着模型规模的不断增长,传统的稠密Transformer架构面临计算和通信瓶颈。混合专家模型和基于检索的模型通过稀疏激活和外部数据参考,为扩展大语言模型提供了新的思路。这两种方法在减少计算资源、提高模型效率的同时,也展示了在实际任务中的出色表现。

五。大模型的数据

揭示大模型开发的第一层洋葱皮

六。模型训练

在上一章中,我们讨论了大语言模型的架构,如GPT、BERT、T5等。在本章中,我们将探讨如何训练这些大模型。训练过程分为两个部分:目标函数优化算法

6.1 目标函数

我们讨论三类语言模型的目标函数:

  1. Decoder-only 模型(例如,GPT-3):使用单向上下文嵌入,生成token序列。
  2. Encoder-only 模型(例如,BERT):计算双向上下文嵌入,主要用于理解任务。
  3. Encoder-decoder 模型(例如,T5):将输入编码为上下文嵌入,再通过解码器生成输出。

6.1.1 Decoder-only 模型

自回归语言模型通过条件概率公式 $p(x_i \mid x_{1

})$ 生成token序列。模型的训练目标是最大化训练数据的对数似然:O(θ)=∑x∈D∑i=1L−log⁡pθ(xi∣x1:i−1).O(\theta) = \sum_{x \in D} \sum_{i=1}^L -\log p_\theta(x_i \mid x_{1:i-1}).O(θ)=x∈D∑​i=1∑L​−logpθ​(xi​∣x1:i−1​).

6.1.2 Encoder-only 模型

BERT 通过两个目标函数训练:

  1. 掩码语言模型(MLM):随机掩盖输入中的15%单词,要求模型预测被掩码的token。
  2. 下一句预测(NSP):预测两个句子是否为连续句对。

BERT通过引入 $\text{[CLS]}$ 和 $\text{[SEP]}$ 特殊token进行句子对分类任务。BERT-large有24层Transformer,总参数为355M。

改进版 RoBERTa 删除了NSP目标,使用更多数据并延长训练时间,使其在多个任务中超过BERT。

6.1.3 Encoder-decoder 模型

BART和T5是常见的编码器-解码器模型。

  • BART 使用变换操作,如掩码、子句打乱等来进行去噪自编码训练。
  • T5 将所有NLP任务统一为“Text-to-Text”格式,并发现“替换span”的预训练目标效果最好。

6.2 优化算法

优化语言模型时,我们主要通过随机梯度下降(SGD)和其他高级优化算法进行训练。

6.2.1 随机梯度下降(SGD)

SGD的更新公式如下:

θt←θt−1−η1∣Bt∣∑x∈Bt∇θ(−log⁡pθ(x)).\theta_t \leftarrow \theta_{t-1} - \eta \frac{1}{|B_t|} \sum_{x \in B_t} \nabla_\theta (-\log p_\theta(x)).θt​←θt−1​−η∣Bt​∣1​x∈Bt​∑​∇θ​(−logpθ​(x)).

为了更快收敛且稳定,常结合动量、学习率调度等方法。

6.2.2 Adam 优化器

Adam通过引入动量和自适应步长来改进SGD。它结合一阶和二阶动量,用以下步骤更新参数:

  1. 计算梯度 $g_t$。
  2. 更新动量 $m_t$ 和二阶动量 $v_t$。
  3. 对偏差进行修正,最终更新参数。

6.2.3 AdaFactor

AdaFactor减少了存储占用,通过存储行和列的和来代替完整的矩阵,适合大模型如T5的训练。

6.2.4 混合精度训练

混合精度训练使用FP16减少存储需求,同时保持主权重在FP32中。损失缩放技术用于解决FP16下数值不稳定的问题。

6.2.5 学习率和初始化

  • 需要通过学习率预热和衰减来避免梯度不稳定。
  • 使用特定的初始化方案(如Xavier初始化)能帮助模型快速收敛。

6.2.6 GPT-3 训练参数

GPT-3的训练使用了Adam优化器、梯度剪裁、余弦学习率衰减和批量大小的逐步增长策略,帮助其训练稳定且高效。

总结

本章讨论了语言模型的训练目标和优化算法。随着模型规模的增大,优化算法和存储策略显得尤为重要,如Adam、混合精度训练等方法能够有效提高大模型的训练效率。

七。

 


原文地址:https://blog.csdn.net/m0_57057282/article/details/142852185

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!