Andrew Ng吴恩达深度学习Course_3笔记

术语概念

Bayes optimal error:贝叶斯最优错误率,即理论上可以达到的最优错误率

预训练:重新训练所有权重系数,初始参数由之前的模型训练得到的过程

第一周 ML策略(上)

正交化

将各参数独立化,一个参数的改变不影响其他参数,就像是把一个向量分解到各个轴上

image-20211125112013578

单一数字评估指标

模型具有准确率(Precision)和召回率(Recall),如果只看Precision的话,B模型更好。如果只看Recall的话,A模型更好。

因此我们使用单值评价指标F1 Score来评价模型好坏:
F 1 = 2 ⋅ P ⋅ R P + R F1=\frac{2·P·R}{P+R} F1=P+R2PR
这里写图片描述

从F1 Score来看,A模型比B模型更好。

除了F1 Score之外,我们还可以使用平均值作为单值评价指标来对模型进行评估。如下图所示,A, B, C, D, E, F六个模型对不同国家样本的错误率不同,可以计算其平均性能,然后选择平均错误率最小的那个模型(C模型)。

这里写图片描述

满足和优化指标

有时候,要把所有的性能指标都综合在一起,构成单值评价指标是比较困难的。解决办法是,我们可以把某些性能作为优化指标(Optimizing metic),寻求最优化值;而某些性能作为满意指标(Satisficing metic),只要满足阈值就行了。

举个猫类识别的例子,有A,B,C三个模型,各个模型的Accuracy和Running time如下表中所示:

这里写图片描述

cost = accaracy - 0.5 * running Time

Accuracy和Running time这两个性能不太合适综合成单值评价指标。因此,我们可以将Accuracy作为优化指标(Optimizing metic),将Running time作为满意指标(Satisficing metic)。也就是说,给Running time设定一个阈值,在其满足阈值的情况下,选择Accuracy最大的模型。如果设定Running time必须在100ms以内,那么很明显,模型C不满足阈值条件,首先剔除;模型B相比较模型A而言,Accuracy更高,性能更好。

概括来说,性能指标(Optimizing metic)是需要优化的,越优越好;而满意指标(Satisficing metic)只要满足设定的阈值就好了。

训练、开发、测试集

开发集和测试集要尽量来源于同一分布,可以尝试将所有数据打乱后随即分入开发集和测试集。

当样本数量小于一万,Train/dev/test sets比列设为:6: 2: 2;没有dev时,Train/test=7: 3;当样本数量很大(百万级别)时,比例常设为:98 : 1 : 1

简单来说,机器学习可以分为两个过程:

第一步:设定指标

第二步:通过优化系统来提高指标评分

人的水平表现

Bayes optimal error:贝叶斯最优错误率,即理论上可以达到的最优错误率

这里写图片描述

在超越人类之前,机器学习的进展通常很快,当接近或超越人类的表现之后,进展会慢下来,因为改善空间变小。

而不同的人群,对同一组样本的判断错误率也不同,一般来说,我们将表现最好的一组作为human-level performance。

对于自然感知类问题,例如视觉、听觉等,机器学习的表现不及人类。但是在很多其它方面,机器学习模型的表现已经超过人类了,包括:

  • Online advertising线上广告投放

  • Product recommendations产品推广

  • Logistics(predicting transit time)物流预测

  • Loan approvals贷款申请

这四个例子都是结构化模型,而在自然感知问题上,例如视觉、听觉等,机器学习的表现不及人类。

实际上,机器学习模型超过human-level performance是比较困难的。但是只要提供足够多的样本数据,训练复杂的神经网络,模型预测准确性会大大提高,很有可能接近甚至超过human-level performance。值得一提的是当算法模型的表现超过human-level performance时,很难再通过人的直觉来解决如何继续提高算法模型性能的问题。

可避免偏差

通常,我们把training error与human-level error之间的差值称为bias,也称作可避免偏差avoidable bias;把dev error与training error之间的差值称为方差variance。根据bias和variance值的相对大小,可以知道算法模型是否发生了欠拟合或者过拟合。

改善模型表现

监督学习的两个基本假设

