1 误差分析
拿猫分类器的例子来说明:
比如通过查看分类错误的的样本发现分类器将上面的狗狗图片误分类为猫,这是一种错误情况。
误差分析的一般做法是:
- 随机开发集中误分类的样本中随机选取少量样本(大概100个左右),逐个的进行查看。
- 统计可能发生的错误情况,绘制成表格。
在这个例子中,可能发生的错误情况包括:
- 把狗狗识别成了猫。
- 把猫科动物识别成了猫。
- 可能有些照片比较模糊,导致识别错误。
这时候可以把错误发生率最高的情况的优先级设为最高,这样解决问题就有了思路。
清洗开发集中标签错误的数据
- 同时清洗开发集和测试集的样本,从而使开发集和测试集的样本保持来自同一个分布
- 不需要清洗训练集,因为训练集样本太多。训练数据可以和开发测试集中的数据来自稍微不同的分布。后面会谈到处理方法
快速搭建第一个系统,并快速迭代
- 建立开发集,测试集和评估指标
- 快速的建立初始的系统
- 利用偏差方差分析和错误分析去指导下一步怎么做
训练集和测试集来自不同的分布
两个例子
cat app example
有些猫的图片来自于网上,这些图片往往比较清晰,另一些照片来自用户的手机,这些照片会比较模糊,拍摄水平比较低。这个app的目的是从用户上传的照片中识别出猫的照片
这里有两种划分的方法- 第一种是先把所有数据shuffle,然后按照option1那样进行划分,这样开发集合测试集中用户上传的照片比例太少,可能会对来自网上的高质量的猫图过拟合,不符合app的目的
- 第二种是开发集和测试集都是由来自用户上传的猫图组成,训练集两者都包含,这样虽然训练集和开发测试集分布不一样(后面会提到解决办法),但我们的靶心是对的
分布不匹配数据的偏差方差分析
首先定义一个概念-训练开发集:从训练集中抽出一小部分数据,不用于训练模型。这样我们就有四部分数据:训练集,训练开发集,开发集,测试集。分别计算模型在这些数据集上的表现
这样我们就可以分析出问题的所在,然后针对性的提出解决方案
解决训练集和开发测试集数据分布不匹配的问题
- 进行人工误差分析,去理解训练集和开发测试集中数据不同之处(eg:比如人在安静场合说话的声音和在车内说话的声音)
- 使训练数据和开发测试集更加相似,或者更多的与开发测试集相似的训练数据
其中一个办法就是人工数据合成
但要注意一点,加入有10000个小时的说话声和一个小时的汽车噪声数据,循环播放这个1小时的数据10000次,可能会导致模型对这一个小时的噪声数据过拟合
迁移学习
什么时候使用迁移学习
- 任务A和任务B有相同的输入
- 你有很多任务A的数据,但任务B的数据比较少。或者说任务A的数据比任务B的数据廉价,更易获得。
- 任务A训练出来的模型的低层次特征可以帮助训练任务B
多任务学习
什么时候多任务学习有意义
- 多任务学习的各个子任务都可以享受分享低层次的特征带来的好处
- 通常来说:每一个子任务的数据量都是相似的
- 你可以训练一个足够大的网络在所有的任务上都做的很好
端到端的深度学习
端到端深度学习的优缺点
优点
- 让数据说话
- 更少的人工设计的组件,减少开发的流程
缺点
- 需要大量的数据
- 排除了可能有用的人工设计的组件
应用端到端深度学习的要点
你是否有充分多的数据来学习x->y映射所需的复杂功能?