Coursera Deep Learning笔记 结构化机器学习项目 (下)

时间:2023-03-09 15:33:06
Coursera Deep Learning笔记 结构化机器学习项目 (下)

参考:https://blog.csdn.net/red_stone1/article/details/78600255https://blog.csdn.net/red_stone1/article/details/78600255

1. error analysis

举个例子,猫类识别问题,已经建立的模型的错误率为10%。为了提高正确率,我们发现该模型会将一些狗类图片错误分类成猫。一种常规解决办法是扩大狗类样本,增强模型对够类(负样本)的训练。但是,这一过程可能会花费几个月的时间,耗费这么大的时间成本到底是否值得呢?也就是说扩大狗类样本,重新训练模型,对提高模型准确率到底有多大作用?这时候我们就需要进行error analysis,帮助我们做出判断。

我们可以从分类错误的样本中统计出狗类的样本数量。根据狗类样本所占的比重,判断这一问题的重要性

假如狗类样本所占比重仅为5%,即时我们花费几个月的时间扩大狗类样本,提升模型对其识别率,改进后的模型错误率最多只会降低到9.5%。相比之前的10%,并没有显著改善。我们把这种性能限制称为ceiling on performance。

相反,假如错误样本中狗类所占比重为50%,那么改进后的模型错误率有望降低到5%,性能改善很大。因此,值得去花费更多的时间扩大狗类样本。

Coursera Deep Learning笔记 结构化机器学习项目 (下)

2. Cleaning up incorrectly labeled data

如果这些label标错的情况是随机性的(random errors),DL算法对其包容性是比较强的,即健壮性好,一般可以直接忽略

然而,如果是系统错误(systematic errors),这将对DL算法造成影响,降低模型性能。

如果是dev/test sets中出现incorrectly labeled data:

利用上节内容介绍的error analysis,统计dev sets中所有分类错误的样本中incorrectly labeled data所占的比例。

Coursera Deep Learning笔记 结构化机器学习项目 (下)

根据该比例的大小,决定是否需要修正所有incorrectly labeled data,还是可以忽略。举例说明,若:

  • Overall dev set error: 10%

  • Errors due incorrect labels: 0.6%

  • Errors due to other causes: 9.4%

上面数据表明Errors due incorrect labels所占的比例仅为0.6%,占dev set error的6%,而其它类型错误占dev set error的94%。因此,此时,可以忽略incorrectly labeled data。

优化DL算法后,出现如下情况:

  • Overall dev set error: 2%

  • Errors due incorrect labels: 0.6%

  • Errors due to other causes: 1.4%

上面数据表明Errors due incorrect labels所占的比例依然为0.6%,但是却占dev set error的30%,而其它类型错误占dev set error的70%。因此,这种情况下,incorrectly labeled data不可忽略,需要手动修正。

dev set的主要作用是在不同算法之间进行比较,选择错误率最小的算法模型。如果有incorrectly labeled data的存在,当不同算法错误率比较接近的时候,我们无法仅仅根据Overall dev set error准确指出哪个算法模型更好,必须修正incorrectly labeled data。

一般只修复 dev/test data上的标签

关于修正incorrect dev/test set data,有几条建议:

  • Apply same process to your dev and test sets to make sure they continue to come from the same distribution

  • Consider examining examples your algorithm got right as well as ones it got wrong

  • Train and dev/test data may now come from slightly different distributions

3. Build your first system quickly then iterate

  • Set up dev/test set and metric

  • Build initial system quickly

  • Use Bias/Variance analysis & Error analysis to prioritize next steps

4. Training and testing on different distribution

当train set与dev/test set不来自同一个分布的时候,我们应该如何解决这一问题,构建准确的机器学习模型呢?

以猫类识别为例,train set来自于网络下载(webpages),图片比较清晰;

dev/test set来自用户手机拍摄(mobile app),图片比较模糊。假如train set的大小为200000,而dev/test set的大小为10000,显然train set要远远大于dev/test set。

Coursera Deep Learning笔记 结构化机器学习项目 (下)

将原来的train set和一部分dev/test set组合当成train set,剩下的dev/test set分别作为dev set和test set。

例如,200000例webpages图片和5000例mobile app图片组合成train set,剩下的2500例mobile app图片作为dev set,2500例mobile app图片作为test set。其关键在于dev/test set全部来自于mobile app。这样保证了验证集最接近实际应用场合。这种方法较为常用,而且性能表现比较好。

5. Bias and Variance with mismatched data distributions

如果train set和dev/test set来源于不同分布,则无法直接根据相对值大小来判断。例如某个模型human-level error为0%,training error为1%,dev error为10%。

根据我们之前的理解,显然该模型出现了variance。但是,training error与dev error之间的差值9%可能来自算法本身(variance),也可能来自于样本分布不同。比如dev set都是很模糊的图片样本,本身就难以识别,跟算法模型关系不大。因此不能简单认为出现了variance。

方法:

  • 从原来的train set中分割出一部分作为train-dev set,train-dev set不作为训练模型使用,而是与dev set一样用于 验证

  • 此时,有training error、training-dev error和dev error。其中,training error与training-dev error的差值反映了variance(方差);

  • training-dev error与dev error的差值反映了data mismatch problem,即样本分布不一致。

