上一节我们学习了如何诊断模型问题、设计评估指标、进行错误分析。但实际项目中还会遇到更多挑战:训练数据中有标注错误怎么办?训练集是网上下载的高质量图片,但实际用户上传的是模糊手机照片,分布不匹配怎么办? 有没有办法利用其他任务的已有模型?本节将解决这些实践中的关键问题。
你发现训练集中有些标注是错的——一张明明是猫的图片被标成了狗。要不要花时间修正?
如果标注错误只占总误差的0.6%,可能不值得修正。但如果标注错误占3%,总误差只有5%,那60%的"误差"其实是标注问题,必须修正。
修正标注的原则:
理想情况下,训练集、验证集、测试集来自同一分布。但现实中常常做不到。

场景:你在开发手机App的猫识别功能
训练集和测试集分布明显不同。但你只有1万张真实用户数据,不够训练;20万网上图片质量好但不代表真实场景。怎么办?
方案1:混合后随机分配 ❌ 将21万张图片混合,随机分成训练/验证/测试集。
问题:验证集和测试集会大部分是网上图片(占比95%),只有5%是真实用户照片。你会针对网上图片优化,但实际目标是用户照片。
方案2:目标导向分配 ✓
这样验证和测试集完全来自目标分布(用户照片)。虽然训练集分布不同,但至少你在正确的方向上优化。
当训练集和测试集分布不同时,偏差-方差分析变复杂了。假设:
这是高方差(过拟合)还是数据不匹配?你无法判断。
解决方案:创建训练-验证集(Training-Dev Set)——从训练集中随机抽取一部分不用于训练,只用于评估。它与训练集同分布但模型没见过。
现在有四个数据集:
诊断表:
有了这个诊断,你就知道该优先解决什么问题。
解决数据不匹配的方法:
你要训练一个识别医学影像的模型,但只有1000张标注图片。从零训练肯定不够。迁移学习(Transfer Learning)能帮你:用在大规模数据集(如ImageNet)上预训练的模型,然后在你的小数据集上微调。
步骤:
两种策略:
少量数据:冻结所有预训练层,只训练新加的输出层。预训练层作为固定的特征提取器。
|# PyTorch示例 model = torchvision.models.resnet50(pretrained=True) # 冻结所有层 for param in model.parameters(): param.requires_grad = False # 替换最后一层 model.fc = nn.Linear(2048, 2) # 2个类别 # 只训练最后一层 optimizer = optim.Adam(model.fc.parameters())
较多数据:微调整个网络,但用很小的学习率。预训练权重作为初始化,而不是随机初始化。
|# 解冻所有层 for param in model.parameters(): param.requires_grad = True # 用小学习率微调 optimizer = optim.Adam([ {'params': model.fc.parameters(), 'lr': 1e-3}, # 新层用大学习率 {'params': list(model.parameters())[:-1], 'lr': 1e-5} # 预训练层用小学习率 ])
何时有效?
2015年开始,迁移学习成为计算机视觉的标准实践。即使你有百万级数据,用预训练模型初始化通常也比随机初始化效果更好、收敛更快。
多任务学习(Multi-Task Learning)是指一个模型同时学习多个相关任务。经典例子是自动驾驶的物体检测:同时识别行人、车辆、交通标志、车道线。
不同于训练四个独立模型,多任务学习用一个模型,输出层有四个sigmoid单元,分别对应四个类别:
损失函数是四个任务损失的和:
为什么有效? 不同任务共享低层特征。识别行人和车辆都需要检测边缘、形状,共享这些特征的学习能让每个任务都受益——相当于有了更多训练数据。
何时使用?
实践中,多任务学习用得比迁移学习少。在计算机视觉中相对常见(如物体检测),在NLP中较少(但BERT这类预训练模型可以看作多任务学习的成功案例)。

传统的语音识别系统是个复杂的流水线:
每个步骤都是独立设计和优化的。端到端学习抛弃了这个流水线,直接训练一个模型:音频 → 文字。
优势:
劣势:
何时使用端到端?
好的场景:
不好的场景:
例子:人脸识别
传统:图像 → 检测人脸位置 → 裁剪对齐 → 识别身份
端到端:图像 → 身份
但实践中两步法(先检测再识别)效果更好,因为:
例子:机器翻译
早期:英文 → 语法分析 → 中间表示 → 生成中文
现在:英文 → 中文(端到端)
Transformer模型的成功证明,有了足够数据(数百万句对),端到端学习能超越传统方法。
端到端的争论
端到端学习体现了深度学习的一个核心理念:让数据驱动,而不是依赖人类专家的规则。但这不是绝对的。有时候人类的先验知识很有价值,强行端到端反而效果差。
最佳实践是:从数据量和问题复杂度出发。如果数据充足且问题端到端可学习,用端到端;如果数据少或者分解问题更容易,用流水线。
机器学习项目不是玄学,而是可以系统化分析的工程问题。本节和上一节介绍的策略,核心是数据驱动的决策:
这些策略能让你的开发效率提升数倍。花几小时做错误分析,能避免几个月的无效工作。
接下来的几节,我们将进入深度学习最成功的应用领域之一:计算机视觉。我们将学习卷积神经网络——专门为图像设计的架构,它的参数共享和局部连接特性让图像处理变得高效。 从基础的卷积操作,到ResNet、YOLO等经典模型,再到目标检测、图像分割等任务,计算机视觉的世界精彩纷呈。