参考来源:台大 李宏毅 2020机器学习深度学习课程
0、知识点
- 回归(Regression)
- 梯度下降(Gradient descent)
- 过拟合(Overfitting)
- 正则化(Regularization)
一、回归能做哪些事?(应用)
![](https://i-blog.csdnimg.cn/blog_migrate/1baffbef190945fc0bdcd4d9d24b549a.png)
二、应用:预测宝可梦的CP(Combat Power)值
输入某一只宝可梦的所有属性值,找到一个函数f,输出其进化后的CP值
Xcp:某一只宝可梦的CP值
Xw:某一只宝可梦的重量值
…
![](https://i-blog.csdnimg.cn/blog_migrate/8d3b6902153cd5b28b6749af4e7ae7e6.png)
按照机器学习的步骤依次进行:
Step1: Model
先设置函数集合 f1 , f2 , f3…
假定每一个 f 都是这个样子:
y
=
b
+
w
∗
x
c
p
y = b + w* x_{cp}
y=b+w∗xcp
其中
b
b
b和
w
w
w是参数,理论上可以取任意值
可以进一步将多个待选函数 f 写成一个线性模型:
y
=
b
+
∑
w
i
x
i
y = b + \sum{w_{i}x_{i}}
y=b+∑wixi
![](https://i-blog.csdnimg.cn/blog_migrate/2da14fed532a01d37619e1b316db1887.png)
Step2: Goodness of Function
Training data
:
![](https://i-blog.csdnimg.cn/blog_migrate/ea56418e85738eb7716b9484ddcda2a0.png)
其中 x 1 x^{1} x1表示第1个训练数据中的输入 , y ^ 1 {\hat{y}}^{1} y^1表示第一个训练数据的输出(真实数据)。
![](https://i-blog.csdnimg.cn/blog_migrate/a6446e85585ac2c1717abf2a3257a65f.png)
损失函数
Loss function
衡量一个函数的好坏
== 衡量一组参数的好坏
可以自己定义
此处定义为所有测试数据的真实值和预测值的平方的和
![](https://i-blog.csdnimg.cn/blog_migrate/6480a59d414ab1bd390bc43a17b247b7.png)
Step3: Best Function & Gradient Descent
![](https://i-blog.csdnimg.cn/blog_migrate/0717758d1c59c1e4554c945bdad5978e.png)
只要损失函数Loss Function是可微分的,那么就可以用Gradient Descent(梯度下降)求得比较理想的function或参数
![](https://i-blog.csdnimg.cn/blog_migrate/8ceab513d51a1f1719a317808d4a992d.png)
计算
d
L
d
w
∣
w
=
w
0
\frac {dL} {dw}\vert_{w=w^0}
dwdL∣w=w0后,如果斜率为负,说明w右侧的Loss更小,则下一步w向右移动;若斜率为正,则w向左移动。(梯度指向增长最大方向的,所以要反向负号)
η
\eta
η:学习率(Learning rate) 影响参数更新的幅度,
η
\eta
η 越大的话,学习参数的速率更快,但可能使得参数错过Loss function的最小值对应的点。
可能会找到局部最优解,但不是全局最优解。
在线性回归中,不存在局部最优的问题。(凸优化函数的局部最优解就是全局最优解,等高线图是二维的)
![](https://i-blog.csdnimg.cn/blog_migrate/fc7e41e73670693b89d4c2ebaf4fb648.png)
两个参数的情况:
![](https://i-blog.csdnimg.cn/blog_migrate/0516edd4b7e4bc23550752665838bb63.png)
(最后一行的
w
0
w^0
w0和
b
0
b^0
b0应该改为
w
1
w^1
w1和
b
1
b^1
b1)
梯度
:
![](https://i-blog.csdnimg.cn/blog_migrate/a0b264e94906bab565364c77ad32e4cf.png)
梯度下降可能会遇到的问题
:
![](https://i-blog.csdnimg.cn/blog_migrate/a5bf6e94df1d104ba976465b082649e9.png)
得到最优的解看人品(●’◡’●)
最后找到的结果及其在训练集上的平均误差:
![](https://i-blog.csdnimg.cn/blog_migrate/f019b630227eff09e3a4daae2612feea.png)
实际上我们更要考虑的是在新的数据(测试集)上的表现 —— 泛化能力 如何?
![](https://i-blog.csdnimg.cn/blog_migrate/b74d9d159f21fc8008eddd19ab37096e.png)
此时Average Error = 35.0
不能只看训练集精度,还要看测试集精度,防止过拟合
三、如何改进(How can we do better?)
答:改变模型?
第1种改进:增加多项式模型的次数(复杂度)
![](https://i-blog.csdnimg.cn/blog_migrate/681c81a7b88d2161ba9cc0cbcbc8f913.png)
一个越复杂
的model在训练集
上的误差越低
![](https://i-blog.csdnimg.cn/blog_migrate/9aafb76ec5b3a4269be3576dee5a2285.png)
一个越复杂
的model在训练集
上的误差越低
,但在测试集
上误差并不一定更低,这就是**过拟合(Overfitting)
**
![](https://i-blog.csdnimg.cn/blog_migrate/0d23fc783afc83c32bf2af5c35c01643.png)
第2种改进:收集更多测试数据,发现隐藏因素(物种或其他因素),将其加入模型
增加测试集
![](https://i-blog.csdnimg.cn/blog_migrate/9cb54a72067b480b51b0d6e242226ff2.png)
隐藏的因素是物种!!!
将不同的物种用不同的颜色表示
![](https://i-blog.csdnimg.cn/blog_migrate/6f8d60ca8218e911a28c2725227b0613.png)
重新设计Model,加入物种的影响:
![](https://i-blog.csdnimg.cn/blog_migrate/b3cdb277a6b48b54127ff71c5ffcc077.png)
将上述式子写成线性模型的形式:
![](https://i-blog.csdnimg.cn/blog_migrate/d5566281542496b4876cd8b63ab67aaf.png)
不同种类的宝可梦用的参数不一样,因此有不同的曲线:
结果:
![](https://i-blog.csdnimg.cn/blog_migrate/65d3bb92529282048521413395cde602.png)
第3种改进:损失函数正则化
还有其他因素吗?
体重、高度、HP… 加入到模型中
![](https://i-blog.csdnimg.cn/blog_migrate/c227af84bd6a372296b23cf1d9710524.png)
结果坏掉了/(ㄒoㄒ)/~~
损失函数正则化(Regularization)
![](https://i-blog.csdnimg.cn/blog_migrate/2ec6c21f54dd65c94ac5d647bc661e01.png)
参数
w
i
w_{i}
wi越小,函数越平滑(smooth)
。
(因为假设输入
x
i
x_i
xi的变化量为
Δ
x
i
\Delta{x_i}
Δxi,则输出的变化量为
w
i
Δ
x
i
w_{i}\Delta{x_i}
wiΔxi,
w
i
w_i
wi越小,输出变化越小)
函数越平滑
:输出对输入的变化越不敏感
λ \bm{\lambda} λ是平滑因子,自己定值(超参)
正则化时不需要考虑偏置项bias,因为bias不影响函数的平滑程度
λ \lambda λ越大,说明在Loss函数中的误差和平滑这两项中考虑平滑因素更多,所以 λ \lambda λ越大,函数就越平滑,但在Training data上的误差越大(因为考虑误差较少)
我们喜欢平滑的函数,但不喜欢太平滑的函数(太平滑的就是水平线),所以Testing data的平均误差随着
λ
\lambda
λ的增大先变小,后变大
我们要决定How smooth?
调参 —— 选择
一个获得最佳模型
的
λ
\bm{\lambda}
λ 值,此处选择
λ
=
100
\lambda = 100
λ=100.
![](https://i-blog.csdnimg.cn/blog_migrate/e0cd1068455a0268b8acf3d2e6454c69.png)