小白入门李宏毅2020机器学习:1)Regression:Case Study

687 阅读6分钟

小知识,大挑战!本文正在参与“   程序员必备小知识   ”创作活动

本文同时参与 「掘力星计划」   ,赢取创作大礼包,挑战创作激励金

问题:

根据宝可梦的已知信息(输入的属性,哪一个物种,HP值等等),去预测宝可梦的cp值。

机器学习的流程可以分成3步:

Step1:Model (function set)

Step2:Goodness of Function

Step3:Pick the Best Function

宝可梦的cp值预测问题中:

1.Model (function set):

关于Model,选择很多,这里采用的是定义了一个基础的线性回归模型。

根据不同的w和b,可以确定不同的无穷无尽的function,因此也就是我们想要确定模型的function set。我们的目标就是从这无穷无尽的线性function找到一个最合适的函数。

2.Goodness of Function

在确定了模型集合后,我们需要定义一个另一个函数(叫做损失函数),去评价函数的好坏。**损失函数:**是一个函数的函数。喂给损失函数的是一个函数,输出的是这个函数有多好。套着一层函数的函数。也就是可以写成下面的Loss(f)。

我们的目标是找到最好的函数,即找到让Loss最小的函数(参数)。

下面这个图展示了在我们定义的线性model的参数空间中loss的值的情况。颜色代表了Loss的大小。

在w和b的不同取值中,下面部分的loss往往较大,左上角的部分的loss往往较小。也就是我们可以选择左上角的参数作为模型去建模这个问题。

3.pick the best function

定好了loss function,那么怎么找最好的loss function呢?

我们的目标实际上可以写成。

也就是找到一个f,让L达到最小的值。或者找到w和b让L达到最小的值。 那么怎么找呢?如果学过线性代数的话,上面那个式子有闭式解!!但是有些复杂的函数用线性代数是解不出来的,那么怎么做呢?

最naive的方法,如下图所示,我们去遍历所有的可能w,求出对应的损失函数值,找到让损失函数值最小的参数。

w的空间也太大了~因此机器学习领域采用梯度下降(Gradient descent)去找最好的值(要保证loss函数是可以求导的)。

学过高数的都知道,这就是不断沿着loss下降的方法移动,沿着梯度下降(导数)的方向移动!!

那么每次移动(下降多少)呢?如下图所示,更新的大小learning rate 和导数的乘积。

重复上述的梯度更新步骤,直至optimal。

梯度下降方法有一些问题:

因为每次都是沿着梯度下降的方法去更新参数,那么可能会走到下图中2个不同的局部最优点。我们想要的是全局最优。

但是,由于宝可梦的cp值预测我们选取的model比较简单,因此不存在上述的局部最优问题。

How’s the results?

**有了模型和参数之后,怎么判断我们的模型好坏呢?**Average Error on Training Data 。在训练集上的误差。但是,我们真正想要模型对未知的数据表现更好,也就是test error较小。作者做了一系列的实验。

训练集的误差在不断减小,但是测试集的误差开始减少,会突然暴增。

越复杂的模型在训练集上的误差越小~但是并不是越复杂的模型在测试集上的效果就越好!

在训练集和测试集表现的不一致,是模型的过拟合问题。

overfitting过拟合:

在training data上,model越复杂,error就会越低;但是在testing data上,model复杂到一定程度之后,error非但不会减小,反而会暴增,通常被称为**overfitting过拟合.**因此model不是越复杂越好,而是选择一个最适合的model.

防止过拟合正则项:

在原来的loss function的基础上加上了一项参数的惩罚。即尽可能的让参数贴近0.原来的loss function只考虑了prediction的error,regularization则是在原来的loss function的基础上加上了一项λ ,就是把这个model里面所有的$w_i$的平方和用λ加权(其中i代表遍历n个training data,j代表遍历model的每一项)也就是说,**我们期待参数w越小甚至接近于0的function,为什么呢?**因为参数值接近0的function,是比较平滑的;所谓的平滑的意思是,当今天的输入有变化的时候,output对输入的变化是比较不敏感的。

L1和L2规范化实际上是在约束什么?

左图1范数的约束,右图二范数的约束,圆圈是损失函数的等值线。

以1范数为例,在红色的损失函数线上的损失函数是一样的,过红色线上任意一点都可以做很多个菱形,也就是一范数的可视化。为了让这个菱形最小,那么过这个点做的菱形一定要和这个点相切,也就是图上的这个位置。我们经过观察可以看到,几乎对于很多原函数等高曲线,和某个菱形相交的时候及其容易相交在坐标轴(比如上图),因此也就是让参数的某些值为0.因此1范数往往是稀疏的。 左图1范数的约束,右图二范数的约束,圆圈是损失函数的等值线。

以1范数为例,在红色的损失函数线上的损失函数是一样的,过红色线上任意一点都可以做很多个菱形,也就是一范数的可视化。为了让这个菱形最小,那么过这个点做的菱形一定要和这个点相切,也就是图上的这个位置。我们经过观察可以看到,几乎对于很多原函数等高曲线,和某个菱形相交的时候及其容易相交在坐标轴(比如上图),因此也就是让参数的某些值为0.因此1范数往往是稀疏的。 左图1范数的约束,右图二范数的约束,圆圈是损失函数的等值线。

以1范数为例,在红色的损失函数线上的损失函数是一样的,过红色线上任意一点都可以做很多个菱形,也就是一范数的可视化。为了让这个菱形最小,那么过这个点做的菱形一定要和这个点相切,也就是图上的这个位置。我们经过观察可以看到,几乎对于很多原函数等高曲线,和某个菱形相交的时候及其容易相交在坐标轴(比如上图),因此也就是让参数的某些值为0.因此1范数往往是稀疏的。 同理,2范数不容易交在坐标轴上,但是仍然比较靠近坐标轴因此这也就是我们老说的,L2范数能让解比较小(靠近0),但是比较平滑(不等于0)