1.你的算法对训练集的拟合很好,即可避免偏差很低

2.推广到开发/测试集的表现也很好,即方差低

解决可避免偏差avoidable bias的常用方法包括

  • 训练更大的模型
  • 使用更好的优化算法,如加入momentum, RMSprop, Adam
  • 寻找更好的神经网络架构或更好的超参数,如RNN,CNN

解决方差variance的常用方法包括

  • 更多的数据
  • 正则化:L2, dropout, data augmentation
  • 试用不同的神经网络架构

第二周 ML策略(下)

进行误差分析

为了提高模型准确率,我们可以使用误差分析error analysis,即分析错误样本中的影响因素比例,花费时间和精力着重解决这一影响判断的事物。例如,猫类识别模型中,可能有以下几个影响因素:

  • 被识别成猫的狗

  • 被识别成猫的大型猫科动物

  • 提高模糊图像的性能

    image-20220221140705535

通常来说,比例越大的因素,影响越大,越应该花费时间和精力着重解决这一问题。这种error analysis让我们改进模型更加有针对性,从而提高效率。如上图,猫科动物和模糊图像的影响占比较大,着重解决这些问题可以让模型准确率的提升更明显。

清除错误标注的数据

人工标注时可能出现标注错误的情况,当数据集足够大时,一两张错误影响不大可以忽略,但是如果是系统性的错误(大量标注错误),就将对模型造成影响,降低模型性能。

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

对于修正错误标注,有几条建议:

  • 对开发和测试集应用相同的过程,以确保它们继续来自相同的分布
  • 考虑一下同时检查你的算法识别正确和错误的例子
  • 训练和开发/测试数据现在可能来自略微不同的分布

快速搭建你的第一个系统并迭代

对于如何构建一个机器学习应用模型,Andrew给出的建议是先快速构建第一个简单模型,然后再反复迭代优化。

  • 建立开发/测试集和指标
  • 快速构建初始系统
  • 使用偏差/方差分析和误差分析来优先考虑下一步

在不同划分上进行训练和测试

当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。

虽然dev/test set质量不高,但是模型最终主要应用在对这些模糊的照片的处理上。面对train set与dev/test set分布不同的情况,有两种解决方法。

第一种方法是将train set和dev/test set完全混合,然后在随机选择一部分作为train set,另一部分作为dev/test set。例如,混合210000例样本,然后随机选择205000例样本作为train set,2500例作为dev set,2500例作为test set。这种做法的优点是实现train set和dev/test set分布一致,缺点是dev/test set中webpages图片所占的比重比mobile app图片大得多。例如dev set包含2500例样本,大约有2381例来自webpages,只有119例来自mobile app。这样,dev set的算法模型对比验证,仍然主要由webpages决定,实际应用的mobile app图片所占比重很小,达不到验证效果。因此,这种方法并不是很好。

第二种方法是将原来的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。这样保证了验证集最接近实际应用场合。这种方法较为常用,而且性能表现比较好。

不匹配数据划分的偏差与方差

如果train set和dev/test set来源于不同分布,则无法直接根据相对值大小来判断。

在可能伴有train set与dev/test set分布不一致的情况下,定位是否出现variance的方法是设置train-dev set。Andrew给train-dev set的定义是:“Same distribution as training set, but not used for training.”也就是说,从原来的train set中分割出一部分作为train-dev set,train-dev set不作为训练模型使用,而是与dev set一样用于验证。

这样,我们就有training error、training-dev error和dev error三种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。

总结一下human-level error、training error、training-dev error、dev error以及test error之间的差值关系和反映的问题:

image-20220221151238996

一般情况下,human-level error、training error、training-dev error、dev error以及test error的数值是递增的,但是也会出现dev error和test error下降的情况。这主要可能是因为训练样本比验证/测试样本更加复杂,难以训练。

定位数据不匹配

关于如何解决train set与dev/test set样本分布不一致的问题,有两条建议:

  • Carry out manual error analysis to try to understand difference between training dev/test sets (进行人工错误分析,试图理解培训开发/测试集之间的差异)
  • Make training data more similar; or collect more data similar to dev/test sets(使训练数据更加相似;或者收集更多类似于开发/测试集的数据)

