「机器学习-李宏毅」:Regression

YouTube上看台大李宏毅老师的课,看完Regression讲座的感受就是: 好想去抓Pokemon!!!
这篇文章将总结李宏毅老师Regression的讲座,并尝试实现其demo。

Regression(回归)

Define

Regression:是找到一个$function$,进行预测。对输入的feature,输出一个$Scalar$(数值,标量)。

Example Application

3rgUIg.md.png

Look for a $function$

  • Stock Market Forecast(股票预测)

    $input$:过去的股价信息

    $output$:明天的股价平均值($Scalar$)

  • Self-Driving Car(自动驾驶)

    $input$:路况信息

    $output$:方向盘角度($Scalar$)

  • Recommendation(推荐系统)

    $input$:使用者A、商品B

    $output$:使用者A购买商品B的可能性

可见,$input$都是一些特征信息,$output$都是一个标量数值,这就是Regression。

Regression Case: Pokenmon

看完这节课,感想:好想去抓宝可梦QAQ

预测一个pokemon进化后的CP(Combat Power,战斗力)值。

为什么要预测呐?

如果进化后的CP值高,就进化他,不然就把他当糖果,因为宝可梦很难抓的。(?没玩过,我也不懂o r z)

3rgNdS.md.png

  • 上图妙蛙种子的信息(可能的$input$):

    $x_{cp}$:CP值

    $x_s$:物种

    $x_{hp}$:生命值

    $x_w$:重量

    $x_h$:高度

  • output:进化后的CP值。

$x_{cp}$:用下标表示一个object的component。

$x^1$:用上标表示一个完整的object。

Step 1: 找一个Model(function set)

Model :$y = b + w \cdot x_{cp}$

假设用上式作为我们的Model,那么这些函数: $ \begin{aligned} &\mathrm{f}_{1}: \mathrm{y}=10.0+9.0 \cdot \mathrm{x}_{\mathrm{cp}}\\ &f_{2}: y=9.8+9.2 \cdot x_{c p}\\ &f_{3}: y=-0.8-1.2 \cdot x_{c p} \end{aligned} $ 等都属于这个集合,但是显然像$f_3$这种函数是bad,CP值不可能是负数。bad functions 很多,所以在下面的步骤,会说明如何判别一个函数的好坏,自动的选出最好的那个 $function$。

把Model 1一般化,得到线代中的 Linear Model:$y = b+\sum w_ix_i$

$x_i$:x的feature

$b$:bias,偏置值

$w_i$:weight,权重

Step 2: 判别Goodness of Function(Training Data)

Training Data

假定使用Model :$y = b + w \cdot x_{cp}$

3rgtZ8.md.png

Training Data:十只宝可梦,用向量的形式表示。

使用Training data来judge the goodness of function.。

Loss Function(损失函数)

概率论:做线性回归,一般使用最小二乘法。一般回归,大多使用极大似然估计。

Loss function $L$ :$L(f)=L(w,b)=\sum_{n=1}^{10}(\hat{y}^n-(b+w\cdot x_{cp}^n))^2$

其中的 $\hat{y}^n-(b+w\cdot x_{cp}^n)$是Estimation error(估测误差)

Loss Function的意义:它的 $input$是一个 $function$,它的 $output$体现了how bad it is,这个函数有多糟/好。

Figure the Result

3rgJqf.md.png

上图横纵坐标是函数 $L$的参数 $w 、b$,图中的每一个point都是一个 $function $。

color:体现函数的输出,越红越大,说明选择的函数越bad。

所以我们要选择紫色区域结果最小的函数。

而这个得到best function的过程是可以通过无数次迭代实现的。(重复的迭代当时是交给计算机做了)

Step 3:迭代找出Best Function

$L(w,b)=\sum_{n=1}^{10}(\hat{y}^n-(b+w\cdot x_{cp}^n))^2$

找到Best Function: $f^{*}=\arg \min _{f} L(f)$

也就是找到参数 $w^{*},b^{*}=\arg \min_{w,b} L(w,b)=\arg \min_{w,b}\sum_{n=1}^{10}(\hat{y}^n-(b+w\cdot x_{cp}^n))^2$

arg :argument,变元

arg min:使之最小的变元

arg max:使之最大的变元

据悉,线性回归的参数可以用线性代数的知识,解出closed-form solution(解析解),我先挖个坑QAQ,以后来填这块知识。[1]

在机器学习中,只要$L$函数可微分, 即可用Gradient Descent(梯度下降)的方法来求解。

Gradient Decent(梯度下降)

和概率论中的梯度下降估计参数的原理相同,只是计算机不能直接解出方程的解,所以计算机的方法是迭代。

考虑一个参数w*

