1.重点归纳
1)误差分析:如果算法还达不到理想效果,那么人工检查一下算法所犯的错误,也许可以让你了解接下来应该做什么,这个过程称为误差分析。
(1)例子:一个取得90%准确率猫分类器,注意到有部分狗样本被识别为猫,使用误差分析来估计是否应该专门解决这个问题。随机抽样100个错误样本,检查把狗分类成猫的样本数量,如果这个样本占比很小,则不值得专门去优化这个问题。
(2)在做误差分析时也可以同时并行评估几个想法
(3)进行误差分析时应该找一组错误例子(验证集或测试集中的错误例子),观察错误标记的例子看看假阳性和假阴性,统计属于不同错误类型的错误数量。
2)标注错误的数据
(1)深度学习算法对训练集的随机误差是相当鲁棒的
(2)深度学习算法对系统性的错误就没有那么鲁棒了。比如说,如果做标记的人一直把白色的狗标记成猫。
(3)如果验证集和测试集中有标记错误的样本
(4)修正数据时指引和原则
3)开发一个全新的机器学习应用时,应该尽快建立第一个系统原型,然后快速迭代。
(1)流程
(2)以下情况,快速搭建第一个系统的建议的适用程度要低一些,一开始就搭建比较复杂的系统
4)训练样本与验证/测试来自不同的分布
(1)深度学习算法需要大量的数据,即使大部分数据来自不同的分布也比只有很少的数据好,从而导致训练集、验证集和测试集数据分布不一样的情况出现,越来越多团队都用来自和验证集和测试集分布不同的数据来训练。
(2)例子:猫分类器,训练数据来自网络(很清晰),测试数据来自手机拍照(很模糊)
(3)错误的组合数据方式:把两组照片混合在一起,然后进行混洗,然后再按比例把照片分配到训练集、 验证集和测试集上。
(4)猫分类器正确的组合数据方式:
(5)例子:语音识别系统的后视镜,如:“后视镜,请帮我找找到最近的加油站的导航方向”。很多数据(共500000条)来自其他语音识别应用,如:数据供应商买来的数据、智能语音激活音箱的数据、语音激活键盘的数据,只有20000条数据来自后视镜设备
5) 不匹配数据划分的偏差和方差
(1)估计学习算法的偏差和方差可以帮我们确定接下来应该优先做的方向,但是如果训练集和验证集及测试集分布不同时,分析偏差和方差的方式会不一样。
(2)为了确认是由于泛化能力,还是由于数据分布不一样的原因,需要定义一组新的数据“训练-验证集”。数据集分为4份:训练集、训练-验证集、验证集、测试集
(3)训练集误差与训练-验证集误差的差距代表了模型的方差问题的可优化空间,从中可以知道模型的泛化能力。
(4)训练-验证集误差与验证集误差之间的差距代表数据不匹配的程度,因为算法没有直接在训练-验证集或验证集上训练过,这两者的数据来自不同的分布。
(5)各个数据集误差差距总结
(6)贝叶斯误差、训练集误差、训练-验证集误差、验证集误差和测试集误差的值应该是从越来越大
(7)通用的分析方法
6)定位数据不匹配
(1)数据不匹配问题没有完全系统的解决方案,但是有一些可以尝试的方法
(2)人工数据合成
(3)如果你任务数据不匹配问题,建议进行误差分析或看看训练集和验证集,试图了解两个数据分布到底有什么不同,然后看看是否有办法收集更多看起来像验证集的数据作训练。人工数据合成可以提升模型表现,但使用人工合成数据时一定要谨慎,要记住有可能只从所有可能性的空间只选了很小一部分去模拟数。
7)迁移学习:神经网络可以从一个任务中学习得到知识,并将这些知识应用到另一个独立的任务中。
(1)适用场景:迁移来源问题有很多数据,但迁移目标问题没有那么多数据,找一个相关但不相同的任务可以帮助学习目标任务。
(2)不适用场景:迁移来源问题数据很少,但迁移目标问题数据很多。可以使用迁移学习不会有害处,但是对目标问题没有什么帮助。
(3)例子:从图像(猫、狗、鸟等)识别任务迁移学习阅读X射线扫描图
(4)例子:已经学习一个语音识别系统(输入音频,输出文本),利用迁移学习迁移到一个“唤醒词”/“触发词”检测系统(输入指定音频来唤醒设备)。
(5)迁移学习的场景:源任务A,目标任务B
8)多任务学习能让你训练一个神经网络来执行许多任务。
(1)例如:计算机视觉物体检测系统中同时检测人、汽车、交通标志等多个任务,一个神经网络学习多个任务。
(2)多任务学习意义
(3)多任务学习使用的频率要低于迁移学习,多任务学习比较少见,但计算机视觉物体检测是一个是一个例外。
9)端到端学习:以前有一些数据处理系统需要多个阶段的处理,端到端学习就是忽略所有这些不同的阶段,用单个神经网络代替它。
(1)例子:语音识别系统,输入音频,输出文本
(2)端到端学习挑战之一是需要大量的数据才能让系统表现良好。
(3)例子:人脸识别系统
10)是否要使用端到端的深度学习
(1)端到端学习的优点
(2)端到端学习缺点
2.进行误差分析
1)误差分析:如果算法还达不到理想效果,那么人工检查一下算法所犯的错误,也许可以让你了解接下来应该做什么,这个过程称为误差分析。
2)使用误差分析来估计某个想法是否值得解决的例子:调试一个取得90%准确率猫分类器
(1)检查一下算法分类出错的例子,注意到算法将一些狗分类为猫。
(2)这里有个误差分析流程可以让你很快知道这个优化方向是否值得尝试:
(3)在搭建应用系统时,这个简单的人工统计步骤(统计错误数量)误差分析可以节省大量时间,可以迅速决定什么是最重要的或最有希望的方向。
3)在做误差分析时也可以同时并行评估几个想法
(1)几个改善猫检测器的想法:
(2)建立一个表格来记录被抽样的错误样本属于哪种情况,并在每个样本中备注情况(如狗被识别为猫,备注上写上狗类型)。分别人工统计每种想法中误分类的错误样本数量,并计算每个错误类型的百分比。
(3)这个分析步骤的结果可以给出一个估计,看是否值得去处理每个不同的错误类型。这里不一定是要解决占比最大的问题,它能让你对应该选择那些手段有个概念,给出了每个问题的性能上限,了解每种手段对性能有多大的提升空间。
4)进行误差分析时应该找一组错误例子(验证集或测试集中的错误例子),观察错误标记的例子看看假阳性和假阴性,统计属于不同错误类型的错误数量。
1)深度学习算法对训练集的随机误差是相当鲁棒的
(1)只要你的标记出错的例子与随机误差相差不大,误差足够随机,那么不管这些误差也没有问题,而不要花太多时间修复它们。
(2)只要总数据集足够大,实际误差可能不会太高。
2)深度学习算法对随机误差是相当鲁棒的,但对系统性的错误就没有那么鲁棒了。
3)如果验证集和测试集中有标记错误的样本
(1)如果担心验证集和测试集中标记出错的例子带来影响,建议在误差分析时增加一个额外的列来统计标记出错的例子数。
(2)如果这些标记错误的例子验证影响了你在验证集上评估算法的能力,那么就应该花时间修正错误的标签。如果它没有严重到影响到用验证集评估成本偏差的能力,那就不需要花费宝贵的时间去处理。
(3)判断是否值得去修改标记出错的数据
(4)需要修正验证集标记错误的例子
4)修正数据时指引和原则
(1)不管用什么方法来修改错误,都应该同时修改验证集和测试集上的错误,验证集和测试集必须来自相同的分布。
(2)强烈建议你同时检验算法判断正确和判断错误的样本,而不是只检测判断错误的样本。否则有可能有些被正确判断的样本其实是判断错误的,修正样本标签后导致对算法偏差的估计可能变得更大。
(3)由于训练集数据量比较大,也因为前面讨论过的训练集的随机误差对算法影响不大,所以我们可能会只修正验证集和测试集的错误标记,而不修改训练集的错误标记。此时,训练集与验证集和测试集来自不同的数据分布。
(4)验证集和测试集来自同一分布非常重要,但如果训练集来自稍微不同的分布是一件很合理的事情。
4. 快速搭建你的第一个系统,并进行迭代
1)开发一个全新的机器学习应用时,应该尽快建立第一个系统原型,然后快速迭代。
2)例子:语音识别系统有很多优化方向
3)一般情况下,对于所有的机器学习程序可能会有50个方向可以优化前进,并且每个方向都是相对合理的,可以改善系统,如何选择一个方向集中精力处理是一个挑战。
4)如果搭建一个全新的机器学习程序,就是快速搭建好第一个系统,然后开始迭代。
(1)首先,快速设立验证集和测试集,还有评估指标。它决定了你的目标在哪里,如果你的目标定错了,之后改也是可以的。
(2)然后搭好一个机器学习系统原型,然后找到训练集,看看训练效果如何,在验证集合测试集评估指标表现如何。
(3)再进行偏差方差分析以及误差分析来确定下一步优先做什么。特别是如果误差分析让你了解到大部分误差的来源。
(4)建立初始系统的意义在于有一个训练过的系统让你确定偏差方差的范围,就可以知道下一步应该优先做什么。让你能够进行误差分析,可以观察一些错误,然后想出所有能进行的方向,知道哪些是最优希望的方向。
5)以下情况,快速搭建第一个系统的建议的适用程度要低一些,一开始就搭建比较复杂的系统
(1)如果你在这个应用程序领域有很多经验
(2)如果一个领域有很多可以借鉴的学术文献(如人脸识别领域),可以从现有大量文献为基础出发,一开始就搭建比较复杂的系统
5. 在不同的划分上进行训练并测试
1)深度学习算法对训练数据胃口很大,越多数据对训练越好,即使大部分数据来自不同的分布,从而导致训练集、验证集和测试集数据分布不一样的情况出现,越来越多团队都用来自和验证集和测试集分布不同的数据来训练。
2)处理训练集和测试集数据分布不一样的例子:猫分类器,训练数据来自网络(很清晰),测试数据来自手机拍照(很模糊)
(1)来自手机上传的照片是真正关系的数据分布,手机上传的数量不多(如1万张),来自网络的照片数量很多(超过20万)。只用手机上的照片训练的话照片数量太少了,只使用网络的照片的话与真正关心的数据分布不一样,所以需要结合两组照片数据。
(2)错误的组合方式
(3)正确的组合方式
3)例子:语音识别系统的后视镜,可以语音沟通,如:“后视镜,请帮我找找到最近的加油站的导航方向”。很多数据(共500000条)来自其他语音识别应用,如:数据供应商买来的数据、智能语音激活音箱的数据、语音激活键盘的数据,只有20000条数据来自后视镜设备。
(1)划分方式一:训练集=全部其他语音识别数据500000条,验证集和测试集数据都是来自后视镜的数据各10000条。
(2)划分方式二(如果你觉得验证集和测试集不需要这么多数据):训练集=全部其他语音识别数据500000条+后视镜数据10000条,验证集和测试集数据都是来自后视镜的数据各5000条。
6. 不匹配数据划分的偏差和方差
1)估计学习算法的偏差和方差可以帮我们确定接下来应该优先做的方向,但是如果训练集和验证集及测试集分布不同时,分析偏差和方差的方式会不一样。
2)例子:猫分类器,假设人类水平接近0%误差
(1)假设训练误差1%,验证集误差10%
(2)为了确认是由于泛化能力,还是由于数据分布不一样的原因,需要定义一组新的数据“训练-验证集”
(3)训练集误差与训练-验证集误差的差距代表了模型的方差问题的可优化空间,从中可以知道模型的泛化能力。以下为方差很大的例子:
(4)训练-验证集误差与验证集误差之间的差距代表数据不匹配的程度,因为算法没有直接在训练-验证集或验证集上训练过,这两者的数据来自不同的分布。以下为数据不匹配问题的例子:
(5)存在很大偏差问题的例子:
(6)同时存在偏差问题和数据不匹配问题的例子:
3)各个数据集误差差距总结
(1)训练集误差与贝叶斯误差的差值为可避免偏差值大小。
(2)训练-验证集误差与训练集误差的差值为方差值大小。
(3)验证集误差与训练-验证集误差的差值为数据不匹配问题的大小。
(4)测试集误差与验证集误差的差值为对验证集过拟合的程度,如果差值很大,说明需要一个更大的验证集。
4)贝叶斯误差、训练集误差、训练-验证集误差、验证集误差和测试集误差的值应该是从越来越大
(1)训练集和训练-验证集误差是从训练集分布评估的,验证集和测试集误差是对验证集测试集分布评估的。
(2)如果某个值没有变大(比上一个误差要小),如下面例子,说明训练数据比验证集和测试集数据难识别多了。
5)更通用的分析方法
(1)制定以上表格,横轴是不同分布的训练集数据(例子中为来:自其它方式语音识别数据)和验证集/测试集数据(来自后视镜的语音识别数据);纵轴是人类水平误差、参与训练的数据误差和没有参与训练的数据误差。
(2)正常情况下,我只需要分析图中红色框几项就可以找到方向:训练集与贝叶斯误差差值(可避免偏差)、训练-验证集与训练集误差差值(方差)、验证集与训练-验证集误差差值(数据不匹配)。
(3)进行表格中剩余的两项分析也是有用的:人类在真实分布(验证集/测试集数据)的误差、真实分布用于训练时的训练误差。当你继续进行更多分析时,分析并不一定会给你指明方向,但有时候你会洞察到一些特征。
7. 定位数据不匹配
1)数据不匹配问题没有完全系统的解决方案,但是有一些可以尝试的方法
(1)人工做误差分析,尝试了解训练集和验证测试集的具体差异。为了误差分析时避免对测试集过拟合,应该只人工去看验证集而不看测试集数据。汽车后视镜例子中:
(2)可以尝试把训练数据变得更像验证集数据,或者采集更多类似验证测试集的数据
2)人工数据合成
(1)例子1:清晰对话+汽车噪音=人工合成有噪音的对话
(2)例子2:汽车识别
3)如果你任务数据不匹配问题,建议进行误差分析或看看训练集和验证集,试图了解两个数据分布到底有什么不同,然后看看是否有办法收集更多看起来像验证集的数据作训练。人工数据合成可以提升模型表现,但使用人工合成数据时一定要谨慎,要记住有可能只从所有可能性的空间只选了很小一部分去模拟数。
8. 迁移学习
1)迁移学习:神经网络可以从一个任务中学习得到知识,并将这些知识应用到另一个独立的任务中。
(1)适用场景:迁移来源问题有很多数据,但迁移目标问题没有那么多数据,找一个相关但不相同的任务可以帮助学习目标任务。
(2)不适用场景:迁移来源问题数据很少,但迁移目标问题数据很多。可以使用迁移学习不会有害处,但是对目标问题没有什么帮助。
2)例子:从图像(猫、狗、鸟等)识别任务迁移学习阅读X射线扫描图
(1)做法:把神经网络最后的输出层删除,重新创建输出层并赋予随机权重,然后使用放射诊断数据训练模型。
(2)如果有更多的数据,可以删除最后面几层网络,重新添加几层网络后再用新数据重新训练这几层,数据越多就可以重新训练越多层。
(3)如果有足够多的数据时就可以重新训练整个网络,那么这个网络在之前的数据训练称为预训练,在新数据上重新训练称为微调。
(4)当你做图像识别任务时,可以训练神经网络的所有常用参数,所有层的权重,然后得到一个图像识别预测网络。
3)例子:已经学习一个语音识别系统(输入音频,输出文本),利用迁移学习迁移到一个“唤醒词”/“触发词”检测系统(输入指定音频来唤醒设备)
(1)做法:把最后一层删除并加入新网络层,有时可以加入多层节点,这取决于你有多少数据
(2)迁移学习起作用的场合:迁移来源问题有很多数据,但迁移目标问题没有那么多数据。
4)迁移学习的场景:源任务A,目标任务B
(1)任务A和B有相同的输入时,迁移学习才有意义。例如输入的都是图像,或者输入的都是音频。
(2)任务A的数据比任务B的数据多很多时,迁移学习才有意义。因为任务B的每个数据更有价值,对任务B来说通常任务A的数据量必须大得多才有帮助。
(3)任务A的低层次特征可以帮助学习任务。
9. 多任务学习
1)多任务学习能让你训练一个神经网络来执行许多任务。例如:计算机视觉物体检测系统中同时检测人、汽车、交通标志等多个任务,一个神经网络学习多个任务。
2)多任务学习意义
(1)可以共用低层次特征
(2)如果每个任务的数据量差不多,多任务学习可以。这个准则不一定对。
(3)当你可以训练一个足够大的神经网络,同时做好所有的工作,那么多任务学习比每个任务训练一个神经网络来完成各个单独的任务性能更好。否则如果不能够训练一个足够大的网络,多任务学习的替代方法是为每个任务训练一个单独的神经网络,而不是同一个神经网络中同时处理多个任务。
3)多任务学习使用的频率要低于迁移学习,多任务学习比较少见,但计算机视觉物体检测是一个是一个例外。
10. 什么是端到端的深度学习
1)端到端学习:以前有一些数据处理系统需要多个阶段的处理,端到端学习就是忽略所有这些不同的阶段,用单个神经网络代替它。
2)例子:语音识别系统,输入音频,输出文本
(1)传统语音识别需要很多个阶段处理:从语音中提取一些特征,在提取一些低层次特征之后应用机器学习算法在音频片段中找到音位(声音的基本单位,每个单词由多个音位组成)。
(2)端到端学习:输入一段音频,直接输出文本。
3)端到端学习挑战之一是需要大量的数据才能让系统表现良好。例子:语音识别系统
(1)当你只有3000h音频时,传统流水线可能比端到端学习效果要好。
(2)当你有10000h音频,甚至100000h音频时,端到端突然开始很厉害。
4)例子:人脸识别系统
(1)人脸识别系统分两步完成效果较好,第一步找到摄像头中人脸位置,第二步再把人脸放到放到识别系统进行训练。
(2)虽然没有足够的数据进行端到端学习,但是有足够的数据直接对以上两个步骤同时进行学习。
11. 是否要使用端到端的深度学习
1)端到端学习的优点
(1)只是让数据说话。如果你有足够多的训练数据,如果你训练一个足够大的神经网络,那么那么就可以学习从x到y最适合的函数映射是什么。
(2)很少需要手工设计的组件,能够简化工作流程,不需要花太多时间去手工设计功能。
2)端到端学习缺点
(1)需要大量的数据。
(2)它排除了可能有用的手工设计组件。
相关文章: