Machine Learning Foundations 15: Validation | Cheney Shen

Technology blog

Machine Learning Foundations 15: Validation


 
 

总结:Validation(验证)

从要选择一个好的模型来做切入:如果用 Ein 做选择是很危险的,但是你没有办法用 Etest 来做选择,我们用 Validation来做选择,我们做了相应的理论证明。

再讲 leave one out cross validation:假设validation最小达到1,然后做很多次取平均结果,理论上结果会比较好,但是这要花很大的计算上的时间。

实际上 leave one out vross validation没有那么可行,常用的是 v-fond cross validation,就是切5/10份就可以。

 
 


 
 

Validation (验证)

 
 

上一次讲到避免 overfitting 的一种方式叫做 regularization:在 Ein 上面加上 regularizer 项变成 E_aug,对此做 minimize 的动作,这样可以有效的限制 model complexity。

 
 

面临的问题的是:整个过程当中有很多的选择要做,这里 validation 就是用来帮助你作出合理的选择。

 
 


 
 

即使你要做 binary classification,根据当前所学,你已经可以使用 PLA, pocket, linear regression, logistic regression 等很多种方法。

 
 

这些方法存在的一些需要做选择的地方:迭代次数T,每一步步长n,特征转换sigma,错误衡量regularizer方法omega,regularizer强度lamda,等等。

 
 

你面临那么多的选择,而且组合还是叠加的,那么我们怎么来做选择?

 
 


 
 

我们之前其实就引导大家做过选择了,譬如光看着两个图的话,你会选择几次曲线?但是以前没有系统的来阐述这个问题。

 
 

已知:我们有 M 个模型,每个模型由他自己的 hypothiesis set,有他相对应的演算法。

目标:我们希望从 M 个里面选出某一个,然后把资料用在这个模型上面,最后得到的那个 g 会很小,选出来的那个用星号来标识表示最好的 Eout(gm*)。

但是 Eout 不知道,所以不能够直接用 Eout做选择,因此要思考新的方法。

这就是ML里面最重要的问题。

 
 

因此怎么选择?

 
 

肉眼看:

不可以,那是人的学习不是机器学习。

 
 


 
 

选择 Ein 最小的:

 
 

在这样的情况下,你用 1126 维度的phine 一定要比 phine1 好,因为曲线越复杂,Ein可以做到的越小,所以你会去选择高维度的曲线。不加 regularizer一定比加上好,因为加regularizer会导致曲线fit已知信息的能力下降。

这样子会导致 overfitting。

 
 

如果算法1选出h1 的时候Ein最小,算法2选出h2的时候Ein最小。这样整体来看就是要选一个 H1并上H2的hypothiesis set 里面选择最好的,增加了复杂度。(这边的例子莫名其妙,我的理解是各个H都是从整个目标model出来的,而这里最好的是用所有的已知数据的Ein最小,所以才会存在各个H的并集。)

 
 

因此用 Ein 来选择是很危险的。

 
 


 
 

找一串测试的资料,来看看到底哪个模型的表现最好:

 
 

可以得到的保证是 finite-bin hoeffding


以前的课推到过,这样确实可以得到比较好的效果。

 
 

问题是你找得到测试资料么?

 
 


 
 

比较:

 
 

Ein 做决定:只需要已知的资料,拿得到这些资料,但是这些资料决定了H,容易overfitting

Etest 做决定:需要额外的测试资料,但事实上根本没有这些资料,但是这些资料是没被使用过的,不会出问题。

 
 

综合上面两种:

 
 

Eval 做决定:对于所有已有的资料,一部分用于H,留下一部分只用于测试并做选择。

 
 


 
 

小测验

 
 


 
 

从已知的资料里面分出一部分做测试,这部分资料的大小定义为K,叫做验证资料,用来模拟测试资料,验证的时候产生的错误叫做 Eval(验证的错误)

 
 

因为已知的资料就是来自于 目标模型,而Dval就是来自于已知的资料,所以随机从已知资料抽取一部分K作为Dval就可以保证, Dval也来自于目标模型。

 
 

切出来N-k的数据叫做训练资料Dtrain,用于送到模型里面选一个hypothiesis。这里定义为 gm-, 因为相对来说训练资料减少了。

 
 

这里不同的数据用于训练和验证,可以得到的理论保障是:


 
 


 
 

做法过程(右图):

Dtrain 送到演算法里面,得到一群 gm- 以后,然后通过Dtest 来获得各个的验证错误,最后选择验证错误最小的。

 
 

问题是上面讲的都是 g- 而不是 g,一般来说资料量越多能选出的模型越好,因此如果你获得的 gm*- 对应的 Eout 要比 gm* 对应的差一些,就有下面的公式:


(灰色是因为,这没有经过严格证明,但实际上是这样)

 
 

这样我们结合 gm- 的 finite-bin hoeffding,就有上面黄色区域所示的公式。

 
 


 
 

如果将 validation 用在五次/十次多项式的时候的结果 。

 
 

上图横轴是你用的验证资料的数量,纵轴则是Eout,越低越好。

使用 Ein 来做选择是黑色实线,这时候选的总是10次多项式;

使用 Etest 来做选择是黑色虚线,这时候应该总是选最好的,但是你做不到这件事;

使用 Eval 来做选择,但回传 gm- ;

使用 Eval 来做选择,但回传 gm,选择5/10次多项式以后再重新算一个g5/10回传回去用。

 
 

