deeplearning.ai-note 结构化机器学习项目

前言


本文是吴恩达deeplearning.ai 第三部分结构化机器学习项目学习笔记,主要是在做项目时的策略总结学习这一部分可以教你少走弯路,在何时应该选择什么样的策略使得自己的项目向着最好的方向发展。

项目策略


在整个深度学习的训练过程中,为了提高精确度、拟合程度,要不断的调参、更改一些算法或增加数据等等,对此我们有很多的路径可以走,那么我们如何知道应该选择什么路径才是有效的呢?

正交化

正交化就是将深度学习的整个过程的所有需要解决的问题独立开来。针对某个方面的问题有相应的解决方法,尽量不要用一个方法去尝试解决多个方面的问题。 ![](https://i.imgur.com/zdfDnKI.jpg) 如上图,主要有四个方面的问题:拟合训练集,拟合验证集,拟合测试集,在实际使用中能够很好的泛化。最好的是一个个解决问题,先拟合训练集,然后拟合验证集,测试集,在实际中应用。如果用early stopping之类的同时影响两个问题的方法就不是很好。

指标

dev set和指标很重要,先确定下来后再根据实际情况不断修改,让他们更加符合实际应用时的场景。

单一数字评估指标

查准率decision:就是精确度。例子:猫分类器判断一些图是猫,在这些图中真的是猫的图的比例就是查准率。 查全率recall:在所有猫图片中分类器正确判断出了多少 在有多个算法和模型时,需要判断哪个更好,就需要一个指标来衡量,建议不要使用多个指标,这样就很难迅速判断。 最好的方法是将几个学习模型的指标平均,**得出一个单一的评估标准用于以后的衡量**其中有一个比较好的就是调和平均数。 **单一指标的设定并不仅仅是一个简单的量或平均值,可以是复杂的加权结果,取决于实际应用的需要。**

优化指标、满足指标

如果有几个指标不能很好的融合成单一指标,就可以用优化指标,满足指标的方法。 假设有k个指标,就指定k-1个位满足指标,意思是只要这些指标达到一个阈值就可以了,不需要特别的好;一个作为优化指标,意思是这个指标是我关注的重点指标,这个指标越高越好。

训练集、验证集、测试集

数据的划分一般有两种: 较细致的一种是训练集、验证集和测试集;还有一种划分时训练集、测试集。 划分的目的都是为了得到精确度最高、泛化能力最佳的模型。

Training set

通过设置不同的超参数、不同的模型,利用大量的训练数据来获得几个比较好的模型

Dev set

验证集的目的是**用来瞄准设定的预期目标**,不断向预期目标靠近,如果dev数据与实际应用数据差距较大,则瞄准的目标就出现了偏移,做的都是无用功。

Test set

通过训练集和验证集得到最优模型后,用测试集进一步验证所得到的模型,从而进一步确定该模型是否有较强的泛化能力。 注意: 要使验证集、测试集和以后要预测的目标来自同一分布。而训练集因为需要大量的数据所以不一定要求绝对来自同一分布。 dev set 和 test set的数据要来自同一分布,不能让这两类数据分别从不同的地方取,并且最好的是能够取一些实际预测时的数据分别放入dev 和 test. 当然,如果三个都能和实际应用时的数据来自同一分布当然最好。如果没有那么多的数据,一定要保证**验证集和测试集与实际应用测试数据来自同一分布**。因为训练集需要大量数据,可以适当用一些有较多数据的其他分布。

训练集、验证集、测试集大小

偏差与方差

在训练模型后,想要提升指标就需要进行分析是否出现了偏差、方差等问题。对于不同的问题要找出相应的解决方案。

贝叶斯最佳误差

贝叶斯误差(最佳误差)计算机能达到的最优水平,一般与人类水平相似 PS:训练集的准确度不一定要非常好,因为存在贝叶斯误差,所以达到一定理想水平就可以了。 **我们关注贝叶斯误差和人类误差主要是为了比较我们对训练集验证集测试集的错误率,来实时判断我们是需要降低方差还是降低偏差还是其他的方面**

解决偏差的方法

当训练集误差和人类误差较大时:说明这时我们遇到了偏差问题 (1)可以训练更大的模型 (2)训练时间更长,或者选用更好的优化算法以获得更好的参数模型 (3)NN结构以及超参数搜索(改变超参数) 当训练集误差和验证集误差较大时:方差问题 (1)需要更多的数据 (2)正则化 L2 or Dropout etc. (3)NN结构以及超参数搜索(改变超参数)

当训练集来自不同的分布

当出现之前说的训练集与验证集来自不同分布的情况,如果迭代后的结果发现方差过大,原因有二: 过拟合 or 来自不同分布 method: 首先将一部分train set 和 dev set 组装成新的train-dev set。 对这个新数据的结果分析: train-dev set 大部分数据属于train set,和train set 是同分布,此时train set 与train-dev set之间的误差成为方差,train-dev set 与dev set之间成为数据不匹配 data mismatch,dev error 与test error 成为验证集的过拟合程度 degree of overfitting to dev set. 然后根据结果得出是因为方差、偏差、还是数据不匹配; 若是数据不匹配: 1.进行误差分析,分析dev set 和train set,找出两个分布差异的原因 2.尝试找一些与dev set 相似的数据,也可以采用人工数据合成的方法

误差分析

对**dev set进行误差分析**,取出一些错误的例子,人工统计分析不能拟合的原因。根据分析出来的几个问题选择重点问题寻找方法解决。 如猫分类器的模型,分析出也许有很大比例的误差都是因为猫狗识别错误,就要特别针对猫狗识别来处理;如果大多数误差都是因为图片模糊,则要特别针对图像清晰度处理。 **人工统计分析很重要,有必要花这个时间!!!** 如下图:

错误标签

对于**训练集**,由于训练集数据很多,所以如果只是偶然的随机错误,一般不值得花费时间去修改。 对于测试集和验证集,和误差分析一起统计,根据比例大小决定是否需要修正。 如果确定要修正,建议: 1.一定要同时修改测试集和验证集 2.同时统计模型判断错的和没有判断出来的

总结

快速搭建一个系统:
1.快速找好训练集、验证集、测试集,设定好指标。尽快建立一个学习模型(输出层、代价函数不能忘)进行迭代(宁可之后再修改)。
2.再进行偏差方差分析、误差分析,找出重点问题具体分析解决,在解决的过程中注意要正交化(这才是重点)

多种学习方式的策略

迁移学习


迁移学习主要用于原对象有很多数据而迁移的对象没有大量数据的情况
步骤:
1.首先可以仅仅改变一下神经网络的输出层或者最后几层
因为对于迁移学习来说,迁移对象两者之间是有关联的。正好神经网络的前几层是低层次的学习。比如猫狗识别与放射诊断的低层次特征是相似的,都是边缘检测、线条特征等等,这就是两个学习任务的共同知识,在迁移学习中就可以省略这些层数的重新训练。
2.如果训练结果不好可以逐渐训练前面的层数

train set 和 dev set来自不同分布在某种程度上就是一种迁移学习的影子。
例如猫分类器中,如果因为用户的低分辨率的图片数据较少,网络上的高分辨率的图片数据很多。低分辨率的图片其实是我们的理想数据,但是因为没有那么多数据,所以拿高分辨率的图片作为训练数据;这在某种程度上就可以理解为迁移学习,只不过这两者的关系及其紧密。

多任务学习


用单个神经网络训练多个问题(问题之间有关联),比如在一张图同时识别车、行人、交通信号灯等。

多任务学习的要求:
1.几个问题的低层次内容必须是一致的
2.每个问题都必须有大量的数据
3.深度学习模型要足够大
如果模型足够大,一般多任务学习会比分开单独的学习模型要好。

多任务学习和迁移学习有点类似。但是最明显的区别是迁移学习的对象一个数据很多,另一个数据很少;而多任务学习要求每个问题的数据都很多。这就使得迁移学习的使用频率更高

端到端的深度学习


端到端的学习简化了学习系统,直接输入值然后就输出值。
多步骤的学习可以相对需要较少的数据去训练
优点: 简化了学习系统,省略了中间件。让模型自己去寻找解决方案,在某些问题上能够学习的比人设置的中间件更好。
缺点:
1.要求有大量的数据来训练
2.忽略了一些精心设计的非常好的中间件

是否使用端到端的深度学习


1.数据是否足够多
2.问题的复杂度(用端到端是否可行)


-------------本文结束感谢您的阅读-------------

万水千山总是情,就给五毛行不行!

相关文章: