上一章——逻辑回归
在之前的课程中,我们说过机器学习的中极为重要的一步,就是给训练集找到一条合适的拟合曲线。
还是以房价问题这个回归问题为例,我们可以把拟合状态分为以下三种:
在我们刚刚接触的时候,用的就是线性回归的方式来拟合,如上图所示,显然线性回归并不是很拟合上图的数据,我们把这种状态称为欠拟合,欠拟合代表当前的假设函数对于数据的拟合状态欠佳,并不太适合,专业术语称为高偏差(high bias),偏差(bias)指的是算法的期望预测与真实结果的偏离程度。
后来我们学习了更好的拟合方法:用多项式函数来拟合。在上面这个例子中显然多项式函数拟合更为适当,它的偏差较小,并且我们希望对于还未加入训练集的其他样本,也能和我们当前的模型相符。我们把这种能力称为:泛化,指的是当前的算法对于其他未加入的样本依然具有适用性。虽然函数并没有完美拟合所有的数据点,但是依然很够用了。
是不是函数能够完美拟合所有数据点就是最好的呢?让我们看看上图的例子,我们在粉色点处添加一个数据,并且拓展到了四次项,最后得到了一个完美经过所有数据点的函数。但是我们却认为这样的函数是不适合的,称为过拟合,意思就是它对数据的拟合程度已经过头了,不具有泛化性。我们可以称其为具有高方差(high variance),方差(variance)指同样大小训练集的变动而导致的学习性能的变化。
另一个例子就是分类问题,还是以肿瘤问题为例,我们可以看到过拟合和欠拟合都不适合这个模型,我们允许出现偏差和方差,但是不应该为了拟合某几个数据而导致全局误差变大,过拟合和欠拟合的问题就在于此。
最后让我们来总结一下三种拟合状态:
我们要清楚,尽管我们要尽可能拟合数据,但并不是拟合程度越高越好,走向极端往往会导致覆灭。我们既不需要拟合欠佳的欠拟合,也不需要拟合过度的过拟合,我们需要的是对数据具有泛化能力的拟合,达到刚刚好的程度。
机器学习的目的就是找到一个既不欠拟合,又不过拟合的模型,换句话说就是找到一个既没有高偏差,又没有高方差的模型。
假设你拟合出了上面这种模型,不难发现这样是过拟合的,不过我们当然有方法来解决它。
如果说我们要预测的数据的确存在着某种关系,那么其中的一个解决方法就是尽可能地收集更多训练样本。如上图所示,在上面这个例子中,当我们收集了足够多的训练样本之后,发现整体样本的确存在着类似二次函数的关系,那么随着样本的增加,拟合程度也越来越正确。
从理论上来讲,足够多的训练样本是可以解决过拟合问题的。但是这种方法的缺点在于实际上可能并没有这么多的训练样本。
从函数构造的角度出发,我们最终得到的过拟合函数往往是由于多项式的项数过多导致的,准确来说是由于“特征很多,但是对应的数据却很缺乏”,而项数是由特征数量决定的。因此,如果能够减少项数,也就是减少特征的数量,就能解决过拟合问题。因此减少特征数量也是一种解决方法。我们可以通过选择特征子集构建假设函数解决过拟合的问题。但是这种方法的缺点在于如果所包含的特征都是有用的特征,我们不得不舍弃掉一些特征来解决过拟合问题,同样会导致最后预测的结果可能出现问题,这是我们不愿意看到的。
假如我们并不想舍弃特征,也没有那么多的样本,那么正则化将是一种良好的解决过拟合的方法,而在实际中也常常是使用正则化。
假设你想要舍弃特征 x 4 x_4 x4来达到解决过拟合的效果,然而实际并不允许你舍弃它,我们可以转换思路,通过限制这个特征来减少对函数的影响,例如上图,原本 x 4 x_4 x4的系数参数 w 4 w_4 w4是 174 174 174,我们将其系数参数改为 0.0001 0.0001 0.0001,正则化通过减小了系数参数来减小了该特征对于假设公式整体的权重,从而达到解决过拟合的目的,我们并不是暴力消除这个特征,而是调整了其权重。
总结一下三种方法:
接下来我们将解析正则化的数学原理。
让我们看看上图的例子,左边是二次项拟合,右边是四次项拟合,对比两种拟合方式显然二次项是更加适合的。但是如果要求选取四个特征,我们的做法就是用正则化来处理。
假设当x取1000,让我们求出参数系数 w 1 . . . w n 和 b w_1...w_n和b w1...wn和b,你应该没有忘记需要用到最小二乘法构造的代价函数来求(在前几章中参数系数被称为 θ i θ_i θi)。注意我们在图中框出的公式,红色部分是二次项拟合的代价函数,而红框+蓝框是右边四次项拟合的代价函数,蓝框是对比之下多出来的部分。
我们的目的是使得四次项拟合接近二次项拟合的效果,我们也讲了方法就是使得高次项参数系数取得足够小,来减少它们对函数的影响。
以上图为例,当 x = 1000 x=1000 x=1000,取 w 3 = 0.001 , w 4 = 0.002 w_3=0.001,w_4=0.002 w3=0.001,w4=0.002,当参数足够小,就能抵消这些特征对函数的影响,最后我们得到的拟合曲线如紫色曲线所示,和二次项十分接近。
假设你有很多的特征,但是你不知道哪些特征是应该正则化的,哪些特征是不用处理的。我们通常的解决方法是全部正则化,通过惩罚所有的参数系数,我们将拟合出一个更为平滑,更为简单,更不容易过拟合的函数,尽管会牺牲一点准确性,但能有效解决过拟合的问题。
以上图为例,假设你有100个特征,共101个参数,但是我们并不知道哪个特征更重要。最好的解决方法就是对所有特征进行正则化。
正则化公式如下:
J ( w ⃗ , b ) = 1 2 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 + λ 2 m ∑ i = 1 n w j 2 J(\vec w,b)=\cfrac{1}{2m}\displaystyle\sum_{i=1}^m \bigg(f_{\vec w,b}(\vec x^{(i)})-y^{(i)}\bigg)^{2}+\cfrac{λ}{2m}\displaystyle\sum_{i=1}^nw_j^2 J(w,b)=2m1i=1∑m(fw,b(x(i))−y(i))2+2mλi=1∑nwj2
在代价函数后面加上的那部分就是正则化公式,其中乘以 1 2 m \cfrac{1}{2m} 2m1是为了数据缩放一致
λ λ λ是正则化参数,和学习率相似,需要自主选择适合的数字。
如果考虑常数系数b的话也可以加入这项:
J ( w ⃗ , b ) = 1 2 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 + λ 2 m ∑ i = 1 n w j 2 + λ 2 m b J(\vec w,b)=\cfrac{1}{2m}\displaystyle\sum_{i=1}^m \bigg(f_{\vec w,b}(\vec x^{(i)})-y^{(i)}\bigg)^{2}+\cfrac{λ}{2m}\displaystyle\sum_{i=1}^nw_j^2+\cfrac{λ}{2m}b J(w,b)=2m1i=1∑m(fw,b(x(i))−y(i))2+2mλi=1∑nwj2+2mλb
正则化通常只处理特征的参数系数 w 1 . . . w n w_1...w_n w1...wn,对于常数系数 b b b不用处理,当然处理也可。
再来看这个式子,红色框代表代价函数部分,紫色代表正则化项。
当我们取 λ = 0 λ=0 λ=0时,相当于不进行正则化处理,则函数会回到过拟合状态。
当我们取 λ = 1 0 10 λ=10^{10} λ=1010时,由于取值λ实在太大了,因此所有的参数系数 w j w_j wj的取值会接近0,因此导致未知数项都接近于0,最后得到的假设函数就接近于y=b这条直线,最后的结果是函数变成欠拟合状态。
因此正则化的取值会影响假设函数的拟合状态,当正则化参数λ过小会导致过拟合,当正则化参数λ过大会导致欠拟合,因此取值适当的λ是必要的。
依旧是梯度回归公式,我们只需求出代价函数的偏导即可,如上图所示。
让我们试图带入线性回归的假设方程 f f f看看
梯度下降带入线性回归的假设方程后展开就变成了这个式子
w j = 1 w j − α λ m w j − α 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) w_j=1w_j-α\cfrac{λ}{m}w_j-α\cfrac{1}{m}\displaystyle\sum_{i=1}^m \bigg(f_{\vec w,b}(\vec x^{(i)})-y^{(i)}\bigg)x_j^{(i)} wj=1wj−αmλwj−αm1i=1∑m(fw,b(x(i))−y(i))xj(i)
我们将其整理一下可以分成两个部分
① w j ( 1 − α λ m ) w_j(1-α\cfrac{λ}{m}) wj(1−αmλ)
② − α 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) -α\cfrac{1}{m}\displaystyle\sum_{i=1}^m \bigg(f_{\vec w,b}(\vec x^{(i)})-y^{(i)}\bigg)x_j^{(i)} −αm1i=1∑m(fw,b(x(i))−y(i))xj(i)
在学习率α确定的情况下,②部分的值是一个常量,那么只需看①部分的变化
①部分值随着λ变化,而由于 1 − α λ m < 1 1-α\cfrac{λ}{m}<1 1−αmλ<1,因此 w j ( 1 − α λ m ) < w j w_j(1-α\cfrac{λ}{m})
我们也知道导数其实代表了函数的变化趋势,在梯度下降算法中证明了当 a ! = 0 , λ ! = 0 a!=0,λ!=0 a!=0,λ!=0时, w j w_j wj一定会随着迭代次数的增加而逐渐变小,而这正是正则化的原理所在。
逻辑回归中也同理,只需替换为对应的假设函数 f f f和代价函数 J J J即可
恭喜你,到此你已经完成了机器学习相关的理论内容,不要忘记复习巩固。在下一章节中我们将学习深度学习的知识内容。