学习LLM过程中的经典策略记录。
Causal mask
Causal mask是自注意力机制中的一种掩码。在自注意力机制中,每个位置的输出都依赖于序列中所有位置都输入,包括当前位置之后的位置。这种机制在解码器中特别常见,因为解码器在生成输出时必须按顺序依次生成。但是在预测时,未来显然是不可见的,所以需要在每个位置处将未来的位置的信息屏蔽,这种屏蔽的方式也就是Causal mask。它保证了解码器在生成时,只是基于历史信息,而不是未来的信息。
通常情况下,Causal
mask是一个二维矩阵,该矩阵对角线以下的元素全为1,表示允许当前位置之前的信息流动,而对角线以上的元素都为0,表示屏蔽了当前位置之后的信息。在使用
Transformer
架构进行序列到序列任务时,常见的做法是在解码器的自注意力层中应用这种
causal mask,以确保生成的序列是自左向右生成的。
为什么在LLM模型预训练时,计算交叉熵损失函数时需要loss mask
在自回归训练中,模型需要根据前\(n-1\)个Token预测第\(n\)个Token。此时,输入序列为\(X = [x_1,x_2,...,x_{n-1}]\),目标序列为\(Y= [y_1,y_2,...,y_m] \quad m \geq n\),掩码规则为仅对目标序列中与当前预测位置匹配的Token计算损失(如第\(i\)个预测位置仅计算\(y_i\)的损失,其他位置(包括填充Token)设为0,不参与损失计算. 其主要作用如下:
忽略无效Token
预训练数据通常包含填充(Padding)标记或特殊符号(如
),这些位置的真实值对模型无意义。若不加掩码,模型会错误学习生成这些无效Token,导致训练效率下降。 聚焦有效生成
通过掩码选择性计算损失,模型仅关注实际需要生成的Token(如自回归任务中预测下一个Token),避免被无关信息干扰。
保持损失归一化
掩码确保不同批次、不同长度序列的损失计算公平,避免填充Token拉低整体损失值
深度学习中常用归一化技术
归一化技术在深度学习中常用于对输入数据进行标准化处理的方法,归一化技术本质上是将输入空间映射到一个规范化空间的过程,此映射的常见形式如下:
Min-Max
\[\bar{x} = \dfrac{x-x_{min}}{x_{max} - x_{min}}\]
将数据缩放到\([0,1]\)范围,适用于数据分布已知且无异常值的请况。
Z-Score
\[\bar{x} = \dfrac{x - \mu}{\delta}\]
\[\mu = \frac{1}{m} \sum_{i=1}^{m} x_i, \quad \sigma^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu)^2\] 将数据转换为均值为0,标准差为1的分布,适用于数据服从正态分布的情况
在实际使用中,会针对性的做一些调整以适应不同任务,不同场景,主要有Batch Norm、Layer Norm、RMS Norm等:
Batch Norm
对每个特征通道(如图像的RGB通道)在批量数据上计算均值和方差,通过标准化和平移/缩放参数调整分布,公式如下:
\[y = \gamma \cdot \dfrac{x-\mu}{\sqrt{\sigma^2 + \epsilon}} + \beta\]
Layer Norm
对单个样本的所有特征维度(如序列模型的每个token向量)计算均值和方差,实现跨样本的归一化,公式同上,只是针对的输入不同
RMS Norm
LayerNorm的变体,仅计算均方根(RMS)替代均值和方差,去除平移参数\(\beta\),简化计算,公式如下:
\[y = \gamma \cdot \dfrac{x-\mu}{\sqrt{RMS(x)^2 + \epsilon}}\]
其中 \[RMS(x) = \sqrt{\frac{1}{N}\sum_{i = 1}^Nx_i^2}\]
在深度学习中归一化技术有如下意义:
提高训练速度
- 归一化可以使不同特征的数值范围相近,避免某些特征值过大或过小,影响梯度更新,导致训练过程缓慢。
- 通过减少梯度下降的震荡,使优化过程更稳定,加快收敛速度。
防止梯度消失或梯度爆炸
- 归一化可以保持数据分布的稳定性,防止某些层的输入值过大或过小,从而避免梯度消失或梯度爆炸问题,尤其是在深层网络中。
提高模型的泛化能力
- 归一化可以减少特征对不同尺度的依赖,使模型对输入数据的变化更具鲁棒性,提高泛化能力,降低过拟合风险。
减少不同特征之间的影响
- 由于不同特征的尺度不同,模型可能会过度依赖某些大数值特征,导致训练过程不稳定。归一化后,各特征的权重分布更加均衡,提高模型的稳定性。
归一化技术对比如下:
方法 | 典型应用场景 | 核心优势 | 局限性 |
---|---|---|---|
Batch Norm | 图像分类(CNN)、小批量训练场景 | 加速收敛、降低初始化敏感度 | 对批量大小敏感,无法处理序列数据(如NLP) |
Layer Norm | 自然语言处理(如BERT、GPT)、RNN、长序列模型 | 适应动态批量、保持序列位置不变性 | 计算开销较大,对噪声敏感 |
RMS Norm | 超大规模语言模型(如LLaMA、DeepSeek)、高精度工业检测 | 计算高效、数值稳定性强、减少梯度爆炸风险 | 无法处理均值敏感任务(如某些CV任务) |
需要注意的是,在训练和推理阶段,Batch Norm的处理方式是截然不同的。
训练阶段
在训练阶段,BN会计算每个批次的均值和方差,同时维护全局均值和全局方差,并使用滑动平均来进行更新:
\[ \begin{cases}\mu_g = \alpha \mu_g + (1 - \alpha)\mu_{b} \\ \delta_g^2 = \alpha \delta_g^2 + (1-\alpha)\delta_b^2 \end{cases}\] 其中\(\alpha\)为平滑系数。
推理阶段
在推理阶段,会直接使用训练阶段得到的全局均值\(\mu_g\),全局方差\(\delta_g^2\)进行数据归一化,确保输入数据特征分布的一致性,同时保证模型在推理阶段的稳定性。
因此在进行模型推理时,若使用原生pytorch,在推理前,需调用模型的eval()方法,将模型设置为推理模式,以确保在使用BN的模型推理场景,能正确使用训练阶段的全局均值和方差。对于使用非BN标准化方法的场景,如LN,RN,IN,GN等在训练和推理时都是采用各自当前的均值和方差,但是也要在推理前将模型设置为推理模式,因为Dropout算法在训练和推理阶段也是完全不同的,在推理阶段,Dropout是静默的,随机冻结参数的比例为0。若使用第三方推理框架,如OnnxRuntime、TensorRT等,在使用torch到处模型参数前,也需要将模型设置为推理模式。
大模型构建流程
根据OpenAI联合创始人Andrej Karpathy在微软Build 2023大会上公开的信息,OpenAI使用的大模型构建流程如下图所示,主要包括以下四个阶段:
预训练
预训练阶段使用的主要模型结构是自回归(Autoregressive)模型GPT[1],此外还有自编码(Autoencoding)模型BERT[2]、编码器-解码器模型BART[3],以及融合上述三种方法的自回归填空(Autoregressive Blank Infiling)模型GLM(General Language Model)[3]。
有监督微调(SFT)
有监督微调分为全参数微调和轻量级参数微调。而常用的轻量级微调方法有LORA[4]、AdaLoRA[5]、QLoRA[6]等。
Reward Model
练Reward Model的目标是构建一个文本质量对比模型,用于对两个结果之间的优劣进行对比。Reward Model主要用于下阶段的强化学习,强化学习会使最终生成的回答获得更高的Reward。InstructGPT中给出了如何构建Reward Model[7],可以阅读原论文。
人工反馈强化学习
强化学习阶段根据数十万用户给的prompt,利用前一阶段训练的Reward Model,使用近段策略优化PPO[8]对语言模型继续进行微调,使得模型更好的学习人类偏好。
参考文献
[1] GPT-1技术报告 Improving Language Understanding by Generative Pre-Training
[2] GPT-2技术报告:Language Models are Unsupervised Multitask Learners
[3] GPT-3技术报告:Language Models are Few-Shot Learners
[4] Instruct GPT技术报告:Training language models to follow instructions with human feedback
[5] GPT-4技术报告:GPT-4 Technical Report
[6] Llama-1技术报告:LLaMA: Open and Efficient Foundation Language Models
[7] Llama-2技术报告:Llama 2: Open Foundation and Fine-Tuned Chat Models
[8] Baichuan-2技术报告:Baichuan 2: Open Large-scale Language Models
[9] GLM技术报告:GLM: General Language Model Pretraining with Autoregressive Blank
[10] InfillingYi-34B技术报告:Yi: Open Foundation Models by 01.AI