吴恩达深度学习系列课程随记——Course3Week2

1.进行误差分析

第一,你应该找一组错误样本

第二,观察错误标记的样本,假阳性(false positives)和假阴性(false negatives)

第三,统计属于不同错误类型的错误数量,比如把狗分成猫,把狮子分成猫,太模糊分错了

这样你可以发现解决问题的方向,但注意选择首要的方向不能只看错误占比,要考虑解决问题的代价。

2.清除标注错误的数据

训练集标注错了:

 如果是少量的随机性错误,可以不管,深度学习算法很健壮,这问题不大。你当然也可以人工修复一下。

但如果是系统性的(比如把所有白狗分类成猫),这问题就很大。

开发/测试集标注错了:

同样,可以找一组错误样本,看看标注错误导致的判断不一致占比如何。如果较大,那么应该手动修正。

 

注意无论你要采取什么修正手段,应当同时用到开发集和测试集上

建议同时检查判断对和判断错误的样本,因为有的算法运气好,把标注错的东西判对了。(正确项不易检查,所以一般不检查)

许多人不喜欢人工分析,但这经常是被需要的且有效的。

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

面对问题,建议快速搭建第一个机器学习系统,粗糙些也没问题,然后开始迭代。

这快速给出了目标,即使错了也可以很快改,接下来你可以很快利用之前的分析方法,找出快速改进的方向。

4.使用来自不同分布的数据进行训练和测试

假设你有少量来自你最关心的分布的数据,大量来自你不是很关心的分布的数据

不太行的方式:

把两种数据均匀混合,然后按比例分配你的训练开发测试集。这样你瞄准的目标显然不太符合你关心的分布。

行的方式:

不太关心的数据用来训练,最关心的数据用于开发和测试

5.数据分布不匹配时的偏差与方差的分析

当你的训练集的分布不同于开发和测试集,你需要不同的方式分析偏差和方差。

当你的开发错误率显著大于训练错误率,你很难说这是过拟合的问题,因为或许就是分布不同导致的(比如开发集的图片显著更模糊)

解决:设立训练-开发集

打散训练集,分一小部分作为训练-开发集。我们只在训练集上跑算法,然后观察在这两个集合和开发集上的误差。

如果训练误差远小于训练开发误差,而训练开发误差接近开发误差,那么是过拟合了。

如果前两者接近而远小于后一者,那就是数据不匹配。当然如果所有错误率都比较大,偏差问题显然也存在。

总结来看:训练-人类水平=可避免偏差 训练开发-训练=方差 开发-训练开发=数据不匹配

你也可以把开发和测试集的数据拿来训练一番,看看他们与人类处理这一分布的数据的错误率差距。

6.处理数据不匹配问题

没有系统完全的解决方案。

你可以人工检查以下开发集,了解其数据的特点,然后针对性的进行数据补充。

为此可以使用人工合成的数据,比如叠加汽车噪音和语音模拟车内语音数据。

但这有一个问题,比如你可能有10000h语音,但只有1h噪音,你回放噪音10000遍后叠加,就容易过拟合这些数据。

7.迁移学习

有的时候神经网络可以从一个任务中习得知识,并将这些知识应用到另一个独立的任务中。

比如你已经训练好了一个识别猫的模型,你可以把它用于识别放射片。

如果新数据量不大,这时你需要删除最后一层或两层,然后重新随机初始化它们的权重,再用新数据训练

如果新数据量大,你可以重新训练所有权重。

之前用猫的数据的训练所有权重叫预训练,之后为识别放射片重新训练所有权重叫微调。

这样迁移学习的意义在于,迁移目标问题数据可能不够,但迁移来源问题数据多。

注意两个问题之间需要有一些共性,比如都是图像识别问题。并且来源问题的数据量往往需要显著更大。

8.多任务学习

之前的迁移学习是串行的,但其实让一个网络同时做几件事,事件之间互相促进。

比如你同时识别一张图里有没有车,有没有标志,有没有红绿灯,输出为一个多维0-1向量,损失函数变为这样:

\frac{1}{m}\sum \sum L(\hat{y}^{(i)}_{j},y^{(i)}_{j})

这比单独执行这几个识别任务要高效,即使有的数据缺失(如图里只知道有没有车,不知道有没有标志,这时候求和忽略一项即可)

同样的,问题之间要有共性,而问题的除开某一问题数据总量要显著大于该问题的数据量,这样对该问题才有显著帮助。

特别注意,多任务学习要有效,你的网络应当足够大。

9.什么是端到端的深度学习?

以前有一些系统,它们需要多个阶段的处理。端到端深度学习就是忽略所有这些不同的阶段,用单个神经网络代替它。

比如语音识别,你可能需要提取特征,分出音位等等。但端到端深度学习丢进去数据结果就出来了,这让许多人难以接受。

但这其实需要很大的数据集。数据集小的时候,传统方法表现往往更好。

如果数据量适中,可以用中间件方法,比如用端到端深度学习给出音位。

人们常常把一些问题分为几步,在其中某几步应用端到端深度学习,而不是直接用,这需要太多数据了。

比如门禁识别,先找出人脸位置,再去比对是不是数据库里的人。

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

端到端的好处:

只要数据足够,应用一个足够大的网络,往往可以更好地利用统计信息,给出较精确的结果,而不是在任务中引入人类的成见。

不需要太多时间去设计功能组件,简化了工作流程

端到端的缺点:

需要大量的数据

排除了可能有用的手工组件,这些含有人类知识的组件在缺少数据时可能很有用

要不要使用:

核心:必要复杂度:你有足够的数据能够直接学到从𝑥映射到𝑦足够复杂的函数吗

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值