举例:

  • 如果training error为1%,training-dev error为9%,dev error为10%,则variance问题比较突出。

  • 如果training error为1%,training-dev error为1.5%,dev error为10%,则data mismatch problem比较突出。

  • 通过引入train-dev set,能够比较准确地定位出现了variance还是data mismatch。

总结:(参考

Coursera Deep Learning笔记 结构化机器学习项目 (下)

  • 通常,human-level error、training error、training-dev error、dev error以及test error的数值是递增的

  • 但是也会出现dev error和test error下降的情况。这主要可能是因为 训练样本验证/测试样本 更加复杂,难以训练。

6. Addressing data mismatch

如何解决train set与dev/test set样本分布不一致:

  • 手动进行误差分析,尝试了解training dev/test sets的具体差异

  • 尝试把training data变得更像dev sets一点,或收集更多类似 dev/test sets 的数据

    • 人工合成数据

7. 迁移学习

将已经训练好的模型的一部分知识(网络结构)直接应用到另一个类似模型中去。比如我们已经训练好一个猫类识别的神经网络模型,那么我们可以直接把该模型中的一部分网络结构应用到使用X光片预测疾病的模型中去。这种学习方法被称为迁移学习(Transfer Learning)。

如果已有一个训练好的神经网络,用来做图像识别。现在,我们想要构建另外一个通过X光片进行诊断的模型。

迁移学习的做法是无需重新构建新的模型,而是利用之前的神经网络模型,只改变样本输入、输出以及输出层的权重系数\(W^{[L]}, b^{[L]}, W^{[L]}, b^{[L]}\)。

也就是说对新的样本(X,Y),重新训练输出层权重系数\(W^{[L]}, b^{[L]}, W^{[L]}, b^{[L]}\),而其它层所有的权重系数 \(W^{[l]}, b^{[l]}, W^{[l]}, b^{[l]}\)保持不变。

Coursera Deep Learning笔记 结构化机器学习项目 (下)

迁移学习可以保留原神经网络的一部分,再添加新的网络层。可以去掉输出层后再增加额外一些神经层。

Coursera Deep Learning笔记 结构化机器学习项目 (下)

迁移学习的应用场合主要包括三点:

  • Task A 和 B 有同样的 input x.

  • Task A 的数据比 Task B 的数据多很多.(希望提高B的性能,B的数据很少)

  • A的低层次特征(Low level features) 可以帮助任务B的学习,那么迁移学习更有意义.

8. 多任务学习

多任务学习(multi-task learning)就是构建神经网络同时执行多个任务

这跟二元分类或者多元分类都不同,多任务学习:类似将多个神经网络融合在一起,用一个网络模型来实现多种分类效果

如果有C个,那么输出y的维度是 \((C,1)\).

例如汽车自动驾驶中,需要实现的多任务为行人、车辆、交通标志和信号灯。如果检测出汽车和交通标志,则y为:

\[y=
\left[
\begin{matrix}
0\\
1\\
1\\
0
\end{matrix}
\right]
\]

多任务学习模型的cost function为:

\[\frac1m\sum_{i=1}^m\sum_{j=1}^cL(\hat y_j^{(i)},y_j^{(i)})
\]

其中,j表示任务下标,总有c个任务。对应的loss function为:

\[L(\hat y_j^{(i)},y_j^{(i)})=-y_j^{(i)}log\ \hat y_j^{(i)}-(1-y_j^{(i)})log\ (1-\hat y_j^{(i)})
\]

Multi-task learning与Softmax regression的区别

  • Softmax regression是single label的,即输出向量y只有一个元素为1;

  • 而Multi-task learning是multiple labels的,即输出向量y可以有多个元素为1。

多任务学习是使用单个神经网络模型来实现多个任务。实际上,也可以分别构建多个神经网络来实现。

如果各个任务之间是相似问题(例如都是图片类别检测),则可以使用多任务学习模型。另外,多任务学习中,可能存在训练样本Y某些label空白的情况,这并不影响多任务模型的训练。

多任务学习的应用场合主要包括三点:

  • Training on a set of tasks that could benefit from having shared lower-level features.

  • Usually: 每个任务的数据量很接近

  • Can train a big enough neural network to do well on all the tasks.

迁移学习和多任务学习在实际应用中,迁移学习使用得更多一些。

9. 什么是端到端的深度学习

端到端(end-to-end)深度学习:

  • 所有不同阶段的数据处理系统学习系统模块 组合在一起,用一个** 单一的神经网络模型** 来实现所有的功能。它将所有模块混合在一起,只关心输入和输出。

以语音识别为例,传统的算法流程和end-to-end模型的区别如下:

Coursera Deep Learning笔记 结构化机器学习项目 (下)

如果训练样本足够大,神经网络模型足够复杂,那么end-to-end模型性能比传统机器学习分块模型更好。

  • end-to-end让神经网络模型内部去 自我训练 模型特征,自我调节,增加了模型整体契合度。

10. 是否要使用端到端的深度学习

end-to-end深度学习:

优点:

  • Let the data speak

  • Less hand-designing of components needed

缺点:

  • May need large amount of data

  • Excludes potentially useful hand-designed