机器怎样能够学得更好?

本系列是台湾大学资讯工程系林軒田(Hsuan-Tien Lin)教授开设的《机器学习基石》课程的梳理。重在梳理,而非详细的笔记,所以可能会略去一些细节。算法

该课程共16讲,分为4个部分:app

  1. 机器何时可以学习?(When Can Machines Learn?)
  2. 机器为何可以学习?(Why Can Machines Learn?)
  3. 机器怎样学习?(How Can Machines Learn?)
  4. 机器怎样能够学得更好?(How Can Machines Learn Better?)

本文是第4部分,对应原课程中的13-16讲。机器学习

本部分的主要内容:函数

  • 过拟合问题,过拟合与噪声、目标函数复杂度的关系;
  • 正则化,正则化与VC理论的联系;
  • 验证,留一交叉验证和V-折交叉验证;
  • 三个学习原则,即奥卡姆剃刀、抽样误差和数据窥探。

1 过拟合问题

1.1 过拟合的发生

假设如今用带很小噪声的2次多项式生成了5个样本,对于这5个样本,其实用4次多项式就能够完美拟合它:oop

这样作可以使\(E_\text{in}=0\),但\(E_\text{out}\)却会很是大。学习

若是出现\(E_\text{in}\)很小,\(E_\text{out}\)很大的状况,就是出现了很差的泛化(bad generalization)。若是在训练的过程当中,\(E_\text{in}\)愈来愈小,\(E_\text{out}\)愈来愈大,就称为过拟合(overfitting)。测试

噪声和数据规模都会影响过拟合。先来看如下两个数据集:优化

  • 数据由10次多项式生成,有一些噪声;
  • 数据由50次多项式生成,无噪声。

数据集图像以下:
spa

若是咱们用2次和10次多项式分别拟合以上两个数据集,那么在从\(g_2 \in \mathcal{H}_2\)\(g_{10} \in \mathcal{H}_{10}\)的过程当中,会发生过拟合吗?3d

拟合结果以下:

比较后发现,在两个数据集中,都发生了过拟合!

来看学习曲线,当\(N\to \infty\)时显然\(\mathcal{H}_{10}\)会有更小的\(\overline{E_{out}}\),但\(N\)较小时它会有很大的泛化偏差。灰色区域就是过拟合发生的区域。

其实对于由无噪声的50次多项式生成的数据,“目标函数的复杂度”自己就能够看做相似的噪声。

接下来作个更细节的实验。用

\[\begin{aligned} y &= f(x) + \epsilon\\ &\sim \text{Gaussian}\left(\sum_{q=0}^{Q_f} \alpha_q x^q, \sigma^2 \right) \end{aligned} \]

生成\(N\)个数据,其中\(\epsilon\)是独立同分布的高斯噪声,噪声水平为\(\sigma^2\)\(f(x)\)关于复杂度水平\(Q_f\)是均匀分布的。也就是说,目标函数有\(Q_f\)\(\sigma^2\)两个变量。

而后,分别固定\(Q_f=20\)\(\sigma^2=0.1\),仍是分别用2次和10次多项式拟合数据,并用\(E_\text{out}(g_{10})-E_\text{out}(g_{2})\)度量过拟合水平。结果以下:

颜色偏红的区域,就是发生了过拟合。

加上去的\(\sigma^2\)高斯噪声可称为stochastic noise,而目标函数的次数\(Q_f\)也有相似噪声的影响,所以可叫deterministic noise

若是\(f\notin \mathcal{H}\),那么\(f\)必定有某些部分就没法被\(\mathcal{H}\)所捕捉到,最好的\(h^*\in\mathcal{H}\)\(f\)的差就是deterministic noise,它的表现与随机噪声没什么不同(与伪随机数生成器相似)。它与stochastic noise的不一样之处在于,它与\(\mathcal{H}\)有关,且对于每一个\(x\),它的值是肯定的:

1.2 过拟合的处理

通常来讲,处理过拟合的思路有如下几种:

  • 从简单的模型开始;
  • 数据清洗(data cleaning),将错误的数据修正(如更正它的标签类别);
  • 数据剪枝(data pruning),删去离群点(outlier);
  • data hinting,当样本量不够时,能够对现有样本作些简单的处理,增长样本量,如在数字分类中,能够将数据微微旋转或平移而不改变它们的标签,这样就可增大样本量;
  • 正则化(regularization),见下节;
  • 验证(validation),见后文。

2 正则化(regularization)

2.1 正则化

