LLM生命周期
1.Using LLMs
第一种方式: Public API or Private API.
第二种方式: 感谢开源模型,Deploy or Using them via private API.
2.Stage1:BUILDING
1.准备数据(Data preparation & Sampling)
2.实现注意力机制(Attention mechanism)
3.LLM的架构
一、数据
数据的质量与数量: 训练数据,数据的质量比数量更重要。
数据准备和采样: 确保模型能够接触到有代表性和多样性的数据。注意采样前还需要对数据进行清洗,去除噪声。
Sampling的常见方法:
- 随机采样:从数据集中随机抽取样本,每个样本被选中的概率相同。
- 分层采样:先将数据按照某个标准分成不同的层次或类别,然后从每个层次中随机抽取一定比例的数据。
- 加权采样:根据某些特征为样本赋予不同的权重,然后按照这些权重进行采样。
- 主动采样:选择那些最能提高模型性能的数据点用于训练。
二、注意力机制
目的: 引入注意力机制,用来帮助模型理解输入数据中重要的部分。这是LLM的核心组件,能有效处理长文本和复杂的上下文关系。
三、LLM架构
目的: 将数据和注意力机制整合在一起,构建出LLM的整体架构。
四、GPT 架构
1.Tokenized Text: 输入的文本进行分词,即Tokenization,每个词转换成一个Token。这些Token是模型能够处理的数字编码。
2.Token Embedding Layer: 将Token转为向量(Embedding vectors),使每个Token都有一个高维度的表示。嵌入向量包含了词汇的语义信息,并允许模型在高维空间中进行操作。
3.Positional Emdedding Layer: 用于加入位置信息。因为Transformer结构本身没有时间序列的概念,所以需要在每个Token的向量中加入其在序列中的位置信息,以便模型能够理解词汇的顺序。
为什么要在位置编码后加一层Dropout? 为了提高模型的泛化能力,防止过拟合,其Dropout是一种正则化技术,用于防止神经网络在训练过程中过度拟合训练数据。避免模型过度依赖这些位置信息,Dropout 随机屏蔽一部分信息,使模型更加鲁棒。也就是说在位置编码后+Dropout,可以促进模型更好地学习到基于上下文的广泛特征,而不仅仅知识位置相关的特征。
4.Masked Multi-Head Attention: 多头注意力机制用于让模型同时关注输入序列中的不同位置的词汇。也就是说,通过多个注意力头,模型可以并行地处理并捕捉序列中不同特征。
Masked:在GPT模型中,注意力机制是掩蔽的,即只能看到当前词之前的词。这种掩蔽操作确保了生成的序列是有序的,每次只能基于之前的信息来预测下一个词。【只能看到之前地词】
LayerNorm 1:在多头注意力机制之前应用的归一化操作,用来标准化输入,帮助加快模型训练和提高稳定性。
5. Feed Forward Network: 由多层线性层
和激活函数GELU
组成。在每一个Token上进行操作,用来进一步处理和转换来自注意力机制的输出。特别地,每个 Token 在经过注意力机制(Multi-Head Attention)处理后,会生成一个输出向量。这个输出向量保留了该 Token 与其他 Token 之间的上下文信息。而Feed Forward Network前馈神经网络的任务是对这个输出向量进行进一步的非线性变换,以丰富特征表达。它的处理方式是逐 Token 独立操作,这意味着它不会参考同一句子或序列中的其他 Token。
GELU激活函数:GELU(Gaussian Error Linear Unit)是一种激活函数,它的效果比ReLU更平滑,有助于提升模型的性能。
LayerNorm 2:在前馈网络之前的第二次归一化操作,进一步标准化输出数据。
为什么前向传播的结构是:Linear->GELU->Linear?
第一层线性层:将输入向量的维度扩展。通常将维度从输入的大小(比如512或768)扩展到更大的维度(比如2048或3072)。扩展维度的目的是让模型有更多的空间来学习和表示更复杂的特征和关系。
GELU激活函数:GELU(Gaussian Error Linear Unit)是一种非线性激活函数,用于引入非线性。激活函数的作用是打破线性变换的局限,使得网络能够表示和学习复杂的非线性模式。激活函数的作用是打破线性变换的局限,使得网络能够表示和学习复杂的非线性模式。
第二层线性层:将扩展后的向量维度缩回到原始的大小(比如512或768)。这样做是为了确保前馈网络的输出可以与后续层次进行正确的匹配,同时保证了在特征变换过程中可以保留足够的表达能力。
6.Residual Connections: 残差连接的作用就是将输入直接接到输出上,以防止梯度小时并保留原始信息,这样即使经过了复杂的变换,模型仍然可以保留输入的特征,确保信息的稳定传递。提高模型的学习能力。
保留原始信息: 残差连接使得每一层的输出不仅仅依赖于这一层的变换结果,还包含了上一层的输入。这意味着即使中间层的变换不理想,原始输入信息仍然可以传递下去,避免信息的丢失。
公式: y=F(x)+x
为什么残差连接要设置在多头注意力机制后和前向传播后?
多头注意力机制后:多头注意力机制的作用是聚合输入序列中的信息,使每个Token都可以利用上下文信息来增强其表示。但是,这个过程可能不会总是显著改变每个Token的表示,尤其是在早期训练阶段。因此,残差连接将注意力机制的输出与输入相加,确保即使注意力机制的效果不明显,原始信息依然保留在输出中。
前馈网络后:前馈网络在每个Token的表示上进行非线性变换,以增加其表达能力。然而,如果这种变换的效果不如预期,残差连接可以确保前馈网络的输出至少保留了输入的基本信息,从而减轻变换失败的负面影响。
7.Final LayerNorm: 在所有Transformer Block的输出之后,应用一个最终的LayerNorm来规范化整个输出。
8.Linear Output Layer: 线性输出层将模型的最终输出转换回词汇表中每个Token的概率分布。它的任务是为下一个Token的生成做出概率预测。
3.Stage2:PRETRAING
预训练是LLM开发的关键阶段,主要目的是在大数据集上训练模型,从而形成基础模型。这个基础模型为后续微调提供了基础,使其更好地适应特定任务。
Training loop: 首先会将文本数据映射为一个唯一的整数标识符,即为”标记化“(tokenization),长度过大即截断Truncation,过小则填充Padding。然后根据批量大小,即为batchsize(比如为2),作为输入进行训练。然后将这样的张量传递给神经网络模型(如:Transformer、LSTM等)作为输入,模型会根据这些输入进行前向传播,并根据得到的结果进行反向传播,不断更新其模型参数。
举个例子,假设我们有一个文本数据集,并且我们决定将批量大小(batch size)设置为2。这意味着每次训练迭代时,模型将同时处理两个文本样本。如果我们还确定了每个文本的最大长度为50个标记(tokens),那么文本数据的张量形状将为
(2, 50)
4.Stage3:FINETUNE
完整流程:
LLM本质上就是一个深度神经网络,主要用于预测文本的下一个单词。在预训练阶段,模型通过接收输入文本并生成下一个单词来学习。除此以外,还会将多个训练输入(data)合并为一个批次(batchsize),并保持相同长度以便于进行张量计算。