机器怎样可以学得更好?
本系列是台湾大学资讯工程系林軒田(Hsuan-Tien Lin)教授开设的《机器学习基石》课程的梳理。重在梳理,而非详细的笔记,因此可能会略去一些细节。
该课程共16讲,分为4个部分:
- 机器什么时候能够学习?(When Can Machines Learn?)
- 机器为什么能够学习?(Why Can Machines Learn?)
- 机器怎样学习?(How Can Machines Learn?)
- 机器怎样可以学得更好?(How Can Machines Learn Better?)
本文是第4部分,对应原课程中的13-16讲。
本部分的主要内容:
- 过拟合问题,过拟合与噪声、目标函数复杂度的关系;
- 正则化,正则化与VC理论的联系;
- 验证,留一交叉验证和V-折交叉验证;
- 三个学习原则,即奥卡姆剃刀、抽样偏差和数据窥探。
1 过拟合问题
1.1 过拟合的发生
假设现在用带很小噪声的2次多项式生成了5个样本,对于这5个样本,其实用4次多项式就可以完美拟合它:
这样做可使Ein=0E_\text{in}=0Ein=0,但EoutE_\text{out}Eout却会非常大。
如果出现EinE_\text{in}Ein很小,EoutE_\text{out}Eout很大的情况,就是出现了不好的泛化(bad generalization)。如果在训练的过程中,EinE_\text{in}Ein越来越小,EoutE_\text{out}Eout越来越大,就称为过拟合(overfitting)。
噪声和数据规模都会影响过拟合。先来看以下两个数据集:
- 数据由10次多项式生成,有一些噪声;
- 数据由50次多项式生成,无噪声。
数据集图像如下:
如果我们用2次和10次多项式分别拟合以上两个数据集,那么在从g2∈H2g_2 \in \mathcal{H}_2g2∈H2到g10∈H10g_{10} \in \mathcal{H}_{10}g10∈H10的过程中,会发生过拟合吗?
拟合结果如下:
比较后发现,在两个数据集中,都发生了过拟合!
来看学习曲线,当N→∞N\to \inftyN→∞时显然H10\mathcal{H}_{10}H10会有更小的Eout‾\overline{E_{out}}Eout,但NNN较小时它会有很大的泛化误差。灰色区域就是过拟合发生的区域。
其实对于由无噪声的50次多项式生成的数据,“目标函数的复杂度”本身就可以看作类似的噪声。
接下来做个更细节的实验。用
y=f(x)+ϵ∼Gaussian(∑q=0Qfαqxq,σ2)\begin{aligned} y &= f(x) + \epsilon\\ &\sim \text{Gaussian}\left(\sum_{q=0}^{Q_f} \alpha_q x^q, \sigma^2 \right) \end{aligned} y=f(x)+ϵ∼Gaussian⎝⎛q=0∑Qfαqxq,σ2⎠⎞
生成NNN个数据,其中ϵ\epsilonϵ是独立同分布的高斯噪声,噪声水平为σ2\sigma^2σ2,f(x)f(x)f(x)关于复杂度水平QfQ_fQf是均匀分布的。也就是说,目标函数有QfQ_fQf和σ2\sigma^2σ2两个变量。
然后,分别固定Qf=20Q_f=20Qf=20和σ2=0.1\sigma^2=0.1σ2=0.1,还是分别用2次和10次多项式拟合数据,并用Eout(g10)−Eout(g2)E_\text{out}(g_{10})-E_\text{out}(g_{2})Eout(g10)−Eout(g2)度量过拟合水平。结果如下:
颜色偏红的区域,就是发生了过拟合。
加上去的σ2\sigma^2σ2高斯噪声可称为stochastic noise,而目标函数的次数QfQ_fQf也有类似噪声的影响,因此可叫deterministic noise。
如果f∉Hf\notin \mathcal{H}f∈/H,那么fff一定有某些部分就无法被H\mathcal{H}H所捕捉到,最好的h∗∈Hh^*\in\mathcal{H}h∗∈H与fff的差就是deterministic noise,它的表现与随机噪声没什么不一样(与伪随机数生成器类似)。它与stochastic noise的不同之处在于,它与H\mathcal{H}H有关,且对于每个xxx,它的值是确定的:
1.2 过拟合的处理
一般来说,处理过拟合的思路有以下几种:
- 从简单的模型开始;
- 数据清洗(data cleaning),将错误的数据修正(如更正它的标签类别);
- 数据剪枝(data pruning),删去离群点(outlier);
- data hinting,当样本量不够时,可以对现有样本做些简单的处理,增加样本量,如在数字分类中,可以将数据微微旋转或平移而不改变它们的标签,这样就可增大样本量;
- 正则化(regularization),见下节;
- 验证(validation),见后文。
2 正则化(regularization)
2.1 正则化
正则化的思想是好比从H10\mathcal{H}_{10}H10“逐步回退”到H2\mathcal{H}_{2}H2。这个名字的由来是在早期做函数逼近(function approximation)时,有很多问题是ill-posed problems,即有很多函数都是满足问题的解,所以要加入一些限制条件。从某种意义上说,机器学习中的过拟合也是“正确的解太多”的问题。
H10\mathcal{H}_{10}H10中假设的一般形式为
w0+w1x+w2x2+w3x3+⋯+w10x10w_0+w_1 x+w_2 x^2+w_3 x^3+\cdots+w_{10} x^{10} w0+w1x+w2x2+w3x3+⋯+w10x10
而H2\mathcal{H}_{2}H2中假设的一般形式为
w0+w1x+w2x2w_0+w_1 x+w_2 x^2 w0+w1x+w2x2
其实只要限制w3=w4=⋯=w10=0w_3=w_4=\cdots=w_{10}=0w3=w4=⋯=w10=0,就会有H10=H2\mathcal{H}_{10}=\mathcal{H}_{2}H10=H2。如果在用H10\mathcal{H}_{10}H10时加上这个限制,其实就是在用H2\mathcal{H}_2H2做机器学习。
H2\mathcal{H}_2H2的灵活性有限,但H10\mathcal{H}_{10}H10又很危险,那有没有折中一些的假设集呢?不妨把这个条件放松一些,变成∑q=0101[w1≠0]≤3\sum\limits_{q=0}^{10}\mathbf{1}_{[w_1\ne 0]}\le 3q=0∑101[w1=0]≤3,记在该限制下的假设集为H2′\mathcal{H}_2'H2′,有H2⊂H2′⊂H10\mathcal{H}_{2}\subset \mathcal{H}_{2}' \subset \mathcal{H}_{10}H2⊂H2′⊂H10,即它比H2\mathcal{H}_{2}H2更灵活,但又没有H10\mathcal{H}_{10}H10那么危险。
在H2′\mathcal{H}_{2}'H2′下,求解的问题转化成了
minw∈R10+1Ein(w)s.t. ∑q=0101[w1≠0]≤3\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 w∈R10+1minEin(w)s.t. q=0∑101[w1=0]≤3
这是个NP-hard问题,复杂度很高。不如再将它变为
minw∈R10+1Ein(w)s.t. ∑q=010wq2≤C\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 w∈R10+1minEin(w)s.t. q=0∑10wq2≤C
记该假设集为H(C)\mathcal{H}(C)H(C),它与H2′\mathcal{H}_2'H2′是有部分重叠的,并且对于CCC有软的、光滑的结构:
H0⊂H1⊂⋯⊂H∞=H10\mathcal{H}_{0} \subset \mathcal{H}_{1} \subset \cdots \subset \mathcal{H}_{\infty} =\mathcal{H}_{10} H0⊂H1⊂⋯⊂H∞=H10
记在H(C)\mathcal{H}(C)H(C)下找到的最优解为wREG\mathbf{w}_\text{REG}wREG。
在没有正则化时,用梯度下降更新参数的方向是−∇Ein(w)-\nabla E_\text{in}(\mathbf{w})−∇Ein(w)。而在加入了正则化wTw≤C\mathbf{w}^T \mathbf{w}\le CwTw≤C的限制时,必须在该限制下更新,如下图:
wTw=C\mathbf{w}^T \mathbf{w}= CwTw=C的法向量(normal vector)就是w\mathbf{w}w,从图中可知,只要−∇Ein(w)-\nabla E_\text{in}(\mathbf{w})−∇Ein(w)和w\mathbf{w}w不平行,就可继续在该限制下降低Ein(w)E_\text{in}(\mathbf{w})Ein(w),因此,达到最优解时,一定有
−∇Ein(w)∝wREG-\nabla E_\text{in}(\mathbf{w}) \propto \mathbf{w}_\text{REG} −∇Ein(w)∝wREG
由此,问题可以转化为求解
∇Ein(wREG)+2λNwREG=0\nabla E_\text{in}(\mathbf{w}_\text{REG}) +\dfrac{2 \lambda}{N} \mathbf{w}_\text{REG}=0 ∇Ein(wREG)+N2λwREG=0
其中λ\lambdaλ是引入的拉格朗日乘子(Lagrange multiplier)。假设已知λ>0\lambda>0λ>0,只需要把梯度的式子写出来,即有:
2N(XTXwREG−XTy)+2λNwREG=0\dfrac{2}{N}(X^T X\mathbf{w}_\text{REG}-X^T \mathbf{y})+\dfrac{2 \lambda}{N} \mathbf{w}_\text{REG}=0 N2(XTXwREG−XTy)+N2λwREG=0
直接求解即可得
wREG←(XTX+λI)−1XTy\mathbf{w}_\text{REG}\leftarrow (X^T X+\lambda I)^{-1} X^T\mathbf{y} wREG←(XTX+λI)−1XTy
只要λ>0\lambda>0λ>0,XTX+λIX^T X+\lambda IXTX+λI就是正定矩阵,它一定可逆。
在统计学中,这通常叫岭回归(ridge regression)。
换一种视角来看,求解
∇Ein(wREG)+2λNwREG=0\nabla E_\text{in}(\mathbf{w}_\text{REG}) +\dfrac{2 \lambda}{N} \mathbf{w}_\text{REG}=0 ∇Ein(wREG)+N2λwREG=0
就等价于求解(相当于对上式两边取积分)
minwEin(w)+λNwTw\min\limits_{\mathbf{w}} E_\text{in}(\mathbf{w})+\dfrac{\lambda}{N}\mathbf{w}^T\mathbf{w} wminEin(w)+NλwTw
wTw\mathbf{w}^T\mathbf{w}wTw可叫regularizer,整个Ein(w)+λNwTwE_\text{in}(\mathbf{w})+\dfrac{\lambda}{N}\mathbf{w}^T\mathbf{w}Ein(w)+NλwTw可叫作augmented error Eaug(w)E_\text{aug}(\mathbf{w})Eaug(w)。
这样,原本是给定CCC后解一个条件最值问题,现在转化成了一个给定λ\lambdaλ的无条件最值问题。
可将+λNwTw+\dfrac{\lambda}{N}\mathbf{w}^T\mathbf{w}+NλwTw称为weight-decay regulariztion,因为更大的λ\lambdaλ,就相当于让w\mathbf{w}w更短一些,也相当于CCC更小一点。
一个小细节:在做特征变换时,如果用Φ(x)=(1,x,x2,…,xQ)\Phi(\mathbf{x})=(1,x,x^2,\ldots,x^Q)Φ(x)=(1,x,x2,…,xQ),假设xn∈[−1,+1]x_n \in [-1,+1]xn∈[−1,+1],那么xnqx^q_nxnq会非常小,这一项本来就需要很大的wqw_qwq才能起到作用,如果此时再用正则化,就对高维的系数有些“过度惩罚”了,因为它本来就要比较大才行。因此,可在多项式的空间中找出一些正交的基函数(orthonormal basis function),这是一些比较特别的多项式,叫勒让德多项式(Legendre Polynomials),再用这些多项式这样做特征变换(1,L1(x),L2(x),…,LQ(x))(1,L_1(x),L_2(x),\ldots,L_Q(x))(1,L1(x),L2(x),…,LQ(x))即可。前5个勒让德多项式如下图:
2.2 正则化与VC理论
在最小化augmented error的时候,尽管它与带约束最值问题是等价的,但在计算时,其实并没有真正的将w\mathbf{w}w限制在H(C)\mathcal{H}(C)H(C)中。那么正则化究竟是怎么发生的?
可以从另一个角度看augmented error:
Eaug(w)=Ein(w)+λNwTwE_\text{aug}(\mathbf{w})=E_\text{in}(\mathbf{w})+\dfrac{\lambda}{N}\mathbf{w}^T\mathbf{w} Eaug(w)=Ein(w)+NλwTw
若记wTw\mathbf{w}^T\mathbf{w}wTw为Ω(w)\Omega(\mathbf{w})Ω(w),它度量的是某个假设w\mathbf{w}w的复杂度。而在VC Bound中
Eout(w)≤Ein(w)+Ω(H)E_\text{out}(\mathbf{w})\le E_\text{in}(\mathbf{w})+\Omega(\mathcal{H}) Eout(w)≤Ein(w)+Ω(H)
Ω(H)\Omega(\mathcal{H})Ω(H)度量的是整个H\mathcal{H}H的复杂度。如果λNΩ(w)\dfrac{\lambda}{N}\Omega(\mathbf{w})NλΩ(w)与Ω(H)\Omega(\mathcal{H})Ω(H)有某种关联,EaugE_\text{aug}Eaug就可以直接作为EoutE_\text{out}Eout的代理,不需要再通过做好EinE_\text{in}Ein来做好EoutE_\text{out}Eout,而同时,又可以享受整个H\mathcal{H}H的高度灵活性。
再换个角度,原本对于整个H\mathcal{H}H有dVC(H)=d~+1d_\text{VC}(\mathcal{H})=\tilde{d}+1dVC(H)=d~+1,而现在相当于只考虑H(C)\mathcal{H}(C)H(C)中的假设,也就是说VC维变成了dVC(H(C))d_\text{VC}(\mathcal{H}(C))dVC(H(C))。可以定义一个“有效VC维”dEFF(H,A)d_\text{EFF}(\mathcal{H},\mathcal{A})dEFF(H,A),只要A\mathcal{A}A中做了正则化,有效VC维就会比较小。
2.3 更一般的正则项
有没有更一般的正则项Ω(w)\Omega(\mathbf{w})Ω(w)?该如何选择呢?有以下建议:
- 与目标有关(target-dependent),如果知道目标函数的一些性质,就可以写出来,比如我们预先知道目标函数是接近于偶函数的,那就可以选取∑1[qis odd]wq2\sum \mathbf{1}_{[q \text{ is odd}]} w^2_q∑1[q is odd]wq2;
- 合理的(plausible),可以选平滑的或简单的,如为了稀疏性而选L1正则项∑∣wq∣\sum\vert w_q \vert∑∣wq∣,下文会说明;
- 友好的(friendly),即容易优化,如L2正则项∑wq2\sum w_q^2∑wq2;
- 就算选的正则项不好,也没有关系,因为可以靠λ\lambdaλ来调节,最差也就是相当于没有加入正则项。
L1正则项如下图:
它是凸的,但不是处处可微,加入它之后,解具有稀疏性。如果在实际中需要有稀疏解,L1就会很有用。
λ\lambdaλ要怎么选呢?可根据EoutE_\text{out}Eout的情况选出的最优λ\lambdaλ,示例如下(加粗点为最优λ\lambdaλ):
从图中可以看到,噪声越大,越需要增加regularization。
但一般情况下,噪声是未知的,该如何选择合适的λ\lambdaλ?
3 验证(Validation)
3.1 验证集
λ\lambdaλ该如何选择?我们完全不知道EoutE_\text{out}Eout,并且也不能直接通过EinE_\text{in}Ein做选择。如果有一个从来没被使用过的测试集就好了,这样就可以根据测试集进行选择:
m∗=argmin1≤m≤M(Em=Etest(Am(D)))m^*=\mathop{\arg\min}\limits_{1\le m\le M} \left( E_m=E_\text{test}(\mathcal{A}_m(\mathcal{D})) \right) m∗=1≤m≤Margmin(Em=Etest(Am(D)))
并且,这样做是有泛化保证的(Hoeffding):
Eout(gm∗)≤Etest(gm∗)+O(logMNtest)E_\text{out}(g_{m^*})\le E_\text{test}(g_{m^*})+O(\sqrt{\dfrac{\log M}{N_\text{test}}}) Eout(gm∗)≤Etest(gm∗)+O(NtestlogM)
但哪里有真正测试集?只能折中地从D\mathcal{D}D划分出一部分数据作为验证集Dval⊂D\mathcal{D}_\text{val}\subset \mathcal{D}Dval⊂D了,当然,也要求它是在过去从未被Am\mathcal{A}_mAm使用过的。
划分验证集Dval\mathcal{D}_\text{val}Dval的过程如下:
用训练集得到的gm−g^-_mgm−,也可以有泛化保证:
Eout(gm−)≤Eval(gm−)+O(logMK)E_\text{out}(g_m^-)\le E_\text{val}(g_m^-)+O(\sqrt{\dfrac{\log M}{K}}) Eout(gm−)≤Eval(gm−)+O(KlogM)
做验证时的一般流程如下:
可以看到,在用验证集选出最好的模型gm∗−g^-_{m^*}gm∗−后,还是要用所有的数据再训练一个最好的模型gm∗g_{m^*}gm∗出来,一般来说这次训练得到的gm∗g_m^*gm∗会由于训练数据量的更大而有更低的EoutE_\text{out}Eout,见下图:
图中最下面的虚线为EoutE_\text{out}Eout。可以看到,KKK不能过大或过小,如果KKK过小,虽然gm−≈gmg_m^-\approx g_mgm−≈gm,但EvalE_\text{val}Eval和EoutE_\text{out}Eout会差别很大,而如果KKK过大,尽管Eval≈EoutE_\text{val}\approx E_\text{out}Eval≈Eout,但会使gm−g_m^-gm−比gmg_mgm差很多。
我们真正想要做到的是
Eout(g)≈Eout(g−)≈Eval(g−)E_\text{out}(g)\approx E_\text{out}(g^-)\approx E_\text{val}(g^-)Eout(g)≈Eout(g−)≈Eval(g−)
第一个约等号要求KKK较小,第二个约等号要求KKK较大,因此必须选一个合适的KKK,按经验法则可选K=N5K=\dfrac{N}{5}K=5N。
3.2 留一交叉验证(LOOCV)
如果让K=1K=1K=1,即只留一个样本nnn作为验证集,记
Eval(n)(gn−)=err(gn−(xn),yn)=enE_\text{val}^{(n)}(g_n^-)=\text{err}(g_n^-(\mathbf{x}_n),y_n)=e_n Eval(n)(gn−)=err(gn−(xn),yn)=en
但单个ene_nen无法告诉我们准确的信息,要想办法对所有可能的Eval(n)(gn−)E_\text{val}^{(n)}(g_n^-)Eval(n)(gn−)取平均。可以用留一交叉验证(Leave-One-Out Cross Validation):
Eloocv(H,A)=1N∑n=1Nen=1N∑n=1Nerr(gn−(xn),yn)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) Eloocv(H,A)=N1n=1∑Nen=N1n=1∑Nerr(gn−(xn),yn)
我们希望的是有Eloocv(H,A)≈Eout(g)E_\text{loocv}(\mathcal{H},\mathcal{A})\approx E_\text{out}(g)Eloocv(H,A)≈Eout(g)。可作证明:
EDEloovc(H,A)=ED1N∑n=1Nen=1N∑n=1NEDen=1N∑n=1NEDnE(xn,yn)err(gn−(xn),yn)=1N∑n=1NEDnEout(gn−)=1N∑n=1NEout‾(N−1)=Eout‾(N−1)\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} ======DEEloovc(H,A)DEN1n=1∑NenN1n=1∑NDEenN1n=1∑NDnE(xn,yn)Eerr(gn−(xn),yn)N1n=1∑NDnEEout(gn−)N1n=1∑NEout(N−1)Eout(N−1)
由于Eloovc(H,A)E_\text{loovc}(\mathcal{H},\mathcal{A})Eloovc(H,A)的期望会告诉我们一些关于Eout(g−)E_\text{out}(g^-)Eout(g−)的期望的信息,因此也叫作Eout(g)E_\text{out}(g)Eout(g)的“几乎无偏估计”(almost unbiased estimate)。
用手写数字识别——对数字是否为1进行分类——看看效果,两个基础特征为对称性和平均强度(average intensity),对它们进行特征变换(增加特征数量),再分别用EinE_\text{in}Ein和EloocvE_\text{loocv}Eloocv进行参数选择(参数是变换后的特征个数),结果如下:
如果将EoutE_\text{out}Eout、EinE_\text{in}Ein、EloocvE_\text{loocv}Eloocv分别随特征数变化而变化的情况画出来,如图:
3.3 VVV-折交叉验证
如果有1000个点,做留一交叉验证就要计算1000次ene_nen,每次计算还要用999个样本做训练,除了少数算法(如线性回归,它有解析解),在大多数情况下会非常耗时间。另一方面,由上一节最后可看到,由于EloocvE_\text{loocv}Eloocv是在单个点上做平均,结果会有跳动,不够稳定。因此,在实际中,loocv并不是很常用。
在实际中,更常用的是VVV折交叉验证(VVV-Fold Cross Validation),即将D\mathcal{D}D随机分为VVV等分,轮流用每一份做验证,用剩下的V−1V-1V−1份做训练,在实际中一般常取V=10V=10V=10,如下图:
这样能计算出
Ecv(H,A)=1V∑v=1VEval(v)(gv−)E_\text{cv}(\mathcal{H}, \mathcal{A})=\dfrac{1}{V}\sum\limits_{v=1}^{V} E_\text{val}^{(v)}(g_v^-) Ecv(H,A)=V1v=1∑VEval(v)(gv−)
再用它对参数做选择:
m∗=argmin1≤m≤M(Em=Ecv(Hm,Am))m^*=\mathop{\arg\min}\limits_{1\le m\le M} \left( E_m=E_\text{cv}(\mathcal{H}_m, \mathcal{A}_m) \right) m∗=1≤m≤Margmin(Em=Ecv(Hm,Am))
值得注意的是,由于验证过程也是在做选择,它的结果依旧会比最后的测试结果乐观一些。因此,最后重要的是测试的结果,而非找出来的最好的验证的结果。
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)
在机器学习中,这是说能拟合数据的最简单的模型往往是最合理的。
什么叫简单的模型呢?对于单个假设hhh来说,要求Ω(h)\Omega(h)Ω(h)较小即参数较少,对于一个模型(假设集)H\mathcal{H}H来说,要求Ω(H)\Omega(\mathcal{H})Ω(H)较小即它没包含太多可能的假设。这两者是相关的,比如∣H∣\vert \mathcal{H} \vert∣H∣规模是2ℓ2^\ell2ℓ,那么其实只需要ℓ\ellℓ个参数就可以描述所有的hhh,因此小的Ω(H)\Omega(\mathcal{H})Ω(H)也就意味着小的Ω(h)\Omega(h)Ω(h)。
从哲学意义上说,越简单的模型,“拟合”发生的概率越小,如果真的发生了,那就说明数据中可能真的有一些比较重要的规律。
4.2 抽样偏差
第二个是要注意抽样偏差(Sampling Bias)。
如果数据的抽样过程存在偏差,那么机器学习也会产生一个有偏差的结果。
在讲解VC维时,提到过一个前提条件,就是训练数据和测试数据需要来自同一个分布。当无法满足时,经验法则是,尽可能让测试环境和训练环境尽可能匹配。
4.3 数据窥探
第三是要注意数据窥探(Data Snooping)。
如果你通过观察,发现数据比较符合某个模型,进而选用该模型,这是比较危险的,因为相当于加入了你大脑中的模型的复杂度。
在任何使用数据的过程中,其实都是间接窥探到了数据。在窥探了数据的表现后,做任何决策,都会引入“大脑”复杂度。
比如在做scaling时,不能把训练集和测试集放在一起做scaling,而只能对训练集做。
其实在机器学习的前沿研究中,也存在类似的情况。比如第一篇论文发现了H1\mathcal{H}_1H1会在D\mathcal{D}D上表现较好,而第二篇论文提出了H2\mathcal{H}_2H2,它在D\mathcal{D}D上比H1\mathcal{H}_1H1表现得更好(否则就不会发表),第三篇也如此……如果将所有论文看作一篇最终版的论文,那么真正的VC维其实是dvc(∪mHm)d_\text{vc}(\cup_m \mathcal{H}_m)dvc(∪mHm),它会非常大,泛化会非常差。这是因为其实在每一步过程中,作者都通过阅读前人的文献而窥探了数据。
因此在做机器学习时,要审慎地处理数据。要避免用数据来做一些决策,即最好事先就将领域知识加入到模型中,而不是在观察了数据后再把一些特性加入模型中。另外,无论是在实际操作中,还是在看论文过程中,或者是在对待自己的结果时,都要时刻保持怀疑。
机器怎样可以学得更好?相关推荐
- python比java简单好学-python和java哪个学起来更简单
在近几年Python的呼声越来越高,很多刚开始起步想要学习编程的朋友都会犹豫要不要选择学习Python,毕竟作为人工智能时代的首选语言这个诱惑还是很大的.在选择上最纠结的就是Python和Java选择 ...
- 自动化测试和测试开发的区别?培训学哪个更好?
自动化测试和测试开发是目前测试两个比较热门的方向,但刚入门的同学却不知道它们都是干嘛的,到底该学习哪个方向.今天小千就来给大家介绍一下. 自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的 ...
- python和java学哪个好-Python VS Java,学哪个更有前途?
原标题:Python VS Java,学哪个更有前途? 曾几何时,软件开发人员一直在使用C语言环境.几年之后,Java出现在一个更好的选择,具有一些独特的优势,再后来Python出现了,与Java不同 ...
- python和java选择哪个-python和java哪个学起来更简单
在近几年Python的呼声越来越高,很多刚开始起步想要学习编程的朋友都会犹豫要不要选择学习Python,毕竟作为人工智能时代的首选语言这个诱惑还是很大的.在选择上最纠结的就是Python和Java选择 ...
- python和java哪个更有潜力-Python VS Java,学哪个更有前途?
原标题:Python VS Java,学哪个更有前途? 曾几何时,软件开发人员一直在使用C语言环境.几年之后,Java出现在一个更好的选择,具有一些独特的优势,再后来Python出现了,与Java不同 ...
- python简单编程-编程中最简单的语言Python,这样学或许更容易
最近微信小程序上面出了一个跳一跳的小游戏 大家有没有玩呀? 编程中最简单的语言Python,这样学或许更容易 分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Py ...
- 最简单的python语言程序设计_编程中最简单的语言Python,这样学或许更容易
最近微信小程序上面出了一个跳一跳的小游戏 大家有没有玩呀? 编程中最简单的语言Python,这样学或许更容易 分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Py ...
- 学Python好还是学Java好?学哪个更好就业?
学Python好还是学Java好?学哪个更好就业?对于刚刚入行的的初学者来说,常常会在Python和Java这两大编程语言面前感到迷茫.Python作为后起之秀,潜力无限;而Java是行业经典,成熟稳 ...
- 是学Java好呢?还是学C++更有前途?
目录 1.C++和Java在编程排行榜中的排名 2.Java语言的使用场景 3.C++语言的应用场合 4.最后 最近有不少初学编程的朋友问:他们比较倾向于Java和C++作为他们首选学习语言,但是学J ...
最新文章
- 5.2k Star!一款 Python 实现的美观终端资源监视器
- Mybatis 逆向工程 自动生成代码
- 前端学习(2037)vue之电商管理系统电商系统之优化
- Oracle 怎么删除重复数据
- EfficientNet 解析:卷积神经网络模型尺度变换的反思
- linux内核兼容性,各种glibc和Linux内核版本的兼容性
- “Replit 威胁我,要求我关闭我的开源项目!”
- vs无法启动程序 系统找不到指定文件_进不了系统时要做的事情
- vim使用方法的总结摘自鸟哥的私房菜
- 经典C语言学习教程资料
- 实数域上的压缩映射不动点原理
- 没有比粥更温柔的了。念予毕生流离红尘,就找不到一个似粥温柔的人。
- MatplotlibDeprecationWarning: Calling gca() with keyword arguments was deprecated in Matplotlib 3.4.
- 2017年sfdc工作总结_Duplicate, Matching Rule
- 版图ECO的那点事(下)
- 问题 D: 天神下凡
- 机器学习笔记之深度信念网络(二)模型构建思想(RBM叠加结构)
- VT虚拟化驱动入门教程
- 咸鱼前端—CSS浮动
- 质数与合数系列——素数判断
热门文章
- 我的世界服务器显示弹幕,我的世界直播弹幕模组
- c# 收取邮件 解析_C# 接收邮件
- Mysql统计近30天的数据,无数据的填充0
- GAN综述及其在图像生成领域的应用(含原理、代码详解)
- FCC TributePage
- 数据集成工具 —— datax与flinkx的使用
- 【iOS开发】——MRC(手动内存管理)的一些补充
- Remote Server returned '420 4.2.0 Recipient deferred because there is no Mdb'
- 小米手机不用html,小米手机不用三星AMOLED屏幕的真相
- TPA3255 classD 音频功放快速设计