$w^*=\arg \min_w L(w)$

步骤:

  1. 随机选取一个初始值 $w^0$

  2. 计算 $ \frac{{\rm d}L}{{\rm d}w}|_{w=w^0}$     $\begin{equation} w^{1} \leftarrow w^{0}-\left.\eta \frac{d L}{d w}\right|_{w=w^{0}} \end{equation}$

  3. 计算 $ \frac{{\rm d}L}{{\rm d}w}|_{w=w^0}$    $\begin{equation} w^{2} \leftarrow w^{1}-\left.\eta \frac{d L}{d w}\right|_{w=w^{1}} \end{equation}$

  4. …until $ \frac{{\rm d}L}{{\rm d}w}|_{w=w^n}=0$ [![3rgGsP.md.png](https://s2.ax1x.com/2020/02/28/3rgGsP.md.png)](https://imgchr.com/i/3rgGsP) **上图迭代过程的几点说明** - $\begin{equation} \left.\frac{\mathrm{d} L}{\mathrm{d} w}\right|_{w=w^{i}} \end{equation}$的正负 如果是negative,也就是该点切线斜率是负的,那应该Increse w,以找到最低点。 - Negative $\rightarrow$ Increase w - Positive $\rightarrow$ Decrease w - $-\left.\eta \frac{d L}{d w}\right|_{w=w^{i}}$:步长 - $\eta$:learning rate(学习速度),事先设好的值。 - $-$(负号):如果 $\begin{equation} \left.\frac{\mathrm{d} L}{\mathrm{d} w}\right|_{w=w^{i}} \end{equation}$是负的,应该增加w。 - Local optimal:局部最优和全局最优 - 如果是以上图像,则得到的w不是全局最优。 - 但线性回归的损失函数是凸函数,存在一个全局最优,没有局部最优。 ### 考虑多个参数 $w^{*},b^{*}$

微积分知识:gradient(梯度,向量): $\nabla L=\left[\begin{array}{l}
\frac{\partial L}{\partial w} \
\frac{\partial L}{\partial b}
\end{array}\right]$

考虑多个参数和考虑一个参数思路相同,每次迭代,迭代两个参数。

$w^{*}, b^{*}=\arg \min _{w, b} L(w, b)$

步骤

  1. 随机选取初值 $w^0,b^0$

  2. 计算 $\left.\left.\frac{\partial L}{\partial w}\right|_{w=w^{0}, b=b^{0},} \frac{\partial L}{\partial b}\right|_{w=w^{0}, b=b^{0}}$     $w^{1} \leftarrow w^{0}-\left.\eta \frac{\partial L}{\partial w}\right|_{w=w^{0}, b=b^{0}} \quad b^{1} \leftarrow b^{0}-\left.\eta \frac{\partial L}{\partial b}\right|_{w=w^{0}, b=b^{0}}$

  3. 计算 $\left.\left.\frac{\partial L}{\partial w}\right|_{w=w^{1}, b=b^{1},} \frac{\partial L}{\partial b}\right|_{w=w^{1}, b=b^{1}}$       $w^{2} \leftarrow w^{1}-\left.\eta \frac{\partial L}{\partial w}\right|_{w=w^{1}, b=b^{1}} \quad b^{2} \leftarrow b^{1}-\left.\eta \frac{\partial L}{\partial b}\right|_{w=w^{1}, b=b^{1}}$

  4. …until $ \frac{{\rm d}L}{{\rm d}w}|_{w=w^n}=0$, $ \frac{{\rm d}L}{{\rm d}b}|_{b=b^n}=0$

3rg1xI.md.png

上图,坐标为 $L(w,b)$函数的参数,Color代表 $L$的大小,越紫值越小。

每一个点都是一个 $function$,沿着梯度方向(图中法线方向)迭代,找到全局最优点。

再次说明:线性回归中,损失函数是convex(凸函数),没有局部最优解。

$\frac{\partial L}{\partial w}$和 $\frac{\partial L}{\partial b}$的公式推导

$L(w, b)=\sum_{n=1}^{10}\left(\hat{y}^{n}-\left(b+w \cdot x_{c p}^{n}\right)\right)^{2}$

微积分的知识,显然。

数学真香。———我自己

$\frac{\partial L}{\partial w}=\sum_{n=1}^{10}2\left(\hat{y}^{n}-\left(b+w \cdot x_{c p}^{n}\right)\right)(-x_{cp}^n)$

$\frac{\partial L}{\partial b}=\sum_{n=1}^{10}2\left(\hat{y}^{n}-\left(b+w \cdot x_{c p}^{n}\right)\right)(-1)$

实际结果分析

Training Data

3rglRA.md.png

Training Data的Error=31.9,但我们真正关心的是Testing Data的error。

Testing Data 是new Data:另外的Pokemon!。

Testing Data

Model 1: $y = b+w\cdot x_{cp}$

error = 35,比Training Data error更大。

3rglRA.md.png

Model 2:$y = b+w_1\cdot x_{cp}+w_2\cdot (x_{cp})^2$

Testing error=18.4,比Model 1 好。

3rgMPH.md.png

Model 3:$y = b+w_1\cdot x_{cp}+w_2\cdot (x_{cp})^2+w_3\cdot(x_{cp})^3$

Testing error=18.1,比Model 2好。

3rgVr6.md.png

Model 4:$y = b+w_1\cdot x_{cp}+w_2\cdot (x_{cp})^2+w_3\cdot(x_{cp})^3+w_4 \cdot (x_{cp})^4$

Testing error =28.8,比Model3更差。

3rgZqK.md.png

Model 5:$y = b+w_1\cdot x_{cp}+w_2\cdot (x_{cp})^2+w_3\cdot(x_{cp})^3+w_4 \cdot (x_{cp})^4+w_5\cdot (x_{cp})^5$

Testing error = 232.1,爆炸了一样的差。

3rgmVO.md.png

Overfiting(过拟合了)

从上面5个Model中可以得出,越复杂的函数模型,在Testing data上不一定能得到更好的结果。(过拟合使Training data 的误差越来越小)

所以在选择Model时,需要选择合适的Model。

对模型进行改进

如果收集更多的Training Data,可以发现他好像不是一个Linear Model。

3rguIe.md.png

Back to step 1:Redesigh the Model

从上面那张图,感觉他不是一个Linear Model,而是需要if 是伊布,模型是…,if 是…,可见是和物种有关系。

(很抱歉,我只认识右上角时伊布,QAQ,我也说不出名字)

但用 $\delta$(微积分学的狄拉克函数)表示条件语句,可以发现,他仍然是一个线性模型。

$\delta(x_s= \text{Pidgey)}\left\{\begin{array}{ll}=1 & \text { If } x_{s}=\text { Pidgey } \\ =0 & \text { otherwise }\end{array}\right.$

$y = b_1\cdot \delta_1+w_1\cdot \delta_1+b2\cdot \delta_2+w_2\cdot \delta_2+…$是一个linear model。

拟合出来,Training Data 和Testing Data的error都蛮小的。

如果想让拟合误差更小,还可以考虑其他的feature,重量、高度、HP等。

但同样的,如果函数过于复杂,也会出现Overfitting的情况。

Back to Step 2:Regularization(正则化)

对于Linear Model :$y = b+\sum w_i x_i$

为什么要正则化?

我们希望得到的函数是较平滑的,这样测试时,函数的输出对输入的noise不sensitive,即输入x的细微扰动,并不太会影响输出的结果。

所以当参数越接近0,函数越平滑。因此在原本的loss function后加入 $\lambda \sum(w_i)^2$项( $\lambda$需手调),可以保证函数较平滑。

正则化: $L = \sum_n(\hat{y}^n-(b+\sum w_i x_i))^2 + \lambda\sum(w_i)^2$

$\lambda $大小的选择

3rgnaD.md.png

可以得出结论:

  • $\lambda $越大,Training Error变大了。

    当 $\lambda$更大,损失函数更考虑w参数的取值,更关心函数的平滑程度,而更少的关心拟合的error。

  • $\lambda $越大,Testing Error变小了,当 $\lambda$过大时,又变大。

    $\lambda $较小时,$\lambda $增大,函数更平滑,能良好适应数据的扰动。

    $\lambda $较大时,函数过于平滑,宛如直线,这显然不能准确预测。

因此,在调节$\lambda $大小时,也要适当选择。

正则化的一个注意点

在regularization中,我们只考虑了w参数,没有考虑bias偏置值参数

因为正则化是寻找较平滑拟合,而偏置参数只是让函数平移,与平滑无关。

Again:Regularization不考虑bias

Fllowing

  • Gradient descent[2]
  • Overfitting and regularization[3]
  • Validation[4]

由于博主也是在学习阶段,学习后,会po上下面内容的链接。

希望能在学习、写博客的过程中,锻炼自己的表达能力,尽量让文风言简意赅又科学严谨。

写博客是为了记录与分享,感谢指正。

Reference

[1] “周志华西瓜书p55,待补充”

[2]

[3]

[4]

「机器学习-李宏毅」:Regression

https://f7ed.com/2020/02/29/Regression/

Author

f1ed

Posted on

2020-02-29

Updated on

2020-07-03

Licensed under

CC BY-NC-SA 4.0


Comments