蓝色的线总是比红色的低,验证上面的灰色公式,数据量大了以后总是相对更好。

蓝色的线总是比Ein低,就是说使用 Eval 会比 Ein 好。

红色的线有时候比 Ein 还差,因为 Dtrain 变小了,用了很少的资料算的 Eval 还不一定比 Ein 好。

 
 


 
 

上面告诉我们: 用于 validation 的数据资料的大小是很重要的。

 
 

上面的推论基于:Eout(g), Eout(g-) 够像,Eout(g-),Eval(g-)够像。因为我们是根据 Eval(g-) 做选择,选择 Eout(g) 最小的。

 
 

但是这两个等式对于 K 的大小的要求是不一样的,前面的希望 K 小,后面的希望 K 大。

大的K: 红色的和蓝色的线差很多,

小的K:Eval(g-) 和 Eout(g-) 接近不能确定。

 
 

到底 K 多大合适:一般是资料总数的五分之一。

 
 


 
 

小练习。

 
 


 
 

考虑 K 非常小,等于1.

则 g, g- 非常非常接近;Eval(g-), Eout(g-) 相似就比较难满足了。

 
 


表示留了n笔资料做validation;


表示减掉了n笔资料的g。


看看n笔资料上的错误是多少,标记为en(验证n笔资料的错误)

 
 

如果只一个 en 的话,不能保证他接近于 eout(g),但是如果我们有很多笔 en 的话,是不是可以确定 eout(g) 。

 
 

交叉验证(cross validation):每次留 n 笔数据,做很多次训练和验证,取平均结果。交叉的意思是,同一笔资料,有时候是用于训练,有时候是用于验证。

 
 

Eloocv(H, A):交叉验证的平均结果。

期望的事情是 Eout(g) 接近 Eloocv(H, A)。

 
 


 
 

假设我们有三个点,跑上面的情况,每次留一个验证,得到上面三图;在上面的结果取平均获得 Eloocv(linear)。

假设用常数来分,则有下面三幅图,也有三种情况,同样取平均得到 Eloocv(constant)

 
 

结果你会发现下面结果比较好,也就是说只有三个点这种超级简单情况常数就够用来分类了。

 
 

这就是使用 交叉验证 的方法过程步骤。

 
 



Eloocv 到底能不能告诉我们 Eout(g) 有多好?

大概可以。

 
 

目标:

我们要证明的是 N笔资料的 Eloocv


和 N-1笔资料的 Eout


是一样的。

 
 

过程:

第一步把期望和sum交换,因为两者是线性的;

en有两个部分:训练用的 + 验证用的,en则用其定义替换;

蓝色 sum 部分以及后面的总和 就是 Eout(g-);

红色 sum (Eout(gn-)) 就是 Eout(N-1) 的平均;

N-1笔资料的 Eout 就是 Eout(g-) 的平均值。

 
 

因此上面的证明目标成立。

 
 


 
 

手写辨识的例子的结果。

 
 

横轴表示的是特征维度,纵轴是错误率,蓝色表示使用 Ein 做 validation,红线表示直接使用目标 Eout 来做 validation,黑线就是交叉验证的方式来做的结果,和用 Eout 很接近。

 
 


 
 

小测验

 
 


 
 

接下来看 Eloocv 的问题是什么?

 
 

我有1000个点就要计算 1000次,每次丢999个点训练,一个点验证,非常花时间,而且计算的时候除了有一些有特殊解,其他的计算也很复杂费时。

 
 

用单一个点做衡量,最后用平均的方式消除变动,还是很不容易的,像上面的图的曲线有跳动,因此也不算稳定。

 
 

因为有着两个问题,所以其实在实际上 Eloocv 也不是很常用。

 
 


 
 

实际上需要的是:降低在做交叉验证的时候的计算量。

 
 

Eloocv 切的实在是太细,那么这里我们不要切那么细来做,可以有效减少计算量。

 
 

这样的话也一样获得平均的错误,叫做 Ecv。

 
 

那我们怎么知道要切几份,实际上常用的是切10份。

 
 


 
 

最后讲一下实际上常用的一些 validation 原则:

 
 

通常 cross-validation 要比 single-validation 要来得好,相对比较稳定,但是计算量会比较大。

通常情况下 cross-validation 切5份/10份表现就不错了。

 
 

Validation 带来的不一样的地方:

 
 

训练模型是在大大的 hypothiesis set 里面做选择;validation 则是在有限的train model里面选。

Train 像是初赛,validation像是决赛,最终选出结果。

 
 

因为 validation 还是在做选择,因此其结果还是会比真实的结果乐观(optimistic)一点。

所以 测试的表现 才是你要注意的点,而不是把 validation做到极致。

 
 


 
 

小测验。

 
 


 
 

总结:Validation(验证)

从要选择一个好的模型来做切入:如果用 Ein 做选择是很危险的,但是你没有办法用 Etest 来做选择,我们用 Validation来做选择,我们做了相应的理论证明。

再讲 leave one out cross validation:假设validation最小达到1,然后做很多次取平均结果,理论上结果会比较好,但是这要花很大的计算上的时间。

实际上 leave one out vross validation没有那么可行,常用的是 v-fond cross validation,就是切5/10份就可以。

 
 

下一次:讲一些小秘密

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 


Post a Comment

Your email address will not be published. Required fields are marked *

  • Categories

  • Tags