正则化的思想是比如从\(\mathcal{H}_{10}\)“逐步回退”到\(\mathcal{H}_{2}\)。这个名字的由来是在早期作函数逼近(function approximation)时,有不少问题是ill-posed problems,即有不少函数都是知足问题的解,因此要加入一些限制条件。从某种意义上说,机器学习中的过拟合也是“正确的解太多”的问题。

\(\mathcal{H}_{10}\)中假设的通常形式为

\[w_0+w_1 x+w_2 x^2+w_3 x^3+\cdots+w_{10} x^{10} \]

\(\mathcal{H}_{2}\)中假设的通常形式为

\[w_0+w_1 x+w_2 x^2 \]

其实只要限制\(w_3=w_4=\cdots=w_{10}=0\),就会有\(\mathcal{H}_{10}=\mathcal{H}_{2}\)。若是在用\(\mathcal{H}_{10}\)时加上这个限制,其实就是在用\(\mathcal{H}_2\)作机器学习。

\(\mathcal{H}_2\)的灵活性有限,但\(\mathcal{H}_{10}\)又很危险,那有没有折中一些的假设集呢?不妨把这个条件放松一些,变成\(\sum\limits_{q=0}^{10}\mathbf{1}_{[w_1\ne 0]}\le 3\),记在该限制下的假设集为\(\mathcal{H}_2'\),有\(\mathcal{H}_{2}\subset \mathcal{H}_{2}' \subset \mathcal{H}_{10}\),即它比\(\mathcal{H}_{2}\)更灵活,但又没有\(\mathcal{H}_{10}\)那么危险。

