03. 结构化机器学习项目
第2周 机器学习策略2
2.1 进行误差分析
- 以一个猫分类器为例评价思路
假设现有方法分类器的准确率为90%,误差率为10%(假设其中某一类是狗的图片)。进行误差分析:
(1)收集开发集中100个错误分类的的样本;
(2)计算其中错分为猫的狗图片的数量。 - 评估多个想法
猫检测的想法:
(1)狗和猫的区别
(2)其他猫科动物
(3)模糊图片
浏览全部错误分类样本,记录上述想法统计,可按照下列表格进行登记
按照上图所示,则此时应集中注意力于提升模糊图片的辨识准确率。
2.2 清除标注错误的数据
- 标注错误例子
- 深度学习对于训练集中的错误数据是鲁棒的。如果错误是随机的且实际错误率不高,则可以不管。
- 深度学习对于系统性错误则会出现问题(如将所有白色小狗错误标注为猫)。
- 误差分析时可增加一列:标注错误
- 开发集的目的是从不同模型中进行选择。
- 修正错误标注样本的原则
(1)同时修正开发集和测试集,以确保他们同分布。
(2)同时修正判断正确和错误的样本。
(3)训练集可以不修改,则和开发集、测试集可能不来自同分布。
2.3 快速搭建你的第一个系统,并进行迭代
- 语音识别例子
(1)背景噪音
(2)口音
(3)远场语音
(4)儿童
(5)口吃 - 快速设立开发集、测试集并进行度量。
- 快速建立初始系统。
- 使用偏差、方法分析和误差分析确定下一步。
2.4 在不同的分布上进行训练并测试
- 猫图片举例
(1)网页上的数据
(2)app上传数据
(3)其中app数据远小于网页数据
(4)选项1:将两类数据合并,并随机划分为训练集、开发集和测试集。(不建议使用)
(5)选项2:训练集为网页图片和部分app图片,开发集和测试集为app图片。 - 语音识别例子
2.5 不匹配数据划分的偏差和方差
- 猫分类例子
(1)假设人类能达到0%错误率
(2)构建训练开发集:随机打乱训练集,并分割一小部分出来,作为训练开发集,其余部分作为训练集。 - 数据不匹配的训练集、开发集合测试集上的偏差和方差问题
· 按照如下进行统计错误率,即可分析偏差、方差和数据不匹配问题。
人类错误率:
训练集错误率:
训练-开发集错误率:
开发集错误率: - 更一般的描述
统计信息 一般语音识别数据 车载后视镜云因识别数据 人类错误率 人类水平:4% 训练数据错误率 训练错误率:7% 未训练错误率 训练开发集错误率:10% 开发集、测试集错误率:6%
2.6 定位数据不匹配
- 解决数据不匹配问题
(1)人工的去看训练集和开发集之间的区别。
(2)使得训练数据更像开发集数据;或者收集更多类似于开发集的数据。 - 人工合成数据
合成数据可能是真实数据的子集,可能会影响训练,使得模型对于该子集过拟合。这一点人是无法分辨出来的。
2.7 迁移学习
- 迁移学习
(1)假设已训练好的网络如下
(2)进行迁移学习时,只需将输出层及其权重删除,并随机初始化,即可进行新的网络训练。(预训练阶段) - 迁移学习作用背景:源问题有大量的数据,而目标问题没有足够的数据。
2.8 多任务学习
- 简化的自动驾驶例子
自动驾驶车辆要同时检测多个目标,如行人、车辆、停止标志、交通信号灯等。 - 神经网络结构
需注意的是,输出为4维数据(行人、车辆、停止标志、信号灯)。 - 多任务学习也可处理标签缺失的数据
- 多任务学习作用背景:
(1)训练一组任务,这些任务共享底层特征。
(2)每个任务的大量数据都是相似的。
(3)可以训练一个足够大的神经网络,使其在所有任务上都表现的足够好。
2.9 什么是端到端的深度学习
- 什么是端到端学习?
- 端到端学习的作用背景:需要足够多的数据进行训练。
- 反例:在面部识别中,通常分为两个子问题,一是人脸定位,二是面部对比。原因是端到端的数据量小,而两个子问题的数据量较大。
2.10 是否要使用端到端的深度学习
- 端到端深度学习的优点
(1)让数据起作用,避免人的成见。
(2)所需手工设计的组件更少。 - 端到端深度学习的缺点
(1)需要大量的数据。
(2)排除了部分可能有用的手工设计组件。 - 应用端到端深度学习
关键问题:是否有足够的数据学习输入到输出的映射函数?