
模型训练
模型训练流程
模型训练一般可以分为以下 几个核心阶段,每个阶段的作用都很重要,尤其在现代 AI 训练流程(如使用 DeepSpeed、分布式训练、微调)中非常常见:
🧠 1、预训练(Pretraining)
在 大规模通用数据集上训练模型,从零开始学习基本能力。
📊 数据:通用公开数据(如 ImageNet、Wikipedia)
🧠 学什么:通用视觉/语言知识
⛽ 资源:训练代价高,通常需要 GPU/TPU 群集
🧩 模型:ViT, ResNet, BERT, GPT 等
🔁 训练方式:通常是自监督或无监督
✅ 输出:一个具有泛化能力的模型(checkpoint)
🔧 2、微调 / 下游任务训练(Fine-tuning)
用少量特定数据继续训练模型,让它更适配目标任务。
📊 数据:小规模任务数据集(如情感分析、猫狗分类)
💡 目标:快速适配新场景
🔁 常见做法:只训练模型的一部分(如最后几层)
⚙️ 工具:Hugging Face Transformers、PyTorch Lightning、DeepSpeed
🎯 3、验证 / 评估(Validation / Evaluation)
在验证集或测试集上评估模型性能,不更新参数
📉 监控指标:Accuracy、Loss、F1、BLEU、mAP 等
🎯 作用:选择最佳模型、早停策略、调优超参数
🚨 常见问题:过拟合、欠拟合
🧪 4、推理(Inference)
使用训练好的模型对新数据进行预测
🚀 通常部署在服务器、边缘设备或云平台
⚙️ 模型部署格式:ONNX、TorchScript、TensorRT、TF SavedModel 等
👀 性能关注点:延迟(Latency)、吞吐(Throughput)、模型大小
🔄 可选:继续训练 / 再训练(Continual / Incremental Training)
当有新数据时继续训练旧模型,使其适应新变化(特别是工业应用)
模型训练工具
Transformers、DeepSpeed、PyTorch、Megatron的关系
它们之间的关系可以类比为一整套 AI 模型开发的“技术栈”,每一层各司其职、互相协作。下面我按层级给你分清楚:
🔧 1、底层:PyTorch
🎓 「深度学习框架」—— 最基础的库
提供张量运算、自动求导、模型构建、训练循环等底层功能。
所有其他库(包括 Transformers、DeepSpeed、Megatron)都依赖 PyTorch。
举例:你定义 nn.Linear()、torch.optim.Adam(),都是 PyTorch 提供的。
⚙️ 2、中间层:DeepSpeed & Megatron
🚀 「分布式训练加速器」—— 提高训练效率、可扩展性
✅ DeepSpeed(by Microsoft)
帮你训练更大、更快、更省显存的大模型
特点:
ZeRO 优化器(节省显存,支持千亿参数)
MoE(Mixture of Experts)支持
混合精度(fp16/bf16)
多卡、多机训练
✅ Megatron (by NVIDIA)
为 GPT 类模型打造的高性能训练工具包
特点:
专注大规模语言模型
支持 tensor/model pipeline 并行、优化 attention 等
可与 DeepSpeed 联用(比如 Megatron-Deepspeed)
📌 Megatron 更侧重模型结构 +并行技术,DeepSpeed 更通用、自动化训练优化
GPT 的全称是:
Generative Pre-trained Transformer
逐词解释如下:
Generative:生成式 —— 能生成文本,而不仅仅是分类、判断。
Pre-trained:预训练 —— 先在大规模数据上训练,再微调(fine-tune)到具体任务。
Transformer:一种神经网络结构,基于注意力机制,适合处理序列(文本)数据。
🧠 它最早由 OpenAI 提出,版本包括 GPT-1、GPT-2、GPT-3、GPT-4 等。
🧠 3、高层:Transformers(Hugging Face)
🎁 「模型接口库」—— 直接用模型、训练、微调
提供了成百上千个预训练模型(如 GPT、BERT、ViT、T5)
统一 API,模型加载、tokenizer、训练流程都封装好了
与 PyTorch、TensorFlow 兼容,也能和 DeepSpeed 联动
前向传播和反向传播
🔷 前向传播:传的是“激活值”
🔶 反向传播:传的是“误差项”和“梯度”
前向传播是神经网络中信息从输入层经过隐藏层传递到输出层的过程。每个神经元接收前一层的输出,通过加权求和和激活函数处理后传递给下一层,最终生成预测结果。此过程涉及输入信号、加权求和、激活函数应用等步骤。前向传播用于生成预测结果,在训练阶段与真实标签比较以计算损失函数,并在推理阶段直接生成预测值。反向传播则利用链式法则计算损失函数相对于权重的梯度,调整参数以减小误差,从而优化模型性能。两者结合实现神经网络的有效训练和预测。
🔹 推理阶段(Inference)
✅ 只进行前向传播:输入数据经过神经网络的各层,输出结果。
❌ 不进行反向传播:不计算损失,也不更新权重。
📦 模型参数是固定的:使用训练好的参数(权重和偏置)。
🧠 目的:使用已有模型进行预测/分类/生成等任务。
🚀 计算量更小,适合部署在服务器或移动端。
🔹 训练阶段(Training)
✅ 前向传播:生成输出。
✅ 反向传播:根据损失函数计算梯度,调整参数。
🔁 通常包含多个 epoch 和 batch。
🛠️ 目的是优化模型参数 以降低预测误差。
1、前向传播
前向传播:是神经网络中信息从输入层经过隐藏层传递到输出层的过程。在这个过程中,每一层的神经元接收来自前一层神经元的输出作为输入,并通过激活函数处理后输出给下一层,直到到达输出层并生成最终预测结果。
具体来说,前向传播涉及以下几个关键步骤:
输入信号:首先,输入数据被馈送到神经网络的输入层。这些输入可以视为特征向量,代表了我们要分析或预测的对象的属性。
加权求和:在每一层中,每个神经元将接收到的输入与该层权重矩阵相乘,并加上偏置项。这一操作可以用公式表示为:
激活函数应用:得到加权求和的结果之后,会将其传递给一个非线性的激活函数f,以生成该层神经元的实际输出。激活函数的选择取决于任务需求,例如分类问题常用 Sigmoid 或 Softmax 函数,回归问题可能使用线性激活函数,而在隐藏层中 ReLU 函数非常流行因为它的计算效率高且有助于缓解梯度消失的问题。这个过程可以写作:
重复上述过程:对于多层神经网络而言,上述两步会在每一层重复执行,直到达到输出层为止。最终输出层产生的结果就是整个网络对输入样本的预测值。
输出预测:一旦所有层都完成了它们各自的计算,最后一层即输出层就会给出模型的预测结果。如果是二分类问题,可能会使用 Sigmoid 函数来确保输出位于 [0, 1] 区间内;如果是多分类问题,则通常采用 Softmax 函数来获得类别概率分布。
前向传播是神经网络进行预测和分类的基础过程。
在训练阶段,前向传播用于生成预测结果,并与真实标签进行比较以计算损失函数的值。然后,通过反向传播算法将损失函数的梯度信息反向传递回网络,用于更新权重和偏置等参数。
在推理阶段,神经网络仅使用前向传播过程来生成预测结果。此时,输入数据通过网络进行前向传播,直到输出层生成最终的预测结果。
2、反向传播
反向传播:是 “误差反向传播” 的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。该算法的核心思想是将输出误差以某种形式通过隐藏层向输入层逐层反转。具体来说,反向传播利用了微积分中的链式法则来高效地计算损失函数相对于网络中每个权重的梯度。这意味着它可以确定每个权重对最终预测误差的影响程度,并据此调整这些权重以减小误差。
在神经网络中,前向传播是指数据从输入层经过一系列变换到达输出层的过程,在此过程中,每一层的激活值都是基于前一层的输出和当前层的权重矩阵计算得出。而反向传播则是指一旦得到了输出层的预测结果,就会比较它与真实标签之间的差异,即计算损失函数;然后,这个误差信息会沿着网络从输出层向后传递到每一层,直到输入层,从而使得每一层都可以根据其对总误差的贡献来调整自身的参数。
反向传播的主要目标是训练神经网络通过监督学习做出更优质的预测。为了实现这一目标,反向传播需要解决两个关键问题:
计算权重、偏置等超参数的梯度:这是为了方便使用优化算法更新参数时所必需的信息。通过计算损失函数关于各个权重和偏置的偏导数,可以获得一个指向损失最小化方向的梯度向量。这个梯度告诉了我们如何改变权重才能使损失变得更小。
最小化模型预测误差:更根本的是,反向传播的目标是确定如何调整模型权重和偏差,从而最小化由损失函数衡量的预测误差。随着迭代次数增加,理想情况下,网络应该能够逐渐逼近最优解,即找到一组使得损失尽可能低的权重配置