摘要

整个笔记最后应该会分为几个部分,学习来源包括上述提到的视频内容但不限于上述内容。
希望学完之后可以解答我自己的困惑。

第一讲 线性回归

Regression的定义:机器学习中,输出是一个标量的操作就叫做回归。(分类输出的是类别)举个例子,输出方向盘角度用于无人驾驶、已知用户和商品输出购买可能性可以用作用户推荐。
本节以对”进化后精灵宝可梦的CP值进行预测”来介绍回归问题。

step1:选择合适的模型

GRNN回归 回归reg_机器学习


其实所谓的选择模型就是选择最合适的一个函数,能够根据已知的数据(training data)来最准确地预测在未知数据集(testing data)上的结果。

回归问题通常都是线性回归问题,要预测的值是y y ,已知的值是图中的xixi(实际上模型中还可能出现xni x i n 这种形式),而线性关系是指权重wi w i 和y y 之间是线性的

先选择采用模型y=b+∑wixiy=b+∑wixi观察效果。

这里就涉及到选择合适的x x 值,在精灵的众多属性(身高、体重、cp值)中,能极大影响进化后的精灵cp值的指标应该如何选择。假设我们拥有足够的domain knowledge,我们自然可以选择出最合适的属性/特征xixi,但显然我们没有,因此只能猜测做出最合理的初步估计,认为最重要的属性应该是精灵进化前的CP值xcp x c p 。step2:评价模型的好坏模型好坏的评价标准是loss,即模型由输入得到的预测值和真实值之间的差距。

GRNN回归 回归reg_机器学习_02


L(f) L ( f ) 代表模型f f 在数值预测上的loss,loss的计算是所有对应的预测值和真实值之间的差的平方和。

GRNN回归 回归reg_梯度下降_03


假设情况并不复杂,所有的参数组合(wi,bi)(wi,bi)都可以穷举完全并且计算出loss,那么显然寻找loss最小的一个组合就是最优模型的参数。
那实际上我们要建模解决的问题,往往不是这么简单,此时我们需要寻找一个更加通用的办法,叫做梯度下降(Gradient Descent)。step3:梯度下降

GRNN回归 回归reg_梯度下降_04


梯度,就是导数。我们之前讲到最好的模型就是要让loss function的值最小,这是个求函数最小值的问题,根据高等数学的知识,先求导数,然后沿着使数值下降的方向移动,一直到导数值为0的点(极小点)。这个方法同样适用在回归问题中,上图中在导数前有一个正因子η η ,这个就叫做学习率,学习率决定了收敛到极小点的速度(每一步移动多少)。

GRNN回归 回归reg_机器学习_05


那像预测精灵的CP值这种任务,有两个参数w,b w , b 怎么办呢?
把导数换成对各个参数的偏导数就可以进行了,再使两组参数同时向使loss最小的位置移动,具体效果就比一维的情况更加美丽了。

GRNN回归 回归reg_GRNN回归_06


是不是特别壮观嘞!

GRNN回归 回归reg_梯度下降_07


有些同学可能会担心一个问题,之前有提到,梯度下降会让算法收敛到一个极小点,那这个极小点未必是最小点啊,那找出来的模型就不一定是最优的啦!对于更加复杂的模型来说,这种考虑是对的,但是对于本节要讨论的简单预测模型来说,因为我们要最小化的函数是实际值和预测值之间的loss,只有当(w,b) ( w , b ) 的值越靠近最优解时,loss才会最小,换句话说,我们这个模型中的loss是convex凸的(碗装的),这点参考上述二维梯度下降的图也能观察到,也就是局部极小点一定是全局小点
谈谈复杂模型,根据初始的位置不同,确实是有可能收敛到不同的极小点的,因此在其他模型中需要多次初始化做比对。另外,在寻找极小点时,一般是loss的值小到一定范围的时候训练就可以停止了,因为要收敛到梯度为0的点概率是很小的,也是因为这样,不用担心鞍点(saddle point)会成为收敛过程中的威胁(很大概率上会跨过该一点)。求导我就不介绍了……
接下来看一看在模型定成y=wxcp+b y = w x c p + b 的情况下得到的最优解的情况

GRNN回归 回归reg_GRNN回归_08


我们看到上述数据显示training error=31.9,即模型在训练数据上的预测值和真实值之间的差距的平方和,在testing data上的testing error=35.0,这个结果是合理的,通常在testing dataset上的error会比training error大一些。
记住训练模型的目的是预测时,在新数据(testing data)上的error要小,也就是泛化能力要强。
那么如何让testing error再小一些呢?
我们可以考虑更换新的模型/函数。

GRNN回归 回归reg_梯度下降_09


