深度学习笔记(16) 误差分析(一)

  • 1. 进行误差分析
  • 2. 清除标注错误的数据

1. 进行误差分析

假设正在调试猫分类器
然后在开发集取得了90%准确率,相当于10%错误
这离希望的目标还有很远

也许需要看了一下算法分类出错的例子
注意到算法将一些狗分类为猫

试想一下,可以针对狗,收集更多的狗图
或者设计一些只处理狗的算法功能之类的
为了让的猫分类器在狗图上做的更好,让算法不再将狗分类成猫

建议做的是,先收集一下,比如说100个错误标记的开发集样本
然后手动检查,一次只看一个,看看开发集里有多少错误标记的样本是狗
假设事实上,100个错误标记样本中只有5%是狗
就是说在100个错误标记的开发集样本中,有5个是狗
意味着100个样本,在典型的100个出错样本中
即使完全解决了狗的问题,也只能修正这100个错误中的5个

在机器学习中,有时称之为性能上限
就意味着,最好能到哪里,完全解决狗的问题可以有多少帮助

但现在,假设发生了另一件事,假设观察一下这100个错误标记的开发集样本
你发现实际有50张图都是狗,所以有50%都是狗的照片
现在花时间去解决狗的问题可能效果就很好
这种情况下,如果真的解决了狗的问题
那么错误率可能就从10%下降到5%了

在机器学习中,有时候很鄙视手工操作,或者使用了太多人为数值
但如果要搭建应用系统,那这个简单的人工统计步骤,错误分析
可以节省大量时间,迅速决定什么是最重要的

有时在做错误分析时,也可以同时并行评估几个想法
比如,有几个改善猫检测器的想法,也许可以改善针对狗的性能,或者有时候要注意,那些猫科动物,如狮子,豹,猎豹等
所以,也许可以想办法解决这个错误

或者也许发现有些图像是模糊的
如果能设计出一些系统,能够更好地处理模糊图像,也能快速地降低错误率

其实,可以建立一个表格
在最左边,人工过一遍想分析的图像集,图像可能是从1到100
表格的一列就对应要评估的想法,比如狗的问题,猫科动物的问题,模糊图像的问题

在错误分析过程中,看算法识别错误的开发集样本
如果发现第一张识别错误的图片是狗图,那么就在那里打个勾
为了帮助自己记住这些图片,有时会在评论里注释,也许这是一张比特犬的图
如果第二张照片很模糊,也记一下
如果第三张是在下雨天动物园里的狮子,被识别成猫了,这是大型猫科动物,还有图片模糊,在评论部分写动物园下雨天,是雨天让图像模糊的之类的
最后,这组图像过了一遍之后,可以统计这些算法(错误)的百分比
或者这里每个错误类型的百分比,有多少是狗,大猫或模糊这些错误类型


在做到一半时,有时可能会发现其他错误类型
比如可能发现有Instagram滤镜,花哨的图像滤镜,干扰了分类器

在这种情况下,实际上可以在错误分析途中,增加这样一列
比如多色滤镜 Instagram滤镜和Snapchat滤镜
然后再过一遍,也统计一下那些问题
并确定这个新的错误类型占了多少百分比

例如,在样本中,有很多错误来自模糊图片,也有很多错误类型是大猫图片
所以,这个分析的结果不是说一定要处理模糊图片
这个分析没有给一个严格的数学公式,告诉应该做什么
但它能让你对应该选择那些手段有个概念
比如说不管对狗图片或者Instagram图片处理得有多好
在这些例子中,最多只能取得8%或者12%的性能提升

所以总结一下,进行错误分析,应该找一组错误样本
可能在开发集里或者测试集里,观察错误标记的样本
看看假阳性(false positives)和假阴性(false negatives)
统计不同错误标记类型占总数的百分比
可以帮助发现哪些问题需要优先解决,或者给构思新优化方向的灵感

建议快速搭建一个系统,并进行迭代,有一个训练过的系统,确定偏差方差的范围,能够进行错误分析


2. 清除标注错误的数据

在猫分类问题中,图片是猫,y=1;不是猫,y=0


