吴恩达深度学习课程学习笔记4

误差分析

        首先收集一下比如说在猫检测中,选100个预测错误的开发集例子,然后手动检查你的开发集有多少预测错误的例子是狗的,这个数量决定了往这个方向优化的性能上限,然后根据这个值去估计这个方向有多少价值并且帮助你作出更好的决定。

 

对于数据上错误的标签,是否值得我们去修改?

        事实证明,深度学习算法对于训练集中的随机误差是相当鲁棒的(只要那些标记错误的例子离随机误差不太远),只要总的数据集足够大,实际误差可能不会太高。但对于系统性错误就没那么鲁棒了。

        在误差分析时,可加入额外的项,统计标签Y标记错误的例子数,至于是否值得修改要看3个数值:

  1. 整体开发集的错误率;
  2. 由于错误的标签而导致的错误率;
  3. 其他因素导致的错误率;

 

        举个例子,如果由于错误标签而导致的错误率为0.6%,两个分类器A和B在开发集上的误差为2.1%和1.9%,这时就不能再相信开发集,需要去修改开发集中错误的标签之后再比较。

        当主动检查标签,并修改一些标签时需要考虑一些方针和原则:

  1. 要同时作用到开发集和测试集上确保它们来自相同的分布;
  2. 同时检验算法判断正确和判断错误的例子(虽然通常不会去找出那些因为错误标签而判断正确的例子,但还是要考虑到这一点);
  3. 训练集和开发集可能会因此来自两个稍微不同的分布。

 

        在构造实际系统时通常需要更多的人工误差分析,更多的人类见解来架构这些系统,要多关注数据本身是否有错误,可以帮助你找出要优先处理的任务。

 

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

  1. 快速设立开发集和测试集,还有指标;
  2. 快速搭好一个机器学习系统原型,开始训练一下,看看效果,理解你的算法表现如何;
  3. 使用偏差方差分析和误差分析来确定下一步优先做什么。

 

        如果处理的问题有一定研究基础,可一开始就搭建比较复杂的系统,如果第一次处理某个新问题,建议构建一些快速且简陋的实现,然后用来帮你找到改善系统要优先处理的方向。

 

如何在不同的分布的数据上进行训练并测试?

  1. 把两组不同分布的数据合并在一起。好处:使训练集和开发集/测试集来自同一分布;坏处:若真正关心的分布的数据太少,则得到的结果不是你想要的。(不建议);
  2. 训练集全部用不关心的分布数据和一部分关心的分布的数据,开发集和测试集全部用真正关心的分布数据。相当于把瞄准目标设为你想处理的目标。缺点:训练集和开发集/测试集的分布不一样。但事实证明,这样划分能在长期给你带来更好的系统性能。

 

若训练集和开发集不是来自同一分布,则如何估计学习算法的偏差和方差?

        若训练集和开发集不是来自同一分布,不能单纯地从训练错误率和开发集错误率取判断偏差和方差问题。需要定义一个新的数据子集Train-dev-set,其与训练集具有相同的分布,但未用于训练,train-dev-set和dev-set之间的差异,就是数据不匹配问题的大小。

 

对于数据不匹配问题,该如何解决?

        没有特别系统的方法去解决数据不匹配的问题,但可以尝试做以下事情:

  1. 做误差分析和尝试了解训练集和开发集/测试集的具体差异;
  2. 可以尝试把训练数据变得更像开发集一点,或者收集更多类似你的开发集和测试集的数据;人工合成数据:如在语音识别方面,若确定问题时汽车噪声,可在训练数据中加入汽车噪声。但有可能导致学习算法对这1小时汽车噪声过拟合。

 

迁移学习

        把从A任务训练之后的神经网络,把最后一层去掉换成新的结点或更多的层,用B任务的数据集重新训练网络。若B任务数据集较少,可只重新训练最后一层权重。若数据集较大,可把前几层的权重也重新训练。一般地,把这个过程中用A任务数据集训练神经网络称为预训练,用B任务数据集重新训练网络称为微调。

        从数据量大的任务迁移到数据量少的任务,这种情况下,网络已经预先学到了很多特征,即使数据集相对较小,但效果也不错。若从数据量相对较小的任务迁移到数据量大的任务,则迁移学习就没有意义了。

 

迁移学习何时有意义?

  1. 任务A和任务B有相同类型的输入,如图片或音频;
  2. 任务A比任务B有更多的数据;
  3. 任务A的低层次特征对B的学习有帮助。

 

多任务学习

        试图让单个神经网络同时做几件事情,然后希望这里每个任务都能帮到其他所有任务。

 

多任务学习什么时候有意义?

  1. 如果训练的一组任务可以共用低层次特征;
  2. (不绝对)每个任务的数据量很接近(如果你专注于单项任务,想要从多任务学习得到很大的性能提升,那么其余任务加起来的必须要有比单个任务大得多的数据量);
  3. 可以训练一个足够大的神经网络,同时做好所有工作,当网络足够大,性能不输单个任务对应单个神经网络。所有多任务学习的替代方法是为每个任务训练一个单独神经网络。

        多任务学习的使用频率比迁移学习要小,可能是很难找到那么多相似且数据量对等的任务(物体检测)。

 

端到端深度学习

        以前一些数据处理系统或者学习系统,他们需要多个阶段处理,而end-to-end就是忽略所有这些不同阶段用单个神经网络代替它。

        端到端深度学习的挑战之一是你可能需要大量数据才能让系统表现良好。

 

是否应该使用端到端深度学习?

        端到端学习的优缺点:

        优点:(1)端到端学习真的只是让数据说话;

                    (2)所需手工设计的组件更少;

        缺点:(1)可能需要大量的X,Y数据;

                    (2)它排除了可能有用的手工设计组件;

        应用端到端深度学习的关键问题:你是否有足够的数据能够直接学到从X映射到Y的足够复杂的函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值