回归(Regression)
回归的应用:
- 股市预测:Stock Market Forecast,输入前面的股市行情,输出明天的结果
- 自动驾驶:Self-driving car,输入一些场景,输出方向盘角度
- 推荐系统:Recommendation,使用者A购买商品B的可能性
- 预测宝可梦的攻击值:Estimating the Combat Power(CP) of a pokemon after evolution,输入宝可梦的所有属性(进化前的CP值、物种Bulbasaur、血量HP、重量Weight、高度Height),输出进化后的CP值
模型步骤
- 模型假设,选择模型框架(线性模型Linear model),即选择function set
- 模型评估定义,如何判断function set中的好坏,定义损失函数L
- 模型优化,筛选出最好的模型(梯度下降)
模型假设
假设线性模型为: y = b + ∑ w i x i y = b + \sum w_ix_i y=b+∑wixi
- x i x_i xi:模型的输入,也叫做特征feature
- w i w_i wi:各个特征的权重weight
- b b b:偏移量bias
模型评估
1.收集数据
这里定义 x 1 x^1 x1是进化前的CP值, y ^ 1 \hat{y}^1 y^1是进化后的CP值,其中 ^ \hat{} ^表示是真实值,这里一共收集了10组原始数据,如下图所示:
2.定义损失函数Loss function
损失函数L的输入是function,输出该函数的好坏程度,这里通过使用均方误差的方式来定义损失函数,如下:
L
(
f
)
=
∑
n
=
1
10
(
y
^
n
−
f
(
x
c
p
n
)
)
2
,
将
【
f
(
x
)
=
y
】
,
【
y
=
b
+
w
⋅
x
c
p
】
代
入
=
∑
n
=
1
10
(
y
^
n
−
(
b
+
w
⋅
x
c
p
)
)
2
\begin{aligned} L(f) & = \sum_{n=1}^{10}\left ( \hat{y}^n - f(x_{cp}^n) \right )^2,将【f(x) = y】, 【y= b + w·x_{cp}】代入 \\ & = \sum_{n=1}^{10}\left ( \hat{y}^n - (b + w·x_{cp}) \right )^2\\ \end{aligned}
L(f)=n=1∑10(y^n−f(xcpn))2,将【f(x)=y】,【y=b+w⋅xcp】代入=n=1∑10(y^n−(b+w⋅xcp))2
最终的损失函数Loss function:
L
(
w
,
b
)
=
∑
n
=
1
10
(
y
^
n
−
(
b
+
w
⋅
x
c
p
)
)
2
L(w,b)= \sum_{n=1}^{10}\left ( \hat{y}^n - (b + w·x_{cp}) \right )^2
L(w,b)=∑n=110(y^n−(b+w⋅xcp))2
将 w w w, b b b 在二维坐标图中展示,如图所示:
- 图中每一个点代表着一个模型对应的 w w w 和 b b b
- 颜色越深代表模型更优
模型优化-梯度下降
1.梯度下降gradient descent
已知损失函数是 L ( w , b ) = ∑ n = 1 10 ( y ^ n − ( b + w ⋅ x c p ) ) 2 L(w,b)= \sum_{n=1}^{10}\left ( \hat{y}^n - (b + w·x_{cp}) \right )^2 L(w,b)=∑n=110(y^n−(b+w⋅xcp))2 ,需要找到一个令结果最小的 f ∗ f^* f∗,在实际的场景中,我们遇到的参数肯定不止 w w w, b b b。
先从最简单的只有一个参数 w w w入手,定义 w ∗ = a r g min x L ( w ) w^* = arg\ \underset{x}{\operatorname{\min}} L(w) w∗=arg xminL(w)
首先在这里引入一个概念 学习率learning rate :移动的步长,如图7中 η \eta η
- 步骤1:随机选取一个 w 0 w^0 w0
- 步骤2:计算微分,也就是当前的斜率,根据斜率来判定移动的方向
- 大于0向右移动(增加 w w w)
- 小于0向左移动(减少 w w w)
- 步骤3:根据学习率移动
- 重复步骤2和步骤3,直到找到最低点
解释完单个模型参数 w w w,引入2个模型参数 w w w 和 b b b , 其实过程是类似的,需要做的是偏微分,过程如下图所示:
整理成一个更简洁的公式:
其中 w w w和 b b b偏微分的计算方法如下:
2.梯度下降面临的挑战
通过梯度下降gradient descent不断更新损失函数的结果,这个结果会越来越小,但是会存在以下问题:
- 局部最优:stuck at local minima
- 等于0:stuck at saddle point
- 趋近于0:very slow at the plateau
注意:其实在线性模型里面都是一个碗的形状(山谷形状),梯度下降基本上都能找到最优点,但是再其他更复杂的模型里面,就会遇到 问题2 和 问题3 了
验证模型的好坏
使用训练集和测试集的平均误差来验证模型的好坏
我们使用将10组原始数据,训练集求得平均误差为31.9,其中的误差
e
=
∣
y
^
−
y
∣
e = \left|\hat{y}-y\right|
e=∣y^−y∣,如图所示:
再使用10组Pokemons测试模型,测试集求得平均误差为35.0 如图所示:
更复杂的模型:1元N次线性模型
在模型上,可以进一步的优化,选择更复杂的模型,如使用1元2次方程,如下图:
这里注意:上述模型仍然是线性模型,因为把 x c p 1 x_{cp}^1 xcp1 = ( x c p ) 2 (x_{cp})^2 (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 其实就是线性模型。
过拟合问题
在模型上,可以进一步选择更复杂的模型,但是发现在训练集上面表现更为优秀的模型,在测试集上效果反而变差,这就是模型在训练集上出现了过拟合overfitting的问题。
如下图,每一个模型结果都是一个集合,在低次模型找到的最佳模型肯定不会比高次模型的更差
特征选择优化
在前面的模型选择中,使用的模型都只考虑了起始CP值作为特征,通过对比可以发现Pokemons种类也会影响进化后的CP值。
2个特征的四个线性模型合并到一个线性模型中
进一步优化:引入更多特征更多参数
在最开始我们有很多特征,图形化分析特征,将血量(HP)、重量(Weight)、高度(Height)也加入到模型中。
更多特征,数据量没有明显增加,导致overfitting
加入正则化
更多特征,但是权重 w w w 可能会使某些特征权值过高,仍旧导致overfitting,所以加入正则化
- w w w 越小,表示 f u n c t i o n function function 较平滑的, f u n c t i o n function function输出值与输入值相差不大
- 在很多应用场景中,并不是 w w w 越小模型越平滑越好,但是经验值告诉我们 w w w 越小大部分情况下都是好的。
- b b b 的值接近于0 ,对曲线平滑是没有影响
总结
- Pokemon:原始的CP值极大程度的决定了进化后的CP值,但可能还有其他的一些因素。
- Gradient descent:梯度下降的做法;后面会讲到它的理论依据和要点。
- Overfitting和Regularization:过拟合和正则化,主要介绍了表象;后面会讲到更多这方面的理论
思考题:
- 常用于回归的损失函数有哪些
- 梯度下降的优缺点,怎么解决局部最优的这个缺点的?
- 参数量过大会导致什么问题,后续可以采取什么样的方式进行解决这个问题
References
[1] https://datawhalechina.github.io/leeml-notes/#/chapter3/chapter3
[2] https://relph1119.github.io/my-team-learning/#/lee_ml37/task03