吴恩达deep learning笔记第三课 结构化机器学习项目

第一周 机器学习(ML)策略(1)

1.什么是ML策略

当你想要提升正确率的时候,由许多许多方法可以尝试,如下图,但如果选择了错误的方法和方向,可能白费时间。

吴恩达deep learning笔记第三课 结构化机器学习项目

如果能通过策略判断哪种方法是有效的。这节课就是通过机器学习策略指引朝着最有希望的方向前进

1.2正交化

效率很高的专家思路很清晰,对于要调整什么,达到某个效果,非常清晰,这个过程叫做正交化。

正交化指的是希望一个参数只控制一样东西,而不会影响其他。如果一个参数还会影响其他元素,就很难调整到想要的指标了。

吴恩达deep learning笔记第三课 结构化机器学习项目

吴恩达deep learning笔记第三课 结构化机器学习项目

1.3单一数字的评估指标

作用:准确的告诉你已知多个分类器,哪一个终于最适合你的应用

为自己的问题设置一个单实数评估指标 ,如可以用F1 score即查准率(precision,如分类出猫的分类器中有几个是猫)和查全率(整个集合猫中有几个是被分类出来的)的调和平均数来评估。F1 = 2/(1/P + 1/R),如下图可以看出A的F1 score比较高

经常通过一个开发集(dev set,也叫验证集)+单一数值评估指标来快速判断模型好坏。可以加速改进机器学习算法迭代的过程。

吴恩达deep learning笔记第三课 结构化机器学习项目

最重要的是整体步骤,两步“旋钮”:

第一步:考虑怎么设立一个单一数字的评估指标,即定义,是根据真正要做好的事情(测试集)定义的。第二部:考虑如何去打靶(优化指标),即改变各种超参数和结构来优化。

1.4满足和优化指标

可以设立多个满足指标,1个优化指标,在满足的情况下不断优化。如识别一张图片的running time小于100ms的时候,不断优化对比优化准确率accuracy或者F1 score。一旦超出满足目标就不予考虑。

1.5训练/开发/测试集划分

dev集又叫交叉验证集。以任何形式使用测试集中的信息都是一种「窥探」(peeking),因此他们建议封存测试集,直到模型调整全部完成再作为最后的评估。如果测试集被封存后,你仍想在未知数据上进行模型性能评估,来选择性能好的模型假设,那么你需要将可用数据(不包含测试集)分为训练集和验证集。

开发集(验证集)和测试集都要来自同一分布,不然会发现在dev set上进行单一数值指标优化,最后在测试集上表现并不佳,因为可能本来就不是同一种分布。

1.6开发集和测试集和的大小

如今对数据比以前多的多,开发集和测试集只需数量够即可,比例不需要太大。

吴恩达deep learning笔记第三课 结构化机器学习项目

 1.7什么时候该改变开发/测试集的指标

如果一个Cat classifiar有AB两个算法,A错误率低,但是会推送色情图片(误认为猫),B错误率高,但是不会。

此时可以通过增加一个权重项大大增大分来成色情图片的损失。(这样必须自己过一遍开发集和测试集,将误识别为色情图片的样本标记处来 ,这样才能使用这个加权函数)

吴恩达deep learning笔记第三课 结构化机器学习项目

最重要的是整体步骤,两步“旋钮”:

第一步:考虑怎么设立一个单一数字的评估指标,即定义,是根据真正要做好的事情(测试集)定义的。第二部:考虑如何去打靶(优化指标),即改变各种超参数和结构来优化。

吴恩达deep learning笔记第三课 结构化机器学习项目

1.8为什么是人的表现

在训练时考虑人类水平表现,来决定工作的着力点。

因为现在机器学习算法在很多领域已经可以和人的表现竞争,当机器学习算法正确率小于人的表现的时候,可以通过人的表现来改善机器学习算法:如根据人为打标签的数据,人对错误的观点分析,对偏差/方差的更好分析。

1.9可避免偏差

可避免偏差,指的是有一些别的偏差或者误差有一个无法超越的最低水平,比如下图右边贝叶斯误差(最好的情况了)为7.5%, 实际误差8%,方差为10%。则可避免偏差在0.5%左右,减少2%的方差比减少0.5%偏差空间要大得多。左边的例子中减少偏差的空间就很大。

吴恩达deep learning笔记第三课 结构化机器学习项目

1.10理解人的表现

因为都是取human perform for bayes(贝叶斯),所以在算法已经很优化接近人类水平的时候,就要考虑贝叶斯误差的选取了,如下图当trainning error为5%时,贝叶斯误差选1,0.7,0.5问题都不大,当training error为0.7%时,就得特别注意,此时贝叶斯误差的选取应该是0.5%。

吴恩达deep learning笔记第三课 结构化机器学习项目

吴恩达deep learning笔记第三课 结构化机器学习项目

1.11超过人的表现

1.12改善模型表现

两大基础步骤:1.在训练集上训练的很好:训练更大的网络,或者训练更久,加入Momentum,RMSdrop,Adam,选择CNN,RNN,其他超参数等等

2.模型在开发集和测试集上也变现很好:正则化(L2,dropout),或者收集更多的数据等等

可以看看训练误差和贝叶斯误差(人类误差)之间的差值,即可避免偏差bias,换句话说,就是看看还能做得多好

然后看看训练误差和开发误差的差值,看看方差空间

2第二周 机器学习(ML)策略(2)

2.1进行误差分析

比如发现Cat classifiar正确率就90%,想想原因,比如说误判成狗,可以在错误判断的图片中看看有几张狗的照片,如果误判100张,其中5张是狗,则没必要关注,如果50张是狗,则需要关注。

也可以考虑多个原因,通过讲错误的图片显示出来,看看是否符合考虑的原因,通过人工画表判断。

