deeplearning笔记3:结构化机器学习项目

分类器评价指标

单一数字评价指标

所谓单一数字评价指标,是指如果分类器的评价指标有多个,如:precision,recall等,为了能够利用dev set从多个分类器中选出一个最好的分类器,用以后续迭代,比起运用“多个评价指标”,用“单一指标”选择会更加迅速,如,可将上述提到的两个指标综合成一个新的指标
,用以评价哪个分类器的performance最优。同样的,也可用"多个评价指标的average"来评价哪个分类器效果最优。

满足和优化指标

如果用于优化分类器的指标有多个,则,可将其中一个指标作为“优化项(like cost function)”,其它的指标作为“限制条件s.t.”:
optima : 指标i
s.t. 其它指标j
如下图所示:

训练/开发/测试集划分

dev/test set要能够反映你将来预测数据的distribution特征;dev/test set应该来自于同一个distribution

train/dev/test set的大小

什么时候改变dev / test set,以及指标


假如现在有一个用于“cat classification"的algorithmA,algorithmB,利用cross-validation(dev set)测得A的error为3%,B的error为5%,但是,由A分类器得到的结果中,将有更多的porn picture被分为cat,这显然不符合我们的预期,我们将更倾向于选择B,此时,就需要修改metric指标,从而能得到我们想要的algorithm。如:在cost function中,加入权重,如果x为porn则给其更大的惩罚力度,从而使最终得到的最优classifier中,仅有较小比例的porn被分为cat。

在学习cat classifier中,我们可以利用orthogonal策略,来制定学习计划:
step1:确定分类器优劣的评价指标metric(设定目标)
step2:分别设置多个node用来实现目标,如:{node1:瞄准,node2:射击}

在训练cat classifier时,如果用分辨率较高的picture作为train/dev/test,而实际应用中,则是用于预测较模糊的picture是否为cat,这种情况下,classifier表现往往不尽如人意,此时,应该改变metric或者dev/test set。

Tips:一个好的“分类器评估指标”和“dev set”能够让你更快的从多个分类器中选取一个最好的分类器。在实际应用中,如果你无法找到一个best metric,你可以先快速设立一个,然后开始运行code,在iteration的过程中,如果你发现这个metric不是很好,到时在重新设置,切不可“在没有evaluation metric和dev set”时,突兀的run太久,这样会降低“寻找最优分类器的效率”。

训练误差 VS 人类误差 VS 贝叶斯误差

我们认为“贝叶斯误差”是ML能够达到的最小误差,在实际应用中,我们将“人类误差”近似为“贝叶斯误差”,当“训练误差”与“人类误差”相近时,就说明ML已经达到了其performance的极限值,此时,应该着重减小variance,具体可通过“regularization或者增大trainingdataset size”的方法实现。而当“训练误差”与“人类误差”相差较大时,此时,应该着重改善“训练误差”,具体可通过“换一个复杂度较高的model”来降低“训练误差”。
下面罗列一些改善model的方法:

  • 降低model的偏差:
    1)try一个更复杂的模型;2)训练更长的时间/使用更好的优化算法(momentom , RMSprop,Adam);3)try新的neural network结构:不同的layer 层,不同的unit 数,不同的hyper parameter,等等;或者直接使用其他的 “神经网络框架(CNN,RNN)”;
  • 降低model的variance:
    1)使用更多的数据集;2)regularization(L2, dropout, data augmentation);3)换其他的 神经网络框架;

误差分析

这里主要着重分析一下“误差分析的思路”:

  • 在得到一个algorithm的误差以后,我们可以对dev set error中各个误分类问题做一下excel统计,分析一下各个误分类所占的比例,然后,着重优化那些“比例较大的误分类问题”,下面以cat classifier为例说明:
    分析一下:
    将狗误分为cat的问题比例
    great cat误分为cat的问题比例
    blurry picture误分的问题比例
    选择,比例最大的误分问题进行改进,从而优化dev error。
    在这里插入图片描述
  • 在对data进行标记时,将cat data标记为label=0,从而导致,在实际的data training中,dev error中有一部分是由于“人为因素(误标记)”而产生。
    针对此类问题,我们可以分析其在dev error中所占的比例,如果所占比例较大,比如占dev error比例超过50%,则我们应该纠正这些误标样本,从而更正dev error,而如果所占dev error的比例不大,则it is not worth to spend too much time on it。下面以cat classifier举例说明:
    首先,值得一提的是,In training set,Deep learning algorithm are robust to random errors , less robust to systematic errors;这里的random errors是指,由于工作人员的疏忽,而错把一些animal标记为label=1(cat),systematic errors是指,由于工作人员认知问题,错把一类animal错标为label=1(cat),在training set中,一些random error并不会对ML造成很大影响,但是,systematic error则会对ML造成很大影响。
    如下图所示:如果“overall dev set error”为10%,而由于“人为误分造成将classifier分类正确的点误认为分类错误”从而造成的errors due incorrect labels为0.6%,则,由于incorrect error过小,没有必要重新label那些mislabeled point,但是,如果errors due incorrect labels为6%,则it is worth to spend time on labeling。
  • 在矫正‘工作人员mislabel sample的label’时的一些注意事项:
  1. 应该同时对dev/test set进行矫正;
  2. 不管是algorithm分类正确/错误的sample,如果其label本身错误,则都应该进行矫正;
  3. 由于trainingdata数据量很大,因此,一般不对trainingdata中的mislabeled sample进行重新label(时间消耗过大),这也导致了trainingdata 与 dev/test data的distribution会略有不同;

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

