前言
回归(regression)模型的输出值是一个数。股票预测,PM2.5预测,自动驾驶中方向盘角度的预测,宝可梦进化后的CP值预测等都是其应用案例。课程中老师依旧是用的他惯用的宝可梦来做的示范。在一定范围内,增加模型复杂度,可以提升模型性能,但是超出该范围就会出现过拟合。用正则化的方式,可以降低过拟合出现的可能。
线性回归
这次回归的目标是找到一个function,我们输入宝可梦进化前的一些属性值,包括种类,体重、CP值等,然后可以较好的预测其进化后的 CP值(图引自老师PPT)
- 线性模型
线性模型,即函数是线性的,统一表达式如下。其中,x是输入,也就是其特征(features) ,w是权值(weights),b是偏置(bias)
如果将所有输入x,叠成矩阵X,所有w和Y叠成列向量W和Y。然后再在X的每行行首添加一个值为1的元素,并且将W延长一个元素,那么上式将变成:
用矩阵乘法代替循环可以提高效率。当输入只有一个时,线性模型就是我们熟悉的一元一次函数的一般式。即,y = b + w ∙ xcp。现在训练数据有十个,图来自这里
- 损失函数(Loss function)
损失函数是函数的函数,用于衡量参数的好坏。这里用一个类似均方根误差的函数L(w,b)来优化我们的线性回归函数,表示所有预测输出与正确答案差值的平方的和,乘以0.5是为了抵消求导后出现的2。
矩阵表达式:
- 模型训练-寻找最佳函数
目标:最小化Loss Function
方法:梯度下降
条件:Loss可微分
一维情况的损失函数图像如下图所示(引自老师PPT),直观的感受就是,在一个位置(w0处)要往下走。如果在w0处的梯度(一维的时候也是切线斜率)为负,则表示增大w可以降低Loss,如果梯度为正,则表示减小w可以降低Loss,可见w的变化方向是与梯度值反向的,所以梯度下降公式中是减去梯度。
梯度下降公式: 更新参数的步长由学习率和当前梯度共同决定,n表示第n次迭代。
带入L(w,b)表达式后可得:
矩阵表达式:由于x的行数等于差值的行数,所以要转置后才能乘。
- 局部最小值(local minimal)
由数学知识,可微函数,导数为零的点是极值点,极值是一个局部的概念。在用梯度下降最小化损失函数的时候,就有可能会落入局部最小值点,由于那里梯度为零,参数会卡在那里,需要用一些特殊方法才能跳出。不过,线性回归的损失函数不存在局部最小值,因此用梯度下降找到的就是全局最小值。(图引自课程PPT)
- 结果与预测
训练结束后在训练集上的误差为31.9,在测试集上的误差为35.0。(图引自课程PPT)
过拟合(over fiting)
在训练集上表现很好,但是在测试集或者是应用中表现很差就是过拟合的表现,过拟合可能是因为参数过多或者是数据过少而引起的。直观的感觉就是,模型太过复杂,训练集太小,就会使模型“记住”训练集,然后只会“套题型”,无法举一反三,也就是泛化(generalization)能力不行。对于上述案例,如果适当增加模型参数,可以得到更好的结果,但是如果参数太多,就会出现过拟合。如下图所示(引自课程PPT),是针对上述案例,分别用1,2,3,4,5次模型,经过训练后,在测试集上的表现。可以发现开始时随着参数增多,模型在测试集上的表现在在变好,但是当模型越来越复杂,表现也就越来越烂。模型不是越复杂越好,要根据训练集的大小来选择合适的模型,当然,正则化(regularization),失活(dropout)等可以降低模型过拟合的可能。
L2-正则化(L2 regularization)
L2正则化就是在惩罚w,在Loss function 里加入正则项,最小化L的时候,既考虑误差也考虑w,在减少误差的同时也让w减到很小。有较小的w的函数是比较平滑的,对于输入的变化不那么敏感。选择合适的λ,可以提升模型的泛化能力。
注:bias不参与正则化,因为它不影响函数的平滑度。
参考