机器学习策略(下篇)

进行误差分析

如果我们希望让机器学习算法能够胜任人类能做的任务,但我们的机器学习算法没有达到人类的表现,那么人工检查一下我们的机器学习算法犯的错误能够让我们了解接下来应该做什么,这个过程称为误差分析。

误差分析实例

开发集中算法识别错误的例子

Image

狗图

大型猫科动物

模糊图片

评价

1

Y

 

 

 

2

 

Y

 

 

3

 

 

Y

 

 

 

 

 

% of total

8%

43%

61%

 

清楚标注错误的数据

我们的监督学习问题的数据由输入X和输出标签Y构成。如果我们观察数据并发现有些输出标签(标签训练集中人为标记的)Y是错的,是否值得花时间去修正这些标签呢?

事实证明深度学习算法虽然对于训练集中的系统性误差不够鲁棒,但对于随机误差是相当鲁棒的,只要这些由于人为标注失误的误差足够随机,放着不管可能也没什么问题,不需要花太多时间修复它们。除非错误标记严重影响了我们在开发集上评估算法的能力,那么就应该花时间去修正错误的标签。

手动检查标签并尝试修改的指导原则

  • 不管用什么手段都要同时作用到开发集和测试集上,因此手动检查标签时必须同时检查开发集和测试集。
  • 同时检验算法判断正确和判断错误的例子。但我们通常不这么到。
  • 我们通常会手动修改开发集与测试集中的错误标签,通常不会手动修改训练集中的错误标签。

快速搭建你的第一个系统,并进行迭代

  • 快速设立开发集、测试集以及评估指标,这决定了系统的目标所在。
  • 马上搭好一个机器学习系统原型,然后找到训练集训练一下,看看效果。
  • 进行偏差、方差以及误差分析来确定下一步优先做什么。

如果这个领域有大量的文献可以借鉴,则“快速搭建第一个系统,并进行迭代”的适用程度没有那么高。

在不同的划分上进行测试并训练

在深度学习时代,越来越多的团队都用来自与开发集和测试集分布不同的数据来训练模型,我们可以通过一些方式处理训练集和测试集存在差异的情况。

假设分布为A的数据集中有20万条数据,分布为B的数据集中有1万条数据,同时B中数据更接近用户真实数据。我们将20万条分布为A的数据外加5千条分布为B的数据构成训练集,将2500条分布为B的数据构成开发集,2500条分布为B的数据构成测试集。虽然训练集与开发集和测试集的数据仍不来自同一分布,但此举好处是我们瞄准的目标就是系统真实处理的目标。

不匹配数据划分的方差和偏差

如果我们的训练集与开发集的数据来自不同分布,我们需要定义一组新的数据,称为“训练-开发集”,这部分数据我们应该从训练集中提取,但不将它们用于训练。

Training error:1%

Training-dev error:9%

Dev error:10%

通过对比训练集误差和训练-开发集误差后,我们发现算法存在方差问题。因为尽管神经网络在训练集中表现良好,但无法泛化到来自相同分布且数据以前没见过的训练-开发集里。

Training error:1%

Training-dev error:1.5%

Dev error:10%

此时不存在方差问题,训练集误差和开发集误差相去甚远是数据不匹配问题,即我们的算法擅长处理与我们关心的数据不同分布的数据。

Human error:0%

Training error:10%

Training-dev error:11%

Dev error:12%

此时算法存在可避免偏差问题。

Human error:0%

Training error:10%

Training-dev error:11%

Dev error:20%

此时算法即存在可避免偏差问题,又存在数据不匹配问题,但不存在方差问题。

总结

  • 通过观察训练集误差与人类表现误差的差值可以确定算法是否存在可避免偏差。
  • 通过观察训练-测试集误差与训练集误差的差值可以确定算法是否存在方差。
  • 通过观察开发集误差与训练-测试集误差的差值可以确定算法是否存在数据不匹配。
  • 通过观察测试集误差与开发集误差的差值可以确定算法是否存在对开发集的过拟合。

定位数据不匹配

处理数据不匹配的方法

  • 亲自做误差分析,尝试了解训练集与开发集和测试集的具体差异。
  • 尝试把训练数据变得更像开发集或者收集更多类似我们的开发集和测试集的数据。我们甚至可以采用人工合成数据的方式作为我们的训练集,但此时算法可能会对这部分数据过拟合。

迁移学习

迁移学习指的是,假设我们已经训练好一个图像识别神经网络,现在我将其用于其它相似任务。我们要做的是:去掉神经网络的最后一层及其输入权重,加入新的节点,初始化最后一层的权重,然后在这个新数据集上重新训练网络。经验法则是:如果有一个小数据集,就只训练输出层前的最后一层;但如果有很多数据,则可以重新训练网络中的所有参数。这么做的原因是:有很多低层次特征,如边缘检测、曲线检测等已经在之前的大量数据下被训练的很好了,学到的这部分知识可以迁移。

迁移学习起作用的场合是:假设我们希望提高任务B的性能,如果我们想从任务A学习并迁移一些知识到任务B,当任务A和任务B都有同样的输入x时,迁移学习是有意义的;当任务A我们有大量数据,而任务B仅有少量数据时,迁移学习意义更大。

多任务学习

多任务学习指:试图让单个网络同时做几件事情,让其中每个任务都能帮到其他所有任务。然而多任务学习的应用频率远远低于迁移学习,除了计算机视觉领域。

多任务学习只有当以下三件事为真时,才有意义:

  1. 我们训练的一组任务可以共用低层次特征。
  2. 每个任务的数据量很接近。
  3. 我们有能力训练一个足够大的神经网络同时做好所有的工作。

多任务学习的代替方式:为每个任务训练一个单独的神经网络。

什么是端到端的深度学习

端到端的深度学习指:以前有一些数据处理系统或者学习系统,它们需要多个阶段的处理。而端到端的深度学习能过忽略所有这些不同的阶段,用单个神经网络代替它。

端到端的深度学习面临的最大挑战是:我们需要大量数据才能让系统表现良好。

是否要使用端到端的深度学习

端到端学习的好处

  1. 让数据说话而不是被迫引入人类的成见。
  2. 所需手工设计的组件更少,从而简化我们的设计工作流程。

端到端学习的缺点

  1. 需要大量的数据。
  2. 它排除了可能有用的手工设计组件。

决定是否应用端到端学习的条件

我们是否有足够的数据能够直接学到从x映射到y足够复杂的函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值