具体步骤如下图(right-hand):
如果对于一个application,你已经有了一定的经验,或是有很多文献可参考,则在开始时,可直接构建一个复杂的模型,但是,如果你初次接触这个applicatIon,则建议你遵循PPT right-hand 的步骤,构建系统,首先,设定dev/test set metric;其次,快速构建一个简单的系统;再次,利用bias/Variance analysis或error analysis来分析优化的方向,进而改进系统;

Andrew Ng:一般team over-building 的情况要大于 under-building的情况;

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

(training data comes from slightly different distribution compared with test data)

下述例子示例了如何划分train set 和dev/test set;
以cat为例。如果你关心的是mobile phone中cat的分类,但是,数据量过小,因此,你又从web上下载了很多image,但是,二者分布明显不同,这种情况下数据集的划分为:
假如web data :200,000; phone data:10,000;
则train data:205,000(all web data and 5000 phone data); dev/test data: 2500(all from phone data);

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

(train set comes from different distribution compared with dev/test set)
误差分析

如果training set和dev set来自同一分步,而train error 要明显小于 dev error,此时,我们可以很肯定的说,ML问题主要为variance问题;而如果train set和dev set来源于不同的分布,我们则不能确定train error明显小于dev error是由于variance问题,还是由于train set和dev set来自不同的分布,导致train set训练难度较大(低分辨率图像),而在dev set上分类较容易(高分辨率图像)。为了搞清楚问题到底是出在哪里,我们可以利用下述方法解决:
首先设置一个train-dev set,他与train set有同样的分布,但是,不参加model的训练。
现假设:train set ,train-dev set具有相同的分布D1,dev set,test set具有相同的分布D2,D1与D2为不同的分布。
则如下图所示:

  • 当train error为:1%;train-dev error为9%;dev error为10%时:
    由于train error与train-dev error相差甚远,此时说明是variance的问题;
  • 当train error为:1%;train-dev error为1.5%;dev error为10%时:
    由于train-dev error与dev error相差甚远,此时说明是“数据不匹配问题(二者distribution不同所致)”;
  • 当human error为0;train error为:10%;train-dev error为11%;dev error为12%时:
    由于human error与train error相距甚远,此时说明是“bias问题”;
  • 当human error为0;train error为:10%;train-dev error为11%;dev error为20%时:
    由于human error与train error,train-dev error与dev error,均相距甚远,说明此时同时有“bias problem”和“数据不匹配 问题”;

    下面总结一下“一般规律”,如下图所示:
  • human error与train error之间差距说明为bias problem;
  • train error与train-dev error之间差距说明为variance problem;
  • train-dev error与dev error之间差距说明为data mismatched problem;
  • dev error与test error之间差距说明为overfitting problem。(note that:test set并不参与“分类器选择(即:算法开发环节)”,因此,当dev error小test error太多时,说明development部分可能存在overfitting,此时,应该增大dev set,降低overfitting)。
数据不匹配(train set与dev set来自不同的分布,导致model在dev set上的误差较大) 问题解决方法

如果通过“误差分析”发现”定位数据不匹配的问题”,则可通过以下方法解决:
手动的检查“training data”与“dev data”分布的区别,通过:1)增加与dev data相似的data到training data中,从而使train set与dev set具有较相似的distribution;2)通过“artificial synthesis”等方法,使得training data的类型与dev data类型相近,从而解决“定位数据不匹配”的问题,如:
在“speech recognition”中:
如果training data为:没有noise的speech;
Dev data为:有noise的speech;
则可通过人工拟合car noise,将其加入training data的方法,使得training data 与 dev data比较相似。但是值得注意的是,在下图情况下,拟合model可能出现overfitting的现象:
即:现有10,000个training speech,但是只有1 hour 的car noise,如果只是将这1hour的noise复制10,000份后加入training speech中,可能在model training的时候出现overfitting的现象。最好的方法是,找10,000份noise将其加入training speech,这样可以避免overfitting。

除上述提到的现象以外,还有一点需要注意,具体示例如下:
在‘car recognition’中:
Training data为:car image;
如果仅用20类car的image,通过各种“artificial method”,获得各种角度,方位的image,然后用这些artificial synthesis image作为training data,训练model,则此时可能出现overfitting。这是因为,虽然通过各种synthesis获得了大量的train set,但是,实际上,这些train set仅是通过20类car获得,因而,其“有效train set”很小。正确的做法是,用尽可能多种类的car作为training data,少用copy image。

