PS:学习内容来自李宏毅机器学习2019版
回归模型定义
回归(Regression)就是找到一个函数(Function),通过输入的特征向量X,输出一个数值型(Scalar)变量y。
应用举例
- 股市预测(Stock market forecast):
输入:过去10年股市的变动、新闻资讯、公司并购咨询等
输出:预测股市明天的平均值 - 宝可梦精灵攻击力预测(Combat Power of a pokemen):
输入:进化前的CP值、物种(Bulbasaur)、血量(HP)、重量(Weight)、高度(Height)
输出:进化后的CP值
随后将以宝可梦作为例子说明
模型步骤
- step 1:模型假设,选这模型框架(以线性模型为例)
- step 2:模型评估,如何判断众多模型的好坏(使用损失函数作为评估方式)
- step 3:模型优化,如何筛选最优的模型(梯度下降)
Step 1: 模型假设-线性模型
一元线性模型(单个特征)
以宝可梦的一个特征
x
c
p
x_{cp}
xcp为例,线性模型假设
y
=
b
+
w
∗
x
c
p
y=b+w*x_{cp}
y=b+w∗xcp ,所以
w
w
w和
b
b
b会有很多猜测模型:
f
1
:
y
=
10
+
9
∗
x
c
p
f
2
:
y
=
−
0.8
−
1.2
∗
x
c
p
f_1:y = 10 + 9*x_{cp}\\ f_2:y = -0.8 -1.2*x_{cp}
f1:y=10+9∗xcpf2:y=−0.8−1.2∗xcp
尽管会有很多假设模型,但是我们需要选取效果最好的模型,这就是稍后模型评估与优化需要做的事,模型评估负责评判模型是否较好,而模型优化,则是对其调整使其更好。
多元线性模型(多个特征![](https://img-blog.csdnimg.cn/0f999d2462ff424ebc86bcc1fe9e21f8.png#pic_center)
在实际应用中,输入特征不一定只有
x
c
p
x_{cp}
xcp一个。例如,进化值还有血量(HP)、重量(Weight)、高度(Height)等。将多个特征进行线性回归考虑的模型即为多元线性模型。所以可以的得到假设模型:
y
=
b
+
∑
w
i
x
i
y=b+\sum w_ix_i
y=b+∑wixi
其中个变量含义如下:
- x i x_i xi: 各种特征(future)如 x c p x_{cp} xcp, x h p x_{hp} xhp, x w x_w xw,…
- w i w_i wi: 各个特征的权重 w c p w_{cp} wcp, w h p w_{hp} whp, w w w_w ww,…
- b b b: 偏移量
step 2:模型评估-损失函数
后续示例均以单个特诊 x c p x_{cp} xcp说明
收集和查看训练数据
这里定义
x
1
x^1
x1是进化前的CP值,
y
^
1
\hat{y}^1
y^1进化后的CP值即为真实值,
y
y
y为预测值(这里与概率论里学的符号表示相反,一般是
y
^
\hat{y}
y^表示预测值,
y
y
y表示真实值)。为此(
x
n
x^n
xn,
y
^
n
\hat{y}^n
y^n)在二位平面中的坐标点可以表示数据。
如何评估众多模型的好坏
有了真实数据,训练后如何对模型好坏进行评估呢?从数学角度上,可以使用求距离的方式。求【进化后的CP值】与【模型预测的CP值】之差,来判断模型的好坏。也就是使用损失函数(Loss function)来衡量模型的好坏。统计原始数据
(
y
^
n
−
f
(
x
c
p
n
)
)
2
(\hat{y}^n-f(x_{cp}^n))^2
(y^n−f(xcpn))2的和,和越小越好。更直观的表示见下图:
图中的函数
L
(
f
)
L(f)
L(f)等价变换到
L
(
w
,
b
)
L(w,b)
L(w,b)只需要将模型假设的线性函数显示带入即可。同时得到最终的损失函数Loss function:
L
(
w
,
b
)
=
∑
n
=
1
10
(
y
^
−
(
b
+
w
∗
x
c
p
)
)
2
L(w,b)=\sum_{n=1}^{10}{(\hat{y}-(b+w*x_{cp}))^2}
L(w,b)=∑n=110(y^−(b+w∗xcp))2,此时损失函数是一个关于
w
w
w和
b
b
b的二位函数,要求损失函数最小,即寻求合适的
w
w
w和
b
b
b使得函数的值最小。
Step 3:最佳模型-梯度下降方式寻求
如何筛选最优模型
在固定为线性模型条件下,筛选最优模型即寻找参数
w
w
w和
b
b
b使得损失函数
L
(
w
,
b
)
=
∑
n
=
1
10
(
y
^
−
(
b
+
w
∗
x
c
p
)
)
2
L(w,b)=\sum_{n=1}^{10}{(\hat{y}-(b+w*x_{cp}))^2}
L(w,b)=∑n=110(y^−(b+w∗xcp))2的值最小。这一定义数学表示方式见下图:
先从最简单的只有一个参数
w
w
w入手,定义
w
∗
=
arg min
w
L
(
w
)
w^*=\argmin_{w}L(w)
w∗=wargminL(w)
我们知道在函数里,可以通往梯度方向运行函数值变化最快,但是函数连续的,直接以梯度(梯度既有大小又有方向,大小为模长)的大小在梯度方向移动,会离开函数曲线。为此我们需要给每次移动定一个合适的步长。而机器学习里引入的概念学习率,则对应这里的移动步长(正值),如上图中的
η
\eta
η。对于寻找使得函数最小的点,我们可以通过随机选取一个点,然后使用梯度下降的方式,逐渐移动去找到最小值所在的点,梯度决定移动方向,学习率决定移动步长。为此可以表述为以下步骤:
- 步骤1:随机选取一个 w 0 w^0 w0
- 步骤2:计算微分,也就是当前斜率,根据斜率来判定移动方向。
- 大于0向左移动(减少 w w w)
- 小于0向右移动(增加 w w w)
- 步骤3:根据学习率移动。
- 重复步骤2和3,直到找到最低点即函数值最小的点
步骤1中,我们随机选取一个 w 0 w^0 w0,如上面的图所示可能会找到局部最优值,而不是全局最优,因为学习率较小使得无法跳出这个局部最优的凹槽,增大学习率或许可以使其跳去图示局部最小值,但也面临让其难以找到全局最优,因为可能会类似跳出局部最优直接跳过全局最优解。
通过上述单参数模型,我们对梯度下降方法工作有一定了解,回归原来的问题,则是需要考虑
w
w
w和
b
b
b这两个模型参数。过程类似,只是需要对其求偏导更新。更新过程如下图所示:
其中图片右上角红框框里的公式为梯度简洁的表示方式。
梯度下降推演最优模型的过程
如果把
w
w
w和
b
b
b在图形中展示:
- 每一条线围成的圈就是等高线,代表损失函数的值,颜色越深的区域损失值越小。
- 红色箭头代表等高线的发现方向,其实向内和向外都是发现法线方向,即变化最快的方向,梯度方向是增加最快的方向,梯度的反方向是减少最快的方向,这也是为什么更新的时候是步长与梯度乘积数值前用的负号。
梯度下降算法在现实世界中面临的挑战
我们通过梯度湘江不断更新损失函数结果,这个结果会越来越小,这种方式找到的结果是否是正确的即是否是最小值呢?除了前面提到的局部最优问题,是否还有其他问题呢?其实还会存在其他问题:
- 问题1:陷入局部最优(Stuck at local minima) 课程视频称为当前最优
- 问题2:陷入鞍点(Stuck at saddle point) 课程视频说法为等于0
- 问题3:更新缓慢(Very slow at the plateau) 课程视频说法为趋近于0
关于鞍点百科:在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点,亦或者可以表述为一个不是局部最小值的驻点(一阶导数为0)的点称为鞍点。数学含义是:目标函数在此点上的梯度(一阶导数)值为 0,但从改点出发的一个方向是函数的极大值点,而在另一个方向是函数的极小值点。在泛函中,既不是极大值点也不是极小值点的临界点,叫做鞍点。在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。在物理上要广泛一些,指在一个方向是极大值,另一个方向是极小值的点。其中我们选取的是微分方程中的定义,其实可以对照高数里的马鞍面来理解。
如图所示,在右上角的复杂曲面中,选取的某条曲线如图。 - 当曲线偏导数趋近于零,即进入平缓期,结合更新的公式,其更新会很慢,这就是问题3。
- 当其继续向前运行,会运行到偏导数等于0的点,但是这个点只是一个驻点,其不是全局的极值点,从而出现鞍点现象,从而导致从此点探索时,该参数不在此时不变,而直接沿另一个参数所在方向移动。结合公式表达式理解, w 新 = w 旧 − 0 w_{新}=w_{旧}-0 w新=w旧−0, b 新 = b 旧 − η ∗ α L α b b_{新}=b_{旧}-\eta*\frac{\alpha L} {\alpha b} b新=b旧−η∗αbαL。这就是问题2。
- 图中 w w w继续增大时,则会陷入局部极小值点。也就是当前最优,这是问题1。
如何验证训练好的模型的好坏
课程中使用训练集和测试集的平均误差来验证模型的好坏。得到的平均误差较大,为此考虑更高阶的多项式函数去拟合获得更好的训练效果。
更强大复杂的模型:1元N次线性模型
在模型上,我们还可以进一步优化,选择更复杂的模型,如使用1元2次方程。于是模型为:
y
=
b
+
w
1
∗
x
c
p
+
w
2
∗
(
x
c
p
)
2
y = b + w_1*x_{cp}+w_2*(x_{cp})^2
y=b+w1∗xcp+w2∗(xcp)2。
这里我们又会遇见新的问题:我们通常认知的线性模型图像是直线,而各种复杂的曲线就是非线性模型。为此我们质疑1元N次多项式模型是线性的。其实,他仍然是线性的,因为我们可以引入一个新的特征
x
c
p
1
x^1_{cp}
xcp1,其中
x
c
p
1
=
(
x
c
p
)
2
x^1_{cp}=(x_{cp})^2
xcp1=(xcp)2,那么
y
=
b
+
w
1
∗
x
c
p
+
w
2
∗
x
c
p
1
y=b+ w_1*x_{cp}+w_2*x_{cp}^1
y=b+w1∗xcp+w2∗xcp1其实是线性模型。更高次项依旧可以使用该方式变换处理。
过拟合问题出现
由高等数学泰勒展开式对函数拟合可知,当项的次数越高,函数拟合会更接近与原来的函数。适当的引入高次项会使得模型在测试集上效果变好,为此通过引入更高次项会改善训练数据结果。但是当次数项高过一定程度时,为此通过引入更高次项会改善训练数据结果,使得对于训练数据而言预测值与真实值误差越小,但是当模型在测试集上运行时,却表现出较差的效果,且随着项的次数与越高效果越差,这个时候就是出现了过拟合现象即在训练集上模型效果优良,而在测试集上效果较差。
为什么会发现过拟合后项的次数越高,效果越差呢?如下图所示,每一个模型结果的都是一个集合,5次模型集合
⊇
\supseteq
⊇ 4次模型集合
⊇
\supseteq
⊇ 3次模型集合。所以在四次模型集合里找到的最优模型,肯定不会比5次模型里找到的更差。
步骤优化
输入更过宝可梦数据,相同的初始CP值,但进化后的CP差距竟然是2倍。如下图,通过将宝可梦种类用颜色区分,发现了宝可梦中了是隐藏的比较深的特征,不同宝可梦种类影响进化后的CP值得结果。因而输入特征应当还有宝可梦的种类。
step1优化:2个input的四个线性模型合并到一个线性模型中
通过对宝可梦种类判断,将4个线性模型合并到一个线性模型中,如下图所示:
除了通过if的判断方式,我们还可以更具种类生成相应的独热码向量,使得对应的物种取值为1,其他的为零,将上诉四个函数通过种类特征向量整合成一个分段函数。如下图所示:
step2优化:如果希望模型更强大表现更好(更多参数,更多input)
在最开始我们由很多特诊,我们可以通过图像化分析,将血量(HP)、重量(Weight)等加入模型中,观察更多特征,更多input,对数据结果的影响,然后选择合适的参数加入模型,优化模型效果。课程中结果是:更多特征即更多input,数据量没有明显增加,仍旧导致过拟合(overfitting)。
step3优化:加入正则化
更多特诊,但是权重
w
w
w可能会使某些特征值过高,仍旧导致overfitting,所以加入正则化。
- w w w越小,表示function较平滑的,由上图公式可知, w w w越小,当特征 x i x_i xi改变时,输出函数的改变也就越小,函数曲线也月平滑。同时函数输出值与输入值相差不大。
- 在很多应用场景中,并不是 w w w越小模型越平滑越好,但是经验告诉我们 w w w越小大部分情况下都是好的。
- b b b的值接近于0,对曲线平滑是没有影响
小结
- 梯度下降的做法,后续会讲到他的理论依据和要点。
- 过拟合和正则化,目前主要介绍了表象,后面会讲更多这方面的理论。
- 关于单个特征最优的参数
w
w
w和
b
b
b可以通过最小二乘法获得,同时也为是否迭代到最优给与了判断依据,课程中通过梯度迭代获得,简述了其他思路,并将其通过图像化的表示出来了。
博客里的图片均来自datawhale开源学习资料,来源链接如下:
https://gitee.com/datawhalechina/leemlnotes/tree/master/docs/chapter3/res