机器学习基础
机器学习是让模型具备自动找函数的能力
模型:带有未知参数的函数,比如线性回归问题中 y = w x i + b y = wx_i +b y=wxi+bw, b 就是未知的参数
三大任务
找函数的目的是为了处理任务,本书中描述了三种任务:回归、分类、结构化学习
- 回归(Regression): The function outputs a scalar. 假设我们要找的函数输出一个值,是一个标量
- 分类(Classification): Given options(classes), the function outputs the correct one. 让模型做选择,假设给定的选择数大于等于 2
- 结构化学习(Structured Learning):Create something with structure(such as image, document),这更有挑战性,也更具有意义,比如我们熟知的 ChatGPT,以及 Stable Diffusion 等图像生成模型。
模型训练步骤:
1. 建立函数
Function with unknown parameters(based on domain knowledge) 猜测一个带有未知参数的函数,之后修正
2. 定义损失
Define loss from training data 验证函数效果好不好,基础公式如下:
L
=
1
N
∑
n
e
n
(1)
L = \frac{1}{N}\sum_ne_n \tag {1}
L=N1n∑en(1)
e
=
∣
y
−
y
^
∣
(2)
e = |y - \hat y| \tag{2}
e=∣y−y^∣(2)
e
=
(
y
−
y
^
)
2
(3)
e = (y - \hat y)^2 \tag{3}
e=(y−y^)2(3)按照公式 2, L 被称为 MAE(mean absolute error),按照公式 3,L 被称为 MSE(mean square errorr) 。
特殊情况下,如果 y 和 y hat 都是概率分布(probability distributions),这个时候可能会选择交叉熵(cross entropy)
可以调整不同的 w 和不同的 b,求取各种 w 和各种 b,组合起来以后,我们可以为不同的 w 跟 b 的组合,都去计算它的损失(loss)。
注意:损失函数是自己定义的,在刚才定义里面,损失就是估测的值跟正确的值的绝对值。比如设置一个损失函数为绝对值再减 100,损失可能就有负的。
所以损失曲线并不是一个真实的损失,可以是任何形状。
3. 最优化参数
w ∗ , b ∗ = a r g min w , b L (4) w^*, b^* = arg\min_{w,b}L\tag{4} w∗,b∗=argw,bminL(4)梯度下降(gradient descent) 是经常会使用优化(Optimization)的方法,也是这本书里用到的唯一的最优化方法。具体实现步骤如下:
- 随机选取一个初始点 w0
- 计算初始点处 w0 对 loss 的微分
∂ L ∂ w ∣ w = w 0 (5) \frac{\partial{L}}{\partial{w}} |_{w=w^0}\tag{5} ∂w∂L∣w=w0(5)如下图所示,我们可以想像说有一个人站在这个地方,他左右环视一下,计算微分就是左右环视,它会知道左边比较高还是右边比较高,看哪边比较低,它就往比较低的地方跨出一步。这一步的步伐的大小取决于两件事情:
- 斜率大小:步伐大小直接取决于斜率大小,斜率大步伐就跨大一点,斜率小步伐就跨小一点。补充知识:在标准坐标系下,图像的斜率即函数的导数,为损失函数的微分 dL 与自变量微分 dw 之商
- 学习率(learning rate):学习率 η 是我们自己设定的。η 也会影响步伐大小。
- 如果 η 设大一点,每次参数更新就会量大,学习可能就比较快。
- 如果 η 设小一点,参数更新就很慢,每次只会改变一点点参数的数值。
在做机器学习时,需要自己设定,不是机器自己找出来的,称为超参数(hyperparameter)。
3. 迭代移动 wi
w
1
←
w
0
−
η
∂
L
∂
w
∣
w
=
w
0
(6)
w^1 ← w^0 - \eta\frac{\partial{L}}{\partial{w}} |_{w=w^0}\tag{6}
w1←w0−η∂w∂L∣w=w0(6)最后会停下来。往往有两种情况会停下来。
- 达到最大更新次数:更新次数是最开始设定的
- 达到函数最小值:当微分算出来正好是 0,最小值分为两种,全局最小值和局部最小值
如下图所示,把 w 设定在最右侧红点附近这个地方可以让损失最小,称为全局最小值(global minima)。
但如果在梯度下降中,w0 是随机初始的位置,也很有可能走到 wT 这里,还没走到最右侧红点附近,训练就停住了,无法再移动 w 的位置。wT 这个地方称为局部最小值(local minima)。
局部最小值不是整个误差表面上面的最低点,所以有人会把它当作梯度下降法的缺点。但事实上局部最小值是一个假问题,在做梯度下降的时候,真正面对的难题不是局部最小值。
我们再回到创建的线性回归模型中,对两个 w,b 进行梯度下降,具体公式如下
∂
L
∂
w
∣
w
=
w
0
,
b
=
b
0
(7)
\frac{\partial{L}}{\partial{w}} |_{w=w^0, b=b^0}\tag{7}
∂w∂L∣w=w0,b=b0(7)
∂
L
∂
b
∣
w
=
w
0
,
b
=
b
0
(8)
\frac{\partial{L}}{\partial{b}} |_{w=w^0, b=b^0}\tag{8}
∂b∂L∣w=w0,b=b0(8)
w
1
←
w
0
−
η
∂
L
∂
w
∣
w
=
w
0
,
b
=
b
0
(9)
w^1 ← w^0 - \eta\frac{\partial{L}}{\partial{w}} |_{w=w^0, b=b^0}\tag{9}
w1←w0−η∂w∂L∣w=w0,b=b0(9)
b
1
←
b
0
−
η
∂
L
∂
w
∣
w
=
w
0
,
b
=
b
0
(10)
b^1 ← b^0 - \eta\frac{\partial{L}}{\partial{w}} |_{w=w^0, b=b^0}\tag{10}
b1←b0−η∂w∂L∣w=w0,b=b0(10)
模型预测
模型训练之后,可以用来预测未来的未知值,如图所示,红色代表的是真实值,蓝色代表的是预测值
参考资料:
[1] 李宏毅《深度学习详解》电子版:https://github.com/datawhalechina/leedl-tutorial
[2] 视频讲解:https://www.bilibili.com/video/BV1JA411c7VT?p=2&vd_source=3efd40f637f094c1da27b1a24b410e12