模型训练全流程
一、训练流程全景图
- 部署阶段
模型导出
模型压缩
服务部署
监控维护 - 调优阶段
超参数调优
模型优化
集成学习 - 训练阶段
模型选择
超参数配置
训练循环
验证评估 - 数据预处理
特征工程
数据增强
数据加载器 - 准备阶段
问题定义
数据收集
数据清洗
数据标注
数据划分
二、数据准备
2.1 问题定义
核心问题:明确要解决什么问题,输入输出是什么。
问题定义
业务目标: 自动分类客服工单
输入: 工单标题+内容
输出: 工单类别
评估指标: 准确率
问题定义清单:
| 维度 | 问题 |
|---|---|
| 业务目标 | 要解决什么业务问题? |
| 输入输出 | 模型的输入和输出是什么? |
| 数据来源 | 数据从哪里来? |
| 成功标准 | 如何衡量模型效果? |
| 约束条件 | 延迟、成本、隐私等要求? |
2.2 数据收集
合成数据
数据增强
模拟生成
外部数据
公开数据集
爬虫采集
数据购买
内部数据
业务数据库
日志文件
用户反馈
数据整合
2.3 数据清洗
原始数据
清洗
去除重复
处理缺失值
异常值处理
格式统一
可用数据
常见清洗操作:
| 操作 | 说明 | 后端类比 |
|---|---|---|
| 去重 | 删除重复记录 | SQL DISTINCT |
| 缺失值处理 | 填充或删除 | NULL处理 |
| 异常值处理 | 修正或删除 | 数据校验 |
| 格式统一 | 标准化格式 | 数据规范化 |
| 文本清洗 | 去除噪声字符 | 字符串处理 |
2.4 数据标注
标注工具
Label Studio
Doccano
Prodigy
标注方式
人工标注
质量高,成本高
半自动标注
模型预标注+人工校验
众包标注
成本低,需质检
2.5 数据划分
70% 15% 15% 数据集划分比例 训练集 70% 验证集 15% 测试集 15%
| 数据集 | 用途 | 后端类比 |
|---|---|---|
| 训练集 | 训练模型参数 | 开发环境 |
| 验证集 | 调整超参数 | 测试环境 |
| 测试集 | 最终评估 | 生产验证 |
三、数据预处理
3.1 特征工程
时间特征
周期编码
时间差
时间组件提取
文本特征
分词
去停用词
向量化
类别特征
One-Hot编码
Label编码
Embedding编码
数值特征
归一化: 缩放到0-1
标准化: 均值0方差1
分箱: 连续变离散
3.2 数据增强
理解:通过变换创造更多训练数据,提升模型泛化能力。
文本增强
同义词替换
随机删除
回译
LLM改写
图像增强
旋转/翻转
裁剪/缩放
颜色调整
噪声添加
3.3 数据加载器
后端类比:数据加载器类似于数据库连接池,批量获取数据。
数据存储 数据加载器 训练循环 数据存储 数据加载器 训练循环 loop [每个Epoch] 请求一个Batch 读取数据 返回原始数据 预处理 返回Batch数据
关键参数:
- Batch Size:每次训练的样本数量
- Shuffle:是否打乱数据顺序
- Num Workers:并行加载数据的进程数
四、模型训练
4.1 模型选择
小
中
大
分类
回归
生成
任务类型
数据量大小?
传统机器学习
SVM/随机森林
预训练模型微调
BERT/ResNet
从头训练深度模型
任务类型
分类模型
回归模型
生成模型
4.2 超参数配置
理解:超参数是训练前设置的参数,控制训练过程。
核心超参数
学习率
Learning Rate
批次大小
Batch Size
训练轮数
Epochs
正则化
Regularization
| 超参数 | 说明 | 常见值 | 影响 |
|---|---|---|---|
| Learning Rate | 参数更新步长 | 1e-5 ~ 1e-2 | 收敛速度和稳定性 |
| Batch Size | 每批样本数 | 16, 32, 64 | 训练速度和泛化 |
| Epochs | 训练轮数 | 10 ~ 100 | 拟合程度 |
| Dropout | 随机丢弃比例 | 0.1 ~ 0.5 | 防止过拟合 |
| Weight Decay | 权重衰减 | 0.01 ~ 0.1 | 正则化强度 |
4.3 训练循环
是
否
是
否
开始训练
初始化模型参数
Epoch循环
Batch循环
前向传播
计算损失
反向传播
更新参数
还有Batch?
验证集评估
还有Epoch?
测试集评估
训练完成
4.4 损失函数选择
| 任务类型 | 损失函数 | 说明 |
|---|---|---|
| 二分类 | Binary Cross-Entropy | 两个类别 |
| 多分类 | Cross-Entropy | 多个类别 |
| 回归 | MSE/MAE | 连续值预测 |
| 序列标注 | CRF Loss | 标签依赖关系 |
| 生成任务 | 负对数似然 | 序列生成 |
4.5 优化器选择
SGD
最简单
Momentum
加速收敛
Adam
自适应学习率
AdamW
权重衰减
推荐:大多数情况下使用Adam或AdamW。
五、模型评估与调优
5.1 评估指标
生成指标
BLEU 翻译质量
ROUGE 摘要质量
Perplexity 困惑度
回归指标
MAE 平均绝对误差
MSE 均方误差
RMSE 均方根误差
R² 决定系数
分类指标
准确率 Accuracy
精确率 Precision
召回率 Recall
F1分数
AUC-ROC
5.2 超参数调优
贝叶斯优化
基于历史结果
智能搜索
随机搜索
随机采样组合
效率更高
网格搜索
遍历所有组合
全面但慢
5.3 过拟合处理
过拟合症状:
训练好,测试差
增加数据
数据增强
正则化
Dropout
早停 Early Stop
简化模型
5.4 学习曲线分析
欠拟合
训练损失下降缓慢
验证损失下降缓慢
两者都很高
过拟合
训练损失持续下降
验证损失先降后升
差距越来越大
正常学习
训练损失持续下降
验证损失先降后稳
两者差距适中
六、微调技术
6.1 微调 vs 从头训练
微调
加载预训练权重
少量数据即可
计算成本低
从头训练
随机初始化
需要大量数据
计算成本高
6.2 微调策略
高效微调
LoRA/AdaLoRA
只更新少量参数
效果接近全量
冻结微调
冻结底层参数
只更新顶层
资源需求小
全量微调
更新所有参数
效果最好
资源需求大
6.3 LoRA原理
理解:LoRA通过低秩分解,只训练少量参数。
LoRA分解
矩阵A
(d×r)
矩阵B
(r×d)
原始权重矩阵
W (d×d)
W' = W + A×B
只训练A和B
优势:
- 可训练参数减少90%以上
- 不降低模型性能
- 多个LoRA可以切换
七、模型部署
7.1 部署流程
监控
性能监控
效果监控
告警
部署
容器化
服务化
负载均衡
优化
量化
剪枝
蒸馏
导出
模型保存
格式转换
7.2 模型优化技术
| 技术 | 说明 | 效果 |
|---|---|---|
| 量化 | 降低参数精度(FP32→INT8) | 减少模型大小,加速推理 |
| 剪枝 | 移除不重要的连接 | 减少计算量 |
| 知识蒸馏 | 小模型学习大模型 | 模型压缩 |
| 模型编译 | 针对硬件优化 | 加速推理 |
7.3 服务架构
基础设施
服务层
API层
客户端
Web/App
API Gateway
请求队列
模型服务
(多副本)
模型服务
模型服务
GPU集群
模型存储
监控告警
7.4 推理优化
流式输出
逐Token返回
降低首字延迟
缓存
KV缓存
结果缓存
批处理
合并多个请求
提高GPU利用率
八、常见问题与解决方案
8.1 训练问题
欠拟合
模型太简单
增加复杂度
特征不足
特征工程
训练不够
增加训练轮数
过拟合
数据太少
增加数据/增强
模型太复杂
简化模型/正则化
不收敛
学习率太大
降低学习率
梯度爆炸
梯度裁剪
数据问题
检查数据
8.2 部署问题
| 问题 | 解决方案 |
|---|---|
| 推理慢 | 量化、批处理、模型编译 |
| 内存不足 | 量化、模型切分、CPU卸载 |
| 并发低 | 异步处理、请求队列 |
| 成本高 | Spot实例、自动扩缩容 |
九、训练清单
9.1 训练前检查清单
配置
超参数合理
损失函数正确
评估指标确定
环境
GPU可用
依赖安装正确
路径配置正确
数据
数据量充足
标签质量OK
数据分布合理
9.2 训练中监控
| 监控项 | 正常表现 | 异常表现 |
|---|---|---|
| 损失曲线 | 持续下降 | 震荡/不降/NaN |
| 学习率 | 按计划变化 | 异常波动 |
| GPU利用率 | 80%以上 | 经常0% |
| 梯度 | 数值稳定 | 爆炸/消失 |
9.3 训练后验证
- 测试集指标达标
- 案例测试通过
- 边界情况处理
- 性能指标满足要求
- 模型大小符合预期
十、后端工程师实践建议
10.1 训练 vs 后端开发
模型训练
概率性输出
调试: 实验分析
测试: 评估指标
发布: 持续迭代
后端开发
确定性逻辑
调试: 断点+日志
测试: 单元测试
发布: 一次完成
10.2 推荐工具
| 阶段 | 工具 | 用途 |
|---|---|---|
| 实验 tracking | MLflow/Weights & Biases | 记录实验结果 |
| 数据处理 | Pandas/Dask | 数据清洗 |
| 模型训练 | PyTorch/TensorFlow | 深度学习框架 |
| 超参调优 | Optuna/Ray Tune | 自动调参 |
| 模型部署 | TorchServe/Triton | 模型服务化 |
| 监控 | Prometheus/Grafana | 性能监控 |
10.3 最佳实践
- 版本控制:代码、数据、模型都要版本管理
- 实验记录:每次实验的配置和结果都要记录
- 基线先行:先建立简单基线,再逐步优化
- 小步快跑:从小数据集开始验证,再扩大规模
- 持续监控:部署后持续监控模型效果
10.4 训练流程总结
训练阶段
模型阶段
数据阶段
继续
停止
加载数据
数据清洗
特征工程
划分数据集
创建DataLoader
定义模型类
初始化模型
选择损失函数
选择优化器
配置学习率调度
训练循环
前向传播
计算损失
反向传播
更新参数
验证评估
早停检查
保存模型
恭喜你完成了AI理论知识的学习!建议结合实践加深理解。