假设在查看了一些数据样本
发现标记为猫的图片有些其实不是猫
所以这是标记错误的样本

“标记错误的样本”来表示学习算法输出了错误的 y 值
对于标记错误的样本,参考数据集,在训练集或者测试集 y 的标签
人类给这部分数据加的标签,实际上是错的
这实际上是一只狗,所以 y 其实应该是0

首先考虑训练集
事实证明,深度学习算法对于训练集中的随机错误是相当健壮的(robust)

只要标记出错的样本并且离随机错误不太远
有时可能做标记的人没有注意或者不小心,按错键了
如果错误足够随机,那么放着这些错误不管可能也没问题
而不要花太多时间修复它们
当然浏览一下训练集,检查一下这些标签,并修正它们也没什么害处

有时候修正这些错误是有价值的,有时候放着不管也可以
只要总数据集总足够大,实际错误率可能不会太高

如果是开发集和测试集中有这些标记出错的样本
在错误分析时,添加一个额外的列,这样也可以统计标签 y=1错误的样本数
统计一下对100个标记出错的样本的影响
所以会找到100个样本,其中分类器的输出和开发集的标签不一致

有时对于其中的少数样本,分类器输出和标签不同
是因为标签错了,而不是分类器出错
所以也许在这个样本中,发现标记的人漏了背景里的一只猫
所以那里打个勾,来表示样本98标签出错了


所以现在问题是,是否值得修正这6%标记出错的样本

建议是,如果这些标记错误严重影响了在开发集上评估算法的能力
那么就应该去花时间修正错误的标签
但是,如果它们没有严重影响到用开发集评估成本偏差的能力
那么可能就不应该花宝贵的时间去处理

如果决定要去修正开发集数据,手动重新检查标签并尝试修正一些标签
还有一些额外的方针和原则需要考虑
首先,不管用什么修正手段都应该要同时作用到开发集和测试集上
因为开发和测试集必须来自相同的分布

其次,强烈建议要考虑同时检验算法判断正确和判断错误的样本
要检查算法出错的样本很容易
只需要看看那些样本是否需要修正

但还有可能有些样本算法判断正确,那些也需要修正
如果只修正算法出错的样本,对算法的偏差估计可能会变大
这会让算法有一点不公平的优势,就需要再次检查出错的样本

但也需要再次检查判断对的样本
因为算法有可能因为运气好把某个东西判断对了
在那个特例里,修正那些标签可能会让算法从判断结果对变成错

这一点不是很容易做,所以通常不会这么做
原因是如果分类器很准确,那么判断错的次数比判断正确的次数要少得多
那么就有2%出错,98%都是对的
所以更容易检查2%数据上的标签
然而检查98%数据上的标签要花的时间长得多
所以通常不这么做,但也是要考虑到的

最后,如果进入到一个开发集和测试集去修正这里的部分标签
可能会对训练集做同样的事情,而修正训练集中的标签其实相对没那么重要
可能决定只修正开发集和测试集中的标签
因为它们通常比训练集小得多
可能不想把所有额外的精力投入到修正大得多的训练集中的标签
所以这样其实是可以的

在构造实际系统时,通常需要更多的人工错误分析,更多的人类见解来架构这些系统
想知道它所犯的错误,应亲自去看看这些数据,尝试和一部分错误作斗争
因为花了这几分钟,或者几个小时去亲自统计数据
真的可以找到需要优先处理的任务


参考:

《神经网络和深度学习》视频课程


相关推荐:

深度学习笔记(15) 人的表现
深度学习笔记(14) 评估指标
深度学习笔记(13) Softmax分类
深度学习笔记(12) Batch归一化网络
深度学习笔记(11) 超参数调试


谢谢!