由上图1-4,依次将模型多项式的最高项次提高1
y=b+w1x+w2x2 y = b + w 1 x + w 2 x 2
y=b+w1x+w2x2+w3x3 y = b + w 1 x + w 2 x 2 + w 3 x 3
y=b+w1x+w2x2+w3x3+w4x4 y = b + w 1 x + w 2 x 2 + w 3 x 3 + w 4 x 4
y=b+w1x+w2x2+w3x3+w4x4+w5x5 y = b + w 1 x + w 2 x 2 + w 3 x 3 + w 4 x 4 + w 5 x 5 结果是,在不同模型上找到的最优函数得到的training error变化趋势是逐渐减小,但是testing error开始先减小最后竟然增加到232.1这么大的程度,我们目的是要找到泛化能力最强的模型,model 4显然不符合我们的预期。
这是模型选择的不合理,其实上图model 4也是出现了过拟合(overfitting)的问题。

GRNN回归 回归reg_机器学习_10


简单来讲,过拟合就是随着训练过程的进行(或者随着模型变得更复杂),模型对于testing data上的预测值和真实值之间的error不降反增的这么一种情况。来试着分析一下为什么会出现这种状况。

GRNN回归 回归reg_Regression_11


模型逐渐复杂时,对training data的参数组合会越来越多,可以设想模型再复杂一些,甚至可以使得training error = 0,但是对training data拟合得完美并不是我们的追求,我们需要的是模型的泛化能力强,所以一般在训练时不能只关注training error的大小,过程中一般需要validation set(验证集),来检测模型的泛化能力。
其实以上的简单模型都是复杂模型的特例(部分wi=0 w i = 0 ),对training set 拟合得比较好的参数组合会比较多,那么要找到那一个在testing data**泛化能力好的参数组合其实更加困难**,这个时候容易出现过拟合的情况。回到我们的主线任务(预测精灵CP值)上,尝试了不同模型之后,我们还是没有发现一个令人满意的预测模型,因此考虑扩大training set,尝试挖掘一些隐含因素(其实就是增加观察者的domain knowledge)。

GRNN回归 回归reg_Regression_12


在收集更多数据之后,按进化后cp值−原始cp值 进 化 后 c p 值 − 原 始 c p 值 坐标作图,发现一个x x 竟然对应了多个yy,可以确定一定是有隐含因素被我们忽视了。经过分析,发现每一中颜色的点对应的是不同的精灵种类(红色点部分没救,是因为进化后会随机变种,这个就….咱们不跟它犟了)。
这样再把物种xs x s 考虑进去,重新建立个模型。

GRNN回归 回归reg_Regression_13


对各个物种分别设置模型y=bi+wi.xcp y = b i + w i . x c p ,将其综合起来得到模型 y=b1.δ(xs=Pidgey)+w1.δ(xs=Pidgey)xcp+b2.δ(xs=Weedle)+w2.δ(xs=Weedle)xcp+b3.δ(xs=Caterpie)+w3.δ(xs=Caterpie)xcp+b4.δ(xs=Eevee)+w4.δ(xs=Eevee)xcp y = b 1 . δ ( x s = P i d g e y ) + w 1 . δ ( x s = P i d g e y ) x c p + b 2 . δ ( x s = W e e d l e ) + w 2 . δ ( x s = W e e d l e ) x c p + b 3 . δ ( x s = C a t e r p i e ) + w 3 . δ ( x s = C a t e r p i e ) x c p + b 4 . δ ( x s = E e v e e ) + w 4 . δ ( x s = E e v e e ) x c p

GRNN回归 回归reg_Regression_14


呈现结果如上图所示,当输入某一物种的数据时,其余物种对应的wi,bi w i , b i 就不考虑了,其实这相当于是对每一个物种训练了一个模型。
最后来看看实验结果。

GRNN回归 回归reg_梯度下降_15


实验结果显示,新的模型对于进化后CP值的拟合取得了非常好的效果。
小节最后这一部分探讨了以下在模型变复杂的时候,出现overfitting时一个常用的解决方案,正则化Regularization。

GRNN回归 回归reg_梯度下降_16


正则化采用的方法是在设计的模型后面加一项惩罚函数λ∑(wi)2 λ ∑ ( w i ) 2 ,将λ λ 设置为比较大的值,因为loss需要小,相应的就可以将wi w i 控制在比较小的范围内。
可以这么做的道理是,通常我们认为wi w i 小能使函数更平滑,而更加平滑的函数更可能是正确的模型。这个例子中我们采用的正则项叫L2正则项,采用其他范数作为惩罚项也是可以的。

GRNN回归 回归reg_机器学习_17


当然λ λ 也不是越大越好,合适大小还是最好的,多少合适就需要多尝试了。
另一方面,随着λ λ 增大,发现training loss是逐渐增大的,原因是λ λ 会限制\wi \w i 的取值,那么wi w i 就没法像原来那样随心所欲地找到使training loss最小的参数组合。第一节算是很基础的知识,到这里告一段落了。下次见!