为了让train set与dev/test set类似,我们可以使用人工数据合成的方法(artificial data synthesis)。例如说话人识别问题,实际应用场合(dev/test set)是包含背景噪声的,而训练样本train set很可能没有背景噪声。为了让train set与dev/test set分布一致,我们可以在train set上人工添加背景噪声,合成类似实际场景的声音。这样会让模型训练的效果更准确。但是,需要注意的是,我们不能给每段语音都增加同一段背景噪声,这样会出现对背景噪音的过拟合,效果不佳。这就是人工数据合成需要注意的地方。

迁移学习Transfer learning

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

如果我们已经有一个训练好的神经网络,用来做图像识别。现在,我们想要构建另外一个通过X光片进行诊断的模型。迁移学习的做法是无需重新构建新的模型,而是利用之前的神经网络模型,只改变样本输入、输出以及输出层的权重系数 W [ L ] , b [ L ] 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 ] W^{[l]}, b^{[l]} W[l],b[l]保持不变。

这里写图片描述

顺便提一下,如果重新训练所有权重系数,初始 W [ L ] , b [ L ] W^{[L]}, b^{[L]} W[L],b[L]由之前的模型训练得到,这一过程称为pre-training(预训练)。之后,不断调试、优化 W [ L ] , b [ L ] W^{[L]}, b^{[L]} W[L],b[L]的过程称为fine-tuning(微调)。pre-training和fine-tuning分别对应上图中的黑色箭头和红色箭头。

迁移学习之所以能这么做的原因是,神经网络浅层部分能够检测出许多图片固有特征,例如图像边缘、曲线(低层次特征)等。使用之前训练好的神经网络部分结果有助于我们更快更准确地提取X光片特征。二者处理的都是图片,而图片处理是有相同的地方,第一个训练好的神经网络已经帮我们实现如何提取图片有用特征了。 因此,即便是即将训练的第二个神经网络样本数目少,仍然可以根据第一个神经网络结构和权重系数得到健壮性好的模型。

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

这里写图片描述

总体来说,迁移学习的应用场合主要包括三点:

  • Task A and B have the same input x.
  • You have a lot more data for Task A than Task B.
  • Low level features from A could be helpful for learning B.

三因素:1、相似性;2、原有认知结构;3、学习心向与定势

多任务学习Multi-task learning

多任务模型的cost function为: 1 m ∑ i = 1 m ∑ j = 1 c L ( y j ( i ) ^ , y j ( i ) ) \frac1m\sum^m_{i=1}\sum^c_{j=1}L(\hat{y^{(i)}_j},y^{(i)}_j) m1i=1mj=1cL(yj(i)^,yj(i))

对应的lost function为: L ( y j ( i ) ^ , y j ( i ) ) = − y L(\hat{y^{(i)}_j},y^{(i)}_j)=-y L(yj(i)^,yj(i))=y

设有C个任务,则y的维度为(C,1)

值得一提的是,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: Amount of data you have for each task is quite similar.

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

端到端的深度学习

端到端(end-to-end)深度学习就是将所有不同阶段的数据处理系统或学习系统模块组合在一起,用一个单一的神经网络模型来实现所有的功能。它将所有模块混合在一起,只关心输入和输出。

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

这里写图片描述

如果训练样本足够大,神经网络模型足够复杂,那么end-to-end模型性能比传统机器学习分块模型更好。实际上,end-to-end让神经网络模型内部去自我训练模型特征,自我调节,增加了模型整体契合度。

end-to-end深度学习有优点也有缺点。

优点:

  • Let the data speak

  • Less hand-designing of components needed

缺点:

  • May need large amount of data

  • Excludes potentially useful hand-designed
    型更好。实际上,end-to-end让神经网络模型内部去自我训练模型特征,自我调节,增加了模型整体契合度。

end-to-end深度学习有优点也有缺点。

优点:

  • Let the data speak

  • Less hand-designing of components needed

缺点:

  • May need large amount of data

  • Excludes potentially useful hand-designed

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值