\(\mathcal{H}_{2}'\)下,求解的问题转化成了

\[\min\limits_{\mathbf{w}\in \mathbb{R}^{10+1}} E_\text{in}(\mathbf{w})\quad \text{s.t. } \sum\limits_{q=0}^{10}\mathbf{1}_{[w_1\ne 0]}\le 3 \]

这是个NP-hard问题,复杂度很高。不如再将它变为

\[\min\limits_{\mathbf{w}\in \mathbb{R}^{10+1}} E_\text{in}(\mathbf{w})\quad \text{s.t. } \sum\limits_{q=0}^{10}w^2_q \le C \]

记该假设集为\(\mathcal{H}(C)\),它与\(\mathcal{H}_2'\)是有部分重叠的,而且对于\(C\)有软的、光滑的结构:

\[\mathcal{H}_{0} \subset \mathcal{H}_{1} \subset \cdots \subset \mathcal{H}_{\infty} =\mathcal{H}_{10} \]

记在\(\mathcal{H}(C)\)下找到的最优解为\(\mathbf{w}_\text{REG}\)

在没有正则化时,用梯度降低更新参数的方向是\(-\nabla E_\text{in}(\mathbf{w})\)。而在加入了正则化\(\mathbf{w}^T \mathbf{w}\le C\)的限制时,必须在该限制下更新,以下图:

\(\mathbf{w}^T \mathbf{w}= C\)的法向量(normal vector)就是\(\mathbf{w}\),从图中可知,只要\(-\nabla E_\text{in}(\mathbf{w})\)\(\mathbf{w}\)不平行,就可继续在该限制降低低\(E_\text{in}(\mathbf{w})\),所以,达到最优解时,必定有

\[-\nabla E_\text{in}(\mathbf{w}) \propto \mathbf{w}_\text{REG} \]

由此,问题能够转化为求解

\[\nabla E_\text{in}(\mathbf{w}_\text{REG}) +\dfrac{2 \lambda}{N} \mathbf{w}_\text{REG}=0 \]

其中\(\lambda\)是引入的拉格朗日乘子(Lagrange multiplier)。假设已知\(\lambda>0\),只须要把梯度的式子写出来,即有:

\[\dfrac{2}{N}(X^T X\mathbf{w}_\text{REG}-X^T \mathbf{y})+\dfrac{2 \lambda}{N} \mathbf{w}_\text{REG}=0 \]

直接求解便可得

\[\mathbf{w}_\text{REG}\leftarrow (X^T X+\lambda I)^{-1} X^T\mathbf{y} \]

只要\(\lambda>0\)\(X^T X+\lambda I\)就是正定矩阵,它必定可逆。

在统计学中,这一般叫岭回归(ridge regression)。

换一种视角来看,求解

\[\nabla E_\text{in}(\mathbf{w}_\text{REG}) +\dfrac{2 \lambda}{N} \mathbf{w}_\text{REG}=0 \]

就等价于求解(至关于对上式两边取积分)

\[\min\limits_{\mathbf{w}} E_\text{in}(\mathbf{w})+\dfrac{\lambda}{N}\mathbf{w}^T\mathbf{w} \]

\(\mathbf{w}^T\mathbf{w}\)可叫regularizer,整个\(E_\text{in}(\mathbf{w})+\dfrac{\lambda}{N}\mathbf{w}^T\mathbf{w}\)可叫做augmented error \(E_\text{aug}(\mathbf{w})\)

这样,本来是给定\(C\)后解一个条件最值问题,如今转化成了一个给定\(\lambda\)的无条件最值问题。

可将\(+\dfrac{\lambda}{N}\mathbf{w}^T\mathbf{w}\)称为weight-decay regulariztion,由于更大的\(\lambda\),就至关于让\(\mathbf{w}\)更短一些,也至关于\(C\)更小一点。

一个小细节:在作特征变换时,若是用\(\Phi(\mathbf{x})=(1,x,x^2,\ldots,x^Q)\),假设\(x_n \in [-1,+1]\),那么\(x^q_n\)会很是小,这一项原本就须要很大的\(w_q\)才能起到做用,若是此时再用正则化,就对高维的系数有些“过分惩罚”了,由于它原本就要比较大才行。所以,可在多项式的空间中找出一些正交的基函数(orthonormal basis function),这是一些比较特别的多项式,叫勒让德多项式(Legendre Polynomials),再用这些多项式这样作特征变换\((1,L_1(x),L_2(x),\ldots,L_Q(x))\)便可。前5个勒让德多项式以下图:

2.2 正则化与VC理论

在最小化augmented error的时候,尽管它与带约束最值问题是等价的,但在计算时,其实并无真正的将\(\mathbf{w}\)限制在\(\mathcal{H}(C)\)中。那么正则化到底是怎么发生的?

能够从另外一个角度看augmented error:

\[E_\text{aug}(\mathbf{w})=E_\text{in}(\mathbf{w})+\dfrac{\lambda}{N}\mathbf{w}^T\mathbf{w} \]

若记\(\mathbf{w}^T\mathbf{w}\)\(\Omega(\mathbf{w})\),它度量的是某个假设\(\mathbf{w}\)的复杂度。而在VC Bound中

\[E_\text{out}(\mathbf{w})\le E_\text{in}(\mathbf{w})+\Omega(\mathcal{H}) \]

\(\Omega(\mathcal{H})\)度量的是整个\(\mathcal{H}\)的复杂度。若是\(\dfrac{\lambda}{N}\Omega(\mathbf{w})\)\(\Omega(\mathcal{H})\)有某种关联,\(E_\text{aug}\)就能够直接做为\(E_\text{out}\)的代理,不须要再经过作好\(E_\text{in}\)来作好\(E_\text{out}\),而同时,又能够享受整个\(\mathcal{H}\)的高度灵活性。

再换个角度,本来对于整个\(\mathcal{H}\)\(d_\text{VC}(\mathcal{H})=\tilde{d}+1\),而如今至关于只考虑\(\mathcal{H}(C)\)中的假设,也就是说VC维变成了\(d_\text{VC}(\mathcal{H}(C))\)。能够定义一个“有效VC维”\(d_\text{EFF}(\mathcal{H},\mathcal{A})\),只要\(\mathcal{A}\)中作了正则化,有效VC维就会比较小。

2.3 更通常的正则项

有没有更通常的正则项\(\Omega(\mathbf{w})\)?该如何选择呢?有如下建议:

  • 与目标有关(target-dependent),若是知道目标函数的一些性质,就能够写出来,好比咱们预先知道目标函数是接近于偶函数的,那就能够选取\(\sum \mathbf{1}_{[q \text{ is odd}]} w^2_q\)
  • 合理的(plausible),能够选平滑的或简单的,如为了稀疏性而选L1正则项\(\sum\vert w_q \vert\),下文会说明;
  • 友好的(friendly),即容易优化,如L2正则项\(\sum w_q^2\)
  • 就算选的正则项很差,也没有关系,由于能够靠\(\lambda\)来调节,最差也就是至关于没有加入正则项。

L1正则项以下图:

它是凸的,但不是到处可微,加入它以后,解具备稀疏性。若是在实际中须要有稀疏解,L1就会颇有用。

\(\lambda\)要怎么选呢?可根据\(E_\text{out}\)的状况选出的最优\(\lambda\),示例以下(加粗点为最优\(\lambda\)):

从图中能够看到,噪声越大,越须要增长regularization。

但通常状况下,噪声是未知的,该如何选择合适的\(\lambda\)

3 验证(Validation)

3.1 验证集

\(\lambda\)该如何选择?咱们彻底不知道\(E_\text{out}\),而且也不能直接经过\(E_\text{in}\)作选择。若是有一个历来没被使用过的测试集就行了,这样就能够根据测试集进行选择:

\[m^*=\mathop{\arg\min}\limits_{1\le m\le M} \left( E_m=E_\text{test}(\mathcal{A}_m(\mathcal{D})) \right) \]

而且,这样作是有泛化保证的(Hoeffding):

\[E_\text{out}(g_{m^*})\le E_\text{test}(g_{m^*})+O(\sqrt{\dfrac{\log M}{N_\text{test}}}) \]

但哪里有真正测试集?只能折中地从\(\mathcal{D}\)划分出一部分数据做为验证集\(\mathcal{D}_\text{val}\subset \mathcal{D}\)了,固然,也要求它是在过去从未被\(\mathcal{A}_m\)使用过的。

划分验证集\(\mathcal{D}_\text{val}\)的过程以下:

用训练集获得的\(g^-_m\),也能够有泛化保证:

\[E_\text{out}(g_m^-)\le E_\text{val}(g_m^-)+O(\sqrt{\dfrac{\log M}{K}}) \]

作验证时的通常流程以下:

能够看到,在用验证集选出最好的模型\(g^-_{m^*}\)后,仍是要用全部的数据再训练一个最好的模型\(g_{m^*}\)出来,通常来讲此次训练获得的\(g_m^*\)会因为训练数据量的更大而有更低的\(E_\text{out}\),见下图:

图中最下面的虚线为\(E_\text{out}\)。能够看到,\(K\)不能过大或太小,若是\(K\)太小,虽然\(g_m^-\approx g_m\),但\(E_\text{val}\)\(E_\text{out}\)会差异很大,而若是\(K\)过大,尽管\(E_\text{val}\approx E_\text{out}\),但会使\(g_m^-\)\(g_m\)差不少。

咱们真正想要作到的是

\[E_\text{out}(g)\approx E_\text{out}(g^-)\approx E_\text{val}(g^-) \]

第一个约等号要求\(K\)较小,第二个约等号要求\(K\)较大,所以必须选一个合适的\(K\),按经验法则可选\(K=\dfrac{N}{5}\)

3.2 留一交叉验证(LOOCV)

若是让\(K=1\),即只留一个样本\(n\)做为验证集,记

\[E_\text{val}^{(n)}(g_n^-)=\text{err}(g_n^-(\mathbf{x}_n),y_n)=e_n \]

但单个\(e_n\)没法告诉咱们准确的信息,要想办法对全部可能的\(E_\text{val}^{(n)}(g_n^-)\)取平均。能够用留一交叉验证(Leave-One-Out Cross Validation):

\[E_\text{loocv}(\mathcal{H},\mathcal{A})=\dfrac{1}{N}\sum\limits_{n=1}^{N} e_n=\dfrac{1}{N} \sum\limits_{n=1}^{N} \text{err}(g_n^- (\mathbf{x}_n),y_n) \]

咱们但愿的是有\(E_\text{loocv}(\mathcal{H},\mathcal{A})\approx E_\text{out}(g)\)。可做证实:

\[\begin{aligned} &\mathop{\mathcal{E}}\limits_{\mathcal{D}} E_\text{loovc}(\mathcal{H},\mathcal{A})\\ =& \mathop{\mathcal{E}}\limits_{\mathcal{D}}\dfrac{1}{N}\sum\limits_{n=1}^{N} e_n\\ =&\dfrac{1}{N} \sum\limits_{n=1}^{N} \mathop{\mathcal{E}}\limits_{\mathcal{D}} e_n\\ =&\dfrac{1}{N} \sum\limits_{n=1}^{N} \mathop{\mathcal{E}}\limits_{\mathcal{D}_n} \mathop{\mathcal{E}}\limits_{(\mathbf{x}_n,y_n)} \text{err}(g_n^-(\mathbf{x}_n),y_n)\\ =&\dfrac{1}{N} \sum\limits_{n=1}^{N} \mathop{\mathcal{E}}\limits_{\mathcal{D}_n} E_\text{out}(g_n^-)\\ =&\dfrac{1}{N} \sum\limits_{n=1}^{N} \overline{E_\text{out}}(N-1)\\ =& \overline{E_\text{out}}(N-1) \end{aligned} \]

因为\(E_\text{loovc}(\mathcal{H},\mathcal{A})\)的指望会告诉咱们一些关于\(E_\text{out}(g^-)\)的指望的信息,所以也叫做\(E_\text{out}(g)\)的“几乎无偏估计”(almost unbiased estimate)。

用手写数字识别——对数字是否为1进行分类——看看效果,两个基础特征为对称性和平均强度(average intensity),对它们进行特征变换(增长特征数量),再分别用\(E_\text{in}\)\(E_\text{loocv}\)进行参数选择(参数是变换后的特征个数),结果以下:

若是将\(E_\text{out}\)\(E_\text{in}\)\(E_\text{loocv}\)分别随特征数变化而变化的状况画出来,如图:

3.3 \(V\)-折交叉验证

若是有1000个点,作留一交叉验证就要计算1000次\(e_n\),每次计算还要用999个样本作训练,除了少数算法(如线性回归,它有解析解),在大多数状况下会很是耗时间。另外一方面,由上一节最后可看到,因为\(E_\text{loocv}\)是在单个点上作平均,结果会有跳动,不够稳定。所以,在实际中,loocv并非很经常使用。

在实际中,更经常使用的是\(V\)折交叉验证(\(V\)-Fold Cross Validation),即将\(\mathcal{D}\)随机分为\(V\)等分,轮流用每一份作验证,用剩下的\(V-1\)份作训练,在实际中通常常取\(V=10\),以下图:

这样能计算出

\[E_\text{cv}(\mathcal{H}, \mathcal{A})=\dfrac{1}{V}\sum\limits_{v=1}^{V} E_\text{val}^{(v)}(g_v^-) \]

再用它对参数作选择:

\[m^*=\mathop{\arg\min}\limits_{1\le m\le M} \left( E_m=E_\text{cv}(\mathcal{H}_m, \mathcal{A}_m) \right) \]

值得注意的是,因为验证过程也是在作选择,它的结果依旧会比最后的测试结果乐观一些。所以,最后重要的是测试的结果,而非找出来的最好的验证的结果。

4 三个学习的原则

这里介绍三个学习的原则。

4.1 奥卡姆剃刀

首先是奥卡姆剃刀(Occam's Razor)。

An explanation of the data should be made as simple as possible, but no simpler.

--Albert Einsterin (?)

这句话传说是爱因斯坦所说,但没有证据。最先可追溯到奥卡姆的话:

entia non sunt multiplicanda praeter necessitatem (entities must not be multiplied beyond necessity)

--William of Occam (1287-1347)

在机器学习中,这是说能拟合数据的最简单的模型每每是最合理的。

什么叫简单的模型呢?对于单个假设\(h\)来讲,要求\(\Omega(h)\)较小即参数较少,对于一个模型(假设集)\(\mathcal{H}\)来讲,要求\(\Omega(\mathcal{H})\)较小即它没包含太多可能的假设。这二者是相关的,好比\(\vert \mathcal{H} \vert\)规模是\(2^\ell\),那么其实只须要\(\ell\)个参数就能够描述全部的\(h\),所以小的\(\Omega(\mathcal{H})\)也就意味着小的\(\Omega(h)\)

从哲学意义上说,越简单的模型,“拟合”发生的几率越小,若是真的发生了,那就说明数据中可能真的有一些比较重要的规律。

4.2 抽样误差

第二个是要注意抽样误差(Sampling Bias)。

若是数据的抽样过程存在误差,那么机器学习也会产生一个有误差的结果。

在讲解VC维时,提到过一个前提条件,就是训练数据和测试数据须要来自同一个分布。当没法知足时,经验法则是,尽量让测试环境和训练环境尽量匹配。

4.3 数据窥探

第三是要注意数据窥探(Data Snooping)。

若是你经过观察,发现数据比较符合某个模型,进而选用该模型,这是比较危险的,由于至关于加入了你大脑中的模型的复杂度。

在任何使用数据的过程当中,其实都是间接窥探到了数据。在窥探了数据的表现后,作任何决策,都会引入“大脑”复杂度。

好比在作scaling时,不能把训练集和测试集放在一块儿作scaling,而只能对训练集作。

其实在机器学习的前沿研究中,也存在相似的状况。好比第一篇论文发现了\(\mathcal{H}_1\)会在\(\mathcal{D}\)上表现较好,而第二篇论文提出了\(\mathcal{H}_2\),它在\(\mathcal{D}\)上比\(\mathcal{H}_1\)表现得更好(不然就不会发表),第三篇也如此……若是将全部论文看做一篇最终版的论文,那么真正的VC维实际上是\(d_\text{vc}(\cup_m \mathcal{H}_m)\),它会很是大,泛化会很是差。这是由于其实在每一步过程当中,做者都经过阅读前人的文献而窥探了数据。

所以在作机器学习时,要审慎地处理数据。要避免用数据来作一些决策,即最好事先就将领域知识加入到模型中,而不是在观察了数据后再把一些特性加入模型中。另外,不管是在实际操做中,仍是在看论文过程当中,或者是在对待本身的结果时,都要时刻保持怀疑。