吴恩达deep learning笔记第三课 结构化机器学习项目

2.2清楚标注错误的数据

如果发现有标记错误的数据需要关注,可以像2.1中表格一样并再加一栏incorrect label来统计标记错误的比例,如果比例很低,则可以不关注,如果比例很高,则需要重新修改开发/测试集标注。

修改标注时需要注意以下几点:1.必须同时修改开发/测试集的标注,因为开发集和测试集必须是同分布的。(打靶不能换目标)

2.训练集可以重新修改,允许训练集和开发/测试集分布有一点点不一样

2.3快速搭建你的第一个系统,并完成迭代

拿到一个新的项目时,步骤如下:

1.Set up dev/test set and metric 设立验证/测试集和单一数值指标

2.马上建立一个系统初始模型,找到训练集,训练一下,看看效果。

3.Use Bias/Variance analysis &Error analysis to prioritize next steps运用偏差/方差分析和上几节误差分析来确定下一步做什么。(偏差/误差分析是上一课中的各种方法调节。误差分析是之一节课的考虑误差来源以及下一步要做的方向)

2.4在不同的划分上进行训练并测试

如果有两个不同来源(不同分布)的数据集都将被用于训练测试。方法如下:

如果200000张网页的图片,10000张APP的图片,将来工作的场景是app图片

1.将两个数据集合并后打乱,再分配训练(205000),开发(2500), 测试集(2500)。优点:有了同一分布。 坏事:因为网页图片多,所以开发集的期望偏向网页图片,而应用场景是app图片。打靶目标是在优化网页图片。

2.205000张训练集:200000张网页图片和5000张app图片。开发集和测试集都是2500张app图片。

方法2更好

2.5不匹配数据划分的偏差和方差

估计学习算法的偏差和方差,真的可以帮你确定接下来应该优先做的方向。但当你的训练及来自和开发集和测试集不同分布时,分析偏差和方差的方式可能不一样。

如下图如果训练集和开发集分布相同,则可以通过正则化等方法改善

如果训练集和开发集分布不同,因为可能是算法没有讲过开发集的数据导致的,但问题就在于,不能确定有多少是因为算法没看到过开发集数据导致的,有多少是因为overfitting导致的。

吴恩达deep learning笔记第三课 结构化机器学习项目

解决方法如下:

从训练集中分一小部分training-dev set不予训练,然后用training-dec set也验证一个误差,观察与train error,train-dev error和dev error即可。如果前两者相差大,则泛化性差,后两者差距大(数据不匹配问题)则分布差距大。

吴恩达deep learning笔记第三课 结构化机器学习项目

2.6定位数据不匹配

如果训练集和开发集来自不同分布,做了误差分析,发现数据不匹配问题,怎么解决这个问题?并没有特别系统的方法来解决这个问题,但可以做一些如下尝试。

1.可以把训练集变的更像开发集一点(人工数据合成),比如纯净发音+汽车噪音=在汽车中的发音。但可能有一个问题,就是纯净发音有1000小时+汽车噪音1小时X1000 = 在汽车中的发音1000。这可能只是在众多汽车中发音的一个噪声子集,会发生对噪声过拟合的现象。

2.也可以收集更大类似开发集和测试集的数据。

2.7迁移学习

深度学习中最强大的理念之一就是有时候神经网络可以从一个任务中习得知识,并将这些知识应用到另一个独立的任务中。这就是迁移学习。 

比如图片x通过神经网络识别为猫对象y(训练后),再用来当做X射线扫描图。(这两个过程也叫预训练和微调

将y的输出层删去,并将进入最后一层的权重删掉,然后为最后一层重新赋予随机权重,然后让它在放射诊断数据上训练。(如果放射诊断数据多,就训练整个网络参数,如果少,可以就训练最后一或二层参数)。

吴恩达deep learning笔记第三课 结构化机器学习项目

迁移学习的意义:迁移来源问题你有很多数据,但迁移目标问题你没有那么多的数据,比如上面的例子,X放射的数据很少,图像的数据很多,可以先从图像识别训练中学到很多知识可以迁移。但如果数量相反,就没有意义了。

吴恩达deep learning笔记第三课 结构化机器学习项目

总结:如果你尝试优化任务B的性能,但这个任务数据较少,如X放射,在这种情况下,你可以找一个相关但不同的任务A,如图像识别,并从中学到很多低层次的特征,这也许能帮助网络在任务B上做得更好。但任务A比任务B样本少的时候并没有什么增益。

2.8多任务学习

在迁移学习中,任务是串行的,从任务A串行迁移至任务B,在多任务学习中,是同时开始学习的,试图让单个神经网络同时做几件事情,希望这里每个任务都能帮到其他任务。

多任务学习什么时候有意义?

吴恩达deep learning笔记第三课 结构化机器学习项目

多任务学习比较少见,就是你需要同时处理很多任务,都要做好,你可以同时训练所有这些任务。多任务学习有更高的性能,比单个完成各个任务性能更高。

在计算机视觉物体检测中,我们看到更多使用多任务学习的应用,人们通常在物体检测领域训练一个神经网络同时检测不同的物体,效率比多个网络分别检测高得多。

2.9什么是端到端的深度学习

就是x输入神经网络,y输出,不像传统流水线式的分解组合。

端对端深度学习在数据量大的时候可以表现得很好,也可以简化系统架构。

传统方法通过手工设计单独部件的流水线,结构复杂,在数据量少的情况下表现好。

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

优点:

1.端对端学习真的只是让数据说话(让网络学习)

2.所需手机设计的组件变少,简化设计流程

缺点:

1.可能需要大量数据

2,排除了可能有用的手工组件。(数据少的时候帮助很大)