吴恩达deeplearning之结构化机器学习—策略(2)

来源:互联网 发布:在哪看java的api文档 编辑:程序博客网 时间:2024/06/02 09:51

1.误差分析

  本节阐述了怎样根据算法在开发集上的表现来选择算法的优化方向,基本方法:

  1. 统计算法在开发集上出错的各类样本的比例
  2. 按照错误的比例大小,来排序算法优化的优先级,因为错误占比越高,意味着算法的优化空间也越大
  3. 真正工作中,吴恩达建议可以做一个如下的表格
    这里写图片描述

    2.修正标注错误的数据

      少量的标记错误数据是否需要修正,吴恩达给出的建议是:

    1. 深度学习对于随机误差具有很强的鲁棒性,即使不修正训练集中的标记错误数据对训练结果不会有太大的影响
    2. 系统误差对训练结果是有很大影响的要避免出现,如果训练集中所有的白色狗都标注成了猫,对训练结果有比较大的影响
    3. 对于开发集和测试集中标注错误的数据,如果通过下表统计,如果占比较低,也不可以降低修正的优先级,如果占比较高,就要对开发集合测试集中的标注数据同时修正,要保证验证数据的同分布
      这里写图片描述

3.快速搭建系统并迭代

对于一个全新的机器学习任务建议:
1. 快速搭建一个简陋的机器学习系统,如果你要做的方向有现成的论文或解决方案可供参考除外
2. 然后进行偏差和方差分析及误差分析方法决定下一步的优化方向,迭代更新系统。

4.不同分布的测试集和训练集

  假如要训练一个猫识别的app,训练数据来源有两个,一个是通过抓站的方式获取的web数据,另一部分是app内用户上传的数据,而且web数据要远多于app用户上传数据。
  此外两个数据源的数据分布也有比较大的差异,web数据更多是专业人士拍摄,app上传数据受手机拍照本身和用户水平限制,图片质量显著低于web数据,此时该怎样分配开发、测试、训练集。

  • 第一种方案:

    • 合并web和app数据
    • shuffle打乱排列
    • 随机按比例划分训练集、开发集和测试集

  这样做的不足之处在于,开发集和测试集中大量的都是web数据,而算法的目的是提高app内用户上传图片的猫识别率,就和算法设计的优化目标不同。

  • 第二种方案

    • 训练集:全部的web数据和部分的app数据
    • 开发集和测试集:全部都是app用户上传数据

    这里写图片描述

5.不同分布数据划分的偏差和方差

  偏差和方差可以帮助确定算法下一步的优化方向,对于训练集与开发集、测试集分布不同的数据,偏差和方差的使用方法和同分布的数据有所不同。比如:对于同分布的数据而言如果算法在训练集上的误差为1%,而在开发集上的误差为10%,就可以认为算法的泛华能力不好,据此可以修改算法模型;对于不同分布的样本,同样的数据就很难确定有多少是因为算法没有看到训练样本引起的误差。
解决方案:在原有的训练集中在拆分出来一部分数据作为train-dev集,train-dev和train集是同分布的,训练集上的训练结果如果在train-dev上误的误差为1.5%,而在dev集上的误差为10%,就可以任务算法的误差更多的是来源于分布不一致。
这里写图片描述
这里写图片描述

6.解决数据不匹配问题

  这个没有完全系统的解决方案,如果确定数据存在数据不匹配问题。

  • 通过人工的方式尽可能的确定训练集与开发、测试集数据的不同在哪里
  • 减小训练集与开发、测试集的差距,收集更多与开发、测试集更类似的数据

7.迁移学习

  深度学习中最强大的理念之一就是,有的时候神经网络可以从一个任务中学习知识,并将这些知识应用到另一个独立的任务中,这就是迁移学习。
例如:你基于100万张图片训练了如下vgg-16的网络,现在需要做一个医学胸片识别的任务,胸片的图片很少,我们就可以用预先训练好的vgg-16网络参数作为初始参数,修改网络最后一层的参数为胸片图像识别所需的参数,固定其它层的参数,这样只需要用胸片图像训练最后一层的参数即可。预先训练的vgg-16网络为pre-training,最后一层的网络参数调整为fine tuning。
这里写图片描述
什么情况下会把任务A训练的结果迁移到任务B?

  • 任务A和任务B有相同的输入
  • 任务A的训练数据远远大于任务B的训练数据
  • 任务A的低阶特征对任务B是有用的,比如图像的色调、纹理等等。

8.多任务学习

  多任务学习是让单个神经网络同时做多件事情,比如同时检测一张图片里是否有行人、车辆、红绿灯停车标识等等。这一块的应用远远没有迁移学习应用广泛,我自己在使用深度学习中应用到这一块也是在做Torchs游戏自动驾驶时,通过一个神经网络同时输出车辆的方向盘转角、刹车、道路中心偏离程度多个信息。
  这一节详细信息还是看吴恩达的视频课程:结构化机器学习项目第二周第8节

9.端到端深度学习

  端到端简而言之就是以前有一些数据处理系统,需要多个阶段处理,端到端深度学习就是忽略这些不同的阶段,用单个网络代替它。
例子1.语音识别

  • 目标:输入一段音频x,输出对应的音频的文本
  • 非端到端:音频x提取特征音位音频文本
  • 端到端:音频x音频文本

  端到端的学习忽略了非端到端的中间步骤,而是直接从音频通过神经网络得到音频文本,如果你只有1000h的数据那么通过非端到端的做法可能能够得到更好的结果,如果你有10000h或更为充足的数据时,端到端的做法通常能得到不错的结果。

例子2.人脸识别

  • 目标:输入人脸图像x,输出识别结果
  • 非端到端:人脸图像人脸检测检测到的人脸图像居中检测结果
  • 端到端:人脸图像检测结果

    在这个示例中,事实证明端到端并不是最好的做法,问题在于人可以从不同的角度出现在图像中,所以在实际的人脸识别中并不是将原始的图像喂到神经网络中,而是采用非端到端的做法,先检测出人脸,并将人脸放大居中标示后喂入到神经网络进行训练。

10.是否要使用端到端学习

  在上一节中,示例1用端到端的做法有着不错的收益,在人脸识别中并未得到想要的结果,那如果要搭建一个机器学习任务是否要使用端到端的方法呢?
端到端的优点:

  • 如果有足够的数据,
  • 需要手工设计的组件更少,简化工作流程

缺点:

  • 要学习到x到y的映射通常需要大量的训练数据
  • 它排除了可能有用的手工设计组件,机器学习工作人工员通常都比较鄙视手工设计组件,如果你没有足够多的数据,手工设计组件能够将人的先验知识假如的算法中

  通过以上的对比,可以看出,决定是否使用端到端学习的关键问题是,你有足够的数据,学习到x到y映射足够复杂的函数。

阅读全文
0 0