| name | deep-learning-expert |
| description | 当用户需要设计深度学习模型、进行训练调优、解读论文或解决工程实践问题时使用此技能。触发关键词:深度学习、神经网络、模型训练、过拟合、梯度消失、PyTorch、TensorFlow、预训练模型、微调、模型部署、推理优化、CV(计算机视觉)、NLP(自然语言处理)、强化学习。适用于深度学习建模、训练、调试和部署的全流程场景。 |
深度学习建模与优化
描述
提供深度学习模型设计、训练调优、问题诊断和工程实践指导,确保模型在准确性、效率和可部署性上满足需求。
何时使用
- 用户请求"设计一个深度学习模型"或"如何训练XX任务"
- 用户询问训练问题(过拟合、欠拟合、梯度消失/爆炸、NaN、收敛慢)
- 用户需要论文复现或前沿技术解析(Transformer、Diffusion、ViT等)
- 用户寻求框架使用建议(PyTorch、TensorFlow、JAX)或代码实现
- 用户询问 CV、NLP、强化学习等领域的最佳实践
- 用户需要模型压缩、量化、部署或推理优化方案
- 用户请求数据处理、数据增强或采样策略建议
- 用户对比不同模型架构或训练策略的优劣
何时不使用
- 用户只需要传统机器学习方法(如决策树、SVM、线性回归),不涉及深度学习
- 用户的问题是纯数据分析或统计学,不涉及模型训练
- 用户只需要数据预处理或特征工程,不涉及模型设计
- 用户的问题是算法竞赛题或纯编程问题,不涉及深度学习建模
- 用户需要的是 MLOps 平台搭建或团队管理,而非具体技术方案
输入
{
task: {
type: string
domain: string
specificTask?: string
}
data: {
size?: string
quality?: string
distribution?: string
labelAvailability?: string
augmentationNeeded?: boolean
}
constraints: {
computeResources?: string
latencyRequirement?: string
accuracyTarget?: string
modelSizeLimit?: string
budget?: string
}
challenges?: string[]
existingSetup?: {
framework?: string
baseModel?: string
trainingIssues?: string[]
}
}
输出
{
modelDesign: {
architecture: string
rationale: string
pretrainedModel?: {
name: string
source: string
adaptation: string
}
tradeoff: string
codeFramework?: string
}
trainingStrategy: {
dataProcessing: {
normalization: string
augmentation?: string[]
samplingStrategy?: string
batchSize: string
}
optimizer: {
type: string
learningRate: string
scheduler?: string
weightDecay?: string
}
trainingTechniques: {
gradientClipping?: string
mixedPrecision?: boolean
gradientAccumulation?: number
ema?: boolean
}
regularization?: string[]
}
debuggingGuidance: {
visualization: string[]
checkpoints: string[]
commonIssues: {
issue: string
diagnosis: string
solution: string[]
}[]
}
engineeringPractice: {
modelCompression?: {
pruning?: string
quantization?: string
distillation?: string
}
inferenceOptimization?: {
format: string[]
batching?: string
caching?: string
}
distributedTraining?: {
strategy: string
configuration: string
}
}
expectedPerformance?: {
accuracy?: string
trainingTime?: string
inferenceLatency?: string
}
}
执行工作流
在开始执行前,复制以下清单,并在每一步完成后显式标记状态。
Step 1: 任务需求分析
- 明确任务类型(分类/检测/分割/生成/序列建模/强化学习)
- 确认应用领域(CV/NLP/音频/多模态/时序)
- 量化数据情况(规模、质量、标注、分布)
- 识别约束条件(计算资源、延迟、精度、模型大小)
- 提取核心挑战(小样本、域迁移、长尾分布、实时性)
反馈闭环: 若关键信息缺失(如数据规模、计算资源),必须询问用户补充,避免基于假设设计。
Step 2: 模型架构选择
- 列出候选架构(CNN/Transformer/RNN/GNN/Diffusion/混合架构)
- 说明每个架构的归纳偏置(如 CNN 的局部性、Transformer 的长程依赖)
- 对比参数量、计算复杂度、数据需求
- 评估预训练模型可用性(HuggingFace/TorchVision/OpenAI)
- 权衡从零训练 vs 微调 vs 迁移学习
架构选择原则:
- 小数据(<10k): 优先迁移学习或微调预训练模型
- 中等数据(10k-100k): 微调 + 数据增强
- 大数据(>100k): 可考虑从零训练或轻度微调
- 实时性要求: 优先轻量架构(MobileNet/EfficientNet/DistilBERT)
反馈闭环: 若用户对多个架构犹豫不决,提供 2-3 个方案的详细对比(精度/速度/资源消耗)。
Step 3: 训练策略设计
- 数据处理: 归一化方法(ImageNet统计/自适应)、增强策略(AutoAugment/RandAugment)
- 优化器选择: SGD(视觉任务) vs AdamW(语言/多模态任务)
- 学习率调度: Warmup + Cosine Annealing(推荐) / StepLR / ReduceLROnPlateau
- 训练技巧: 梯度裁剪(防止爆炸)、混合精度(加速训练)、梯度累积(模拟大batch)
- 正则化: Dropout、权重衰减、标签平滑
训练配方模板:
optimizer = AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)
scheduler = CosineAnnealingLR(optimizer, T_max=epochs)
scaler = GradScaler()
反馈闭环: 若用户报告训练不稳定(loss震荡/NaN),立即检查学习率、数据归一化、梯度范数。
Step 4: 实验执行与监控
- 建立基线实验(最简单可行的模型)
- 设置监控指标(训练/验证loss、准确率、梯度范数、学习率)
- 配置可视化工具(TensorBoard/WandB)
- 保存关键检查点(best model、last model、每N epoch)
监控清单:
反馈闭环: 若验证loss早期不下降,检查数据pipeline(标签错误/归一化问题/增强过强)。
Step 5: 问题诊断与调优
根据训练表现,诊断并解决常见问题:
过拟合(训练acc高、验证acc低)
- 诊断: 训练/验证loss曲线分离、验证准确率不再提升
- 解决方案:
- 增强数据增强(AutoAugment/MixUp/CutMix)
- 增大 Dropout 率或权重衰减
- 使用 Early Stopping
- 减小模型容量(更少层/通道)
- 获取更多训练数据
欠拟合(训练/验证acc都低)
- 诊断: 训练loss长期不下降、准确率低于随机猜测
- 解决方案:
- 增加模型容量(更深/更宽网络)
- 降低正则化强度(减小 Dropout/权重衰减)
- 检查数据质量(标注错误/类别不平衡)
- 增加训练轮数或调整学习率
NaN/Inf(训练中断)
- 诊断: loss突然变为NaN、梯度爆炸
- 解决方案:
- 降低学习率(减小10x)
- 启用梯度裁剪(clip_grad_norm=1.0)
- 检查输入数据(是否包含NaN/Inf)
- 添加数值稳定性操作(如log时加epsilon)
收敛慢
- 诊断: loss缓慢下降、训练时间过长
- 解决方案:
- 增大学习率(谨慎,可能不稳定)
- 使用更激进的学习率调度(如 OneCycleLR)
- 启用混合精度训练(加速2-3x)
- 优化数据加载(多进程、预取)
反馈闭环: 若多次调优仍无改善,重新审视 Step 2(架构选择)或 Step 1(任务定义)是否合理。
Step 6: 模型压缩与部署优化(如适用)
- 评估压缩需求(模型大小/推理延迟是否满足约束)
- 选择压缩策略:
- 剪枝: 结构化剪枝(减少通道/层) vs 非结构化剪枝(减少参数)
- 量化: PTQ(训练后量化) vs QAT(量化感知训练), INT8/FP16
- 蒸馏: 使用大模型(教师)训练小模型(学生)
- 转换推理格式(ONNX/TensorRT/CoreML)
- 优化推理流程(批处理/算子融合/内存优化)
压缩权衡:
- 剪枝: 精度下降中等(1-3%)、压缩比高(2-5x)
- 量化: 精度下降小(<1%)、压缩比中等(2-4x)
- 蒸馏: 精度下降可控、压缩比取决于学生模型大小
反馈闭环: 若压缩后精度下降超过预期(>5%),考虑放宽压缩比或使用蒸馏补偿。
Step 7: 性能验证与文档化
- 在测试集上验证最终性能(准确率、F1、mAP等)
- 测量推理延迟(单样本/批处理)
- 记录模型版本、训练配置、数据集版本
- 生成模型卡片(Model Card): 用途、性能、限制、伦理考虑
性能基准对比:
- 与公开基准(SOTA)对比
- 与简单基线(如线性模型)对比
- 分析失败案例(哪些类别/样本容易出错)
反馈闭环: 若性能未达目标且无明显改进空间,与用户讨论是否调整目标或增加资源投入。
失败处理
数据不足或质量差
- 现象: 用户提供的数据量极小(<1000样本)或标注质量差
- 处理:
- 推荐数据增强 + 预训练模型微调
- 建议主动学习或半监督学习
- 若预算允许,建议外包标注或合成数据生成
计算资源不足
- 现象: 用户只有CPU或单个低端GPU,但任务需要大模型
- 处理:
- 推荐轻量架构(MobileNet/DistilBERT/TinyLlama)
- 建议使用预训练模型 + 冻结部分层
- 提供云平台方案(Colab/Kaggle/AWS SageMaker)
训练持续不收敛
- 现象: 尝试多种学习率/优化器仍不收敛
- 处理:
- 检查数据pipeline(可视化batch样本)
- 简化模型(从最小可行模型开始)
- 检查标签是否正确(交叉验证标注质量)
部署后性能不达标
- 现象: 模型在测试集表现好,但生产环境差
- 处理:
- 分析训练/生产数据分布差异(域偏移)
- 使用域适应技术(DANN/CORAL)
- 收集生产数据进行增量训练
过度依赖预训练模型
- 现象: 用户无条件使用大预训练模型,忽略任务特性
- 处理: 解释预训练模型适用场景,对比从零训练的成本/收益,推荐适中方案