迁移学习

什么是迁移学习?

迁移学习是指:你可以将一个任务(task A)中学到的知识,应用于另外一个任务(task B)中,但是前提是,这两个task具有足够多的相似性,如:都是image recognition task。举个例子,下图为两个训练好的neural network,第一个为animal recognition task的model1,第二个为speech recognition task的model2。
如果你此刻想训练一个model,能够进行“医学影像分析”,则可以在model output layer以及output weight,从而得到“医学影像分析”的model。如果,你的“医学影像data”足够多的话,也可以重新训练多层hidden layer的weight(以animal recognition task model的weight作为初始值)。
同样的,如果你想训练一个“word trigger系统”,则可以利用speech recognition task model,在此model的基础上,将output layer以及output weight去掉,然后利用“word trigger data”重新训练output weight,得到word trigger model。或者,如果word trigger data充足的话,也可以重新训练多层hidden layer的weight(以speech recognition task model的weight作为初始值)。又或者,你也可以在speech recognition model中,在多加入几层hidden layer进行训练,获得word trigger model。

运用迁移学习的先决条件

如果task A中的train set足够大,而task B中的train set非常小,无法进行model fit,则此时,可以将task A的知识应用于task B。如果情况刚好相反,task A的train set较小,而task B的train set较大,则此时运用“transfer learning”也不会获得非常显著的效果。
下图为利用transfer learning的先决条件:
1.Task A和Task B有相同的input
2.如果想将task A的知识运用于task B中,则与task B相比,task A应该具有更多的data.
3.Task A中model的前几层hidden layer对于task B的学习会非常有帮助。

多任务学习

什么是多任务学习

所谓多任务学习,是指对于一个sample,其output 有多个y={y1,y2,y3…}。
多任务学习训练,是训练一个model能够同时识别一个sample的若干个output label;而不是训练若干个model,分别用于识别一个sample中的不同label。在多任务学习中,其model的前几层hidden layer能够被用于识别sample的不同output,与训练若干seperate model相比,多任务学习的学习性能更优。
此外,当training data的output y中,如果有缺失值(question mark),则在“多任务学习”中,计算cost function时,可以将这些缺失值忽略,而利用其它有label的output(如下图所示),通过这种方式,可以更加高效的利用train data。
Note that:多任务学习中使用的cost function是logistics cost function的变种;

when dose multi-task learning make sense?

1.在多任务学习中,其model的前几层hidden layer,能够帮助识别sample中的各个label。
2.通常,在多任务学习中,对应每个label的识别任务,拥有的data set应该是相近的。当多任务学习目的,主要是对其中一个label_i进行识别,则其他的label_j task中的data set最好要大于label_i task 中的data set,在这种学习任务中,多任务学习可以将其他label_j识别过程中学到的知识应用于label_i的识别(迁移学习)。
3.多任务学习中,最好能训练一个large neural network,用以识别各个label task。
一些研究者发现,多任务学习 表现较差的原因主要是因为训练的neural network 不够large,此时,其表现可能要低于训练多个model。当其训练的neural network足够大时,多任务学习的 表现 要优于 学习多个single neural network to detect different object。

在实际应用中,transfer learning 应用频次要高于 multi-task learning。

end to end deep learn(端到端的深度学习)

什么是“端到端的深度学习”

在传统的深度学习中,在进行model training之前,有很多的data preprocessing 过程,而在“端到端的深度学习”中,可以省略这些preprocessing step,直接用一个neural network替代,即:
原始深度学习:input —— data preprocessing —— feature —— output
端到端深度学习:input —— output
以speech recgnition为例说明,其original train set为audios:
在原始深度学习中,在正式进行learning前,需要一些“预处理过程”,将audio转化为word(如下图),在将word作为algorithm的input,进行learning。
而在“端到端深度学习”中,可以直接省略这些“预处理过程”,直接将audios作为algorithm的input,进行learning。
利用“端到端深度学习”,需要很大的data set,以speech recgnition为例,如果其data set=3000,则其数据量过小,只能进行“原始深度学习”,而如果其data set=10,000,则可进行“端到端的深度学习”,并得到很好的效果。

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

1.端到端深度学习的利于弊
利:ML完全由data说话,不同“人工设定feature”
弊:端到端深度学习需要很多的data,且其将很多“人类知识:hand-designing feature”排出在外。

2.在决定是否要应用“端到端深度学习”,你可以问自己一个问题:你是否有足够的数据量来进行“端到端深度学习”。
在“自动化驾驶”研究中,汽车前方物体的识别可以用deep learning解决,但是,相比“端到端深度学习”,使用一些preprocessing 方法预处理data,在分别学习image中各个物体,这种方法,性能更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sarah ฅʕ•̫͡•ʔฅ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值