深度学习笔记(16) 误差分析(一)相关推荐

  1. 深度学习笔记(17) 误差分析(二)

    深度学习笔记(17) 误差分析(二) 1. 使用来自不同分布的数据进行误差分析 2. 数据分布不匹配时的偏差与方差 3. 处理数据不匹配问题 1. 使用来自不同分布的数据进行误差分析 越来越多的团队都 ...

  2. 深度学习笔记 | 第16讲:语音识别——一份简短的技术综述

    原标题:深度学习笔记 | 第16讲:语音识别--一份简短的技术综述 大家好!又到了每周一狗熊会的深度学习时间了.在上一讲中,小编给大家介绍了经典的 seq2seq,以及著名的注意力模型,并且小编在这些 ...

  3. 下载量过百万的吴恩达机器学习和深度学习笔记更新了!(附PDF下载)

    今天,我把吴恩达机器学习和深度学习课程笔记都更新了,并提供下载,这两本笔记非常适合机器学习和深度学习入门.(作者:黄海广) 0.导语 我和同学将吴恩达老师机器学习和深度学习课程笔记做成了打印版,放在g ...

  4. 33万字!深度学习笔记在线版发布!

    吴恩达老师的深度学习课程(deeplearning.ai),可以说是深度学习入门的最热门课程,我和志愿者编写了这门课的笔记,并在 github 开源,为满足手机阅读的需要,我将笔记做成了在线版,可以在 ...

  5. 深度学习笔记(21) 边缘检测

    深度学习笔记(21) 边缘检测 1. 边缘检测简介 2. 过滤器 3. 垂直和水平边缘检测 4. 合适的过滤器 1. 边缘检测简介 在计算机视觉中使用的比较多的就是卷积神经网络 卷积运算是卷积神经网络 ...

  6. 深度学习笔记(18) 迁移学习

    深度学习笔记(18) 迁移学习 1. 迁移学习理念 2. 图像识别的迁移学习 3. 语音识别的迁移学习 4. 使用迁移学习的场合 1. 迁移学习理念 深度学习中最强大的理念之一就是: 神经网络可以从一 ...

  7. 深度学习笔记(20) 端到端学习

    深度学习笔记(20) 端到端学习 1. 端到端的深度学习概念 2. 语音识别的端到端学习 3. 人脸识别的端到端学习 4. 机器翻译的端到端学习 5. 非端到端 6. 端到端的优缺点 7. 端到端的关 ...

  8. 《繁凡的深度学习笔记》前言、目录大纲 一文让你完全弄懂深度学习所有基础(DL笔记整理系列)

    <繁凡的深度学习笔记>前言.目录大纲 (DL笔记整理系列) 一文弄懂深度学习所有基础 ! 3043331995@qq.com https://fanfansann.blog.csdn.ne ...

  9. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述

    <繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...

最新文章

  1. Anaconda 安装 opencv3(Win10)
  2. CheckCode.js 前端验证码插件
  3. redis-4.0.1安装配置(CentOS 6.6)
  4. C语言中 #pragma pack()
  5. C++——入门知识点汇总(命名空间、缺省、重载、引用等)
  6. 限制输入字符串的长度
  7. Redis客户端命令行redis-cli操作
  8. 阿里深度学习框架开源了!无缝对接TensorFlow、PyTorch
  9. 你真的认真想过了吗?
  10. 将你的Vim 打造成轻巧强大的IDE
  11. 大锅菜机器人_炒菜机或者炒菜机器人有好用的吗 - 玩主论坛
  12. c#中datagridview里checkbox的使用方法[转]
  13. 构建python应用_构建天气应用
  14. 今天带你详细了解各组件原理
  15. 加一度分享:如何降低推广预算,增加KPI
  16. 记云服务器中挖矿病毒与防范
  17. Java为什么要有基本数据类型和包装类型
  18. matlab典型环节性能仿真,实验一典型环节的matlab仿真
  19. Python快速学习08:模块的操作
  20. ArcBlock荣获“2018区块链之星”奖项

热门文章

  1. HDOJ 2955 Robberies (01背包)
  2. GDI+中发生一般性错误的解决办法(转帖)
  3. 利用Relations实现多DataTable的聚合
  4. ajax 防止用户反复提交
  5. 微型计算机断电后信息将会丢失,计算机基础知识试题及答案a2
  6. Python字典(dict)与列表(list)与数组(nbarray)详解
  7. Redis持久化方式之RDB
  8. 应用vb编程_VB编程中的列表框综合应用讲解
  9. canvas 实现雷达图
  10. Android Palette颜色提取