「小杜」不有趣的机器学习实践鹿-1
初衷
作为一个不好好学习的瓜皮,怎么可能舍得动脑动手推公式,所以我才觉得我对机器学习的很多概念都是表面功夫,银样蜡枪头,在做毕业设计的时候发现:基础不牢,做啥花里胡哨都是闲的
那就花亿点时间开始实践手推公式吧。从头学起,头疼~
![]()
吃苦是不可能不吃苦的,但是可以把笔记做的有趣一点。
——鲁迅
Tags: 机器学习
文章目录
🏸什么是机器学习
人类宝宝在第一次看到一台自行车的时候,不用父母告诉什么样是自行车,他自己就能记下它的特征;这个小宝宝第二次看到自行车的时候,他们能从经验中学习,最终意识到:“咦!是自行车!要啥自行车儿?”
那么一台计算机,可以让它也拥有从经验中“学习”的能力吗。没错,这个就是机器学习的概念。
目前我们的发展还没有达到《黑客帝国》里“天网”那样的等级,基本还算是“弱人工智能”,某些情况比人类幼崽还弱(比如说少样本学习),但某些情况下它也能解决很多单凭人类难以解决的问题。就像斯坦福机器学习课程描绘的:
- 把电子医疗记录变成医学知识,更好的理解疾病
- 计算生物学,分析大量基因数据序列,DNA序列,更好的了解人类基因组
- 在机械应用中的无人驾驶等等
这也是我觉得它确实很有趣(如果不用手推公式的话)也在未来很有作为的一个方面。
![癌症预测例子](https://i-blog.csdnimg.cn/blog_migrate/6cca95712fbb1787274ae438b8e9adf0.png)
最后简单归纳一下:
- 人工智能(Artificial Intelligence)——“星辰大海”,是要达到的目标
- 机器学习(Machine Learning)——“航空火箭”,是一个可靠的工具
(但不局限于实现人工智能)
- 深度学习(Deep Learning)——“长征5号”,是目前工具中较强大的一个类型
(专注于模仿大脑的结构和学习的过程)
![]()
也有这样的分类:
![]()
🎠怎样看懂机器学习术语
我们可以先记住一个高中学过的函数:y=f(x),把这个函数作为类比
术语 | 解释 |
---|---|
标签 | 就是 y y y, y y y可以是任何事物 |
特征 | 就是 x x x,特征可以有多个, x 1 x_1 x1, x 2 x_2 x2, x 3 x_3 x3··· |
样本 | 就是用于训练的一组 ( x , y ) (x,y) (x,y),也可以是 ( x , ? ) (x,?) (x,?),即无监督学习 |
模型 | 就是x和y的关系: f ( x ) f(x) f(x) |
回归模型 | 预测y的连续值,输入 x x x, y y y会是0到1之间的一个值 |
分类模型 | 预测y的分类,输入 x x x, y y y会是0和1中的一个类,如0是得病,1是不得病 |
机器学习就像是我们给人类幼崽看自行车的图片一样
需要给机器一些样本来训练,然后让机器学习到样本的特征,最后进行预测
好了,接下来是FBI警告,难度飙升~
🏑单变量线性回归 & 训练和损失
线性回归(Linear Regression)
对于一个宝宝而言,脑海里常常有一些问题:
- 怎么去分辨一堆玩具中好玩的玩具和不好玩的玩具?(分类)
- 已知爸爸妈妈每天的出门次数,怎样知道他们明天的出门次数(回归)
在现实生活中,这两类问题更加复杂头秃:
怎么从病历信息中分辨一个人的乳腺肿瘤是良性还是恶性的?
(分类)已经知道当前气象事件的历史数据,怎样预测未来的天气情况?
(回归)
对于宝宝的简单问题来说,出门次数与天数很可能是一个线性关系。
y
=
a
x
+
b
y = ax +b
y=ax+b
其中:
- y y y 指的是父母每天出门的次数,即预测标签(理想输出值)
- x x x 指的是天数,即输入的特征的值(图中记录了0-35天)
- a a a 指的是直线斜率,即权重
- b b b 指的是直线的截距,即偏差
训练与损失(Train & Lost)
训练
训练就是通过已知的标签样本 ( x , y ) (x,y) (x,y),来确定所有权重(也就是 a a a)和偏差(也就是 b b b)的理想值。
训练的目的就是通过训练样本来获得一个模型,这个模型可以最大限度减少犯错,这个过程叫做==经验风险最小化==。(对于宝宝来说思路就是犯错越少,自然就会越来越正确)
损失
损失是对糟糕预测的惩罚(也就是犯错)。也就是说:
- 模型预测的越好,损失越低;
- 预测的越糟糕,损失越大;
- 完全预测正确损失则为0;
平方损失
我们有没有数学方法(损失函数Cost Function)来衡量损失呢,拿出高中知识可以知道,可以用预测值
y
‘
y`
y‘减去实际值
y
y
y的平方来计算损失
L
2
=
(
y
‘
−
y
)
2
L_2 = (y` - y)^2
L2=(y‘−y)2
也可写成下面这样
L
2
=
(
p
r
e
d
i
c
t
i
o
n
(
x
)
−
y
)
2
L_2 = (prediction(x) - y)^2
L2=(prediction(x)−y)2
这种损失叫做平方损失(也叫L2损失),衡量了单个
x
x
x预测值的损失
均方误差(MSE)
均方误差指的是每个样本的平均平方损失,就是计算出每个
x
x
x的平方损失,再除以样本数量
N
N
N
M
S
E
=
1
N
∑
(
p
r
e
d
i
c
t
i
o
n
(
x
)
−
y
)
2
MSE = \frac{1}{N} \sum (prediction(x)-y)^2
MSE=N1∑(prediction(x)−y)2
🚕 怎样降低损失
关于宝宝的问题,我们只有一个特征(天数)作为输入,这种回归叫做单变量线性回归(Linear Regression with One Variable)
实际情况中,输入的特征不止一个,会遇到更高维度,更多参数的情况,例如气象事件的历史数据,包括 x 1 平 均 气 温 x_1平均气温 x1平均气温、 x 2 湿 度 x_2湿度 x2湿度、 x 3 降 水 量 x_3降水量 x3降水量等等;
梯度下降(Gradient Descent)
我们的目的是让损失降到最低,可以得知,损失最低的情况是模型完美的拟合了实际情况的所有点,此时损失为0。
对于宝宝的问题,我们的模型是
y
=
a
x
+
b
y = ax +b
y=ax+b
换一种写法
y
=
θ
1
x
+
θ
2
y = \theta_1x + \theta_2
y=θ1x+θ2
损失函数也换一种写法(因为损失函数不止MSE一种)
J
(
θ
1
,
θ
2
)
J(\theta_1,\theta_2)
J(θ1,θ2)
用
θ
1
,
θ
2
,
J
(
θ
1
,
θ
2
)
\theta_1,\theta_2,J(\theta_1,\theta_2)
θ1,θ2,J(θ1,θ2)三个变量做一个等高线图:
![image-20210317104141946](https://i-blog.csdnimg.cn/blog_migrate/5dcb81b05d8d42a97001416bfa3b1a1b.png)
可以看出存在一个全局最优解(global minimum)(有的模型中也存在局部最优解(local minimum))
梯度
那么什么是梯度呢,定义是“函数的梯度是偏导数相对于所有自变量的矢量”
例如:
给定一个多变量函数:
f
(
x
,
y
)
=
3
x
+
4
y
f(x,y) = 3x+4y
f(x,y)=3x+4y
取
f
f
f相对于
x
x
x的常规导数,把
y
y
y当做常数
f
(
x
)
‘
=
3
f(x)` = 3
f(x)‘=3
同理,求
y
y
y的偏导数
f
(
y
)
‘
=
4
f(y)` = 4
f(y)‘=4
那么这个多变量函数的梯度就是
∇
f
(
3
,
4
)
=
(
3
,
4
)
\nabla f(3,4)=(3,4)
∇f(3,4)=(3,4)
梯度是一个矢量,具有方向、大小,指向函数下降(或者增长)速度最快的方向。
给定一个更加复杂的多变量函数:
f
(
x
,
y
)
=
4
+
(
x
−
2
)
2
+
2
y
2
f(x,y) = 4+(x-2)^2+2y^2
f(x,y)=4+(x−2)2+2y2
那么这个函数的梯度就是
∇
f
(
x
,
y
)
=
(
2
x
−
4
,
4
y
)
\nabla f(x,y) = (2x-4,4y)
∇f(x,y)=(2x−4,4y)
随着
x
,
y
x,y
x,y的不断变化,梯度也在不断变化。梯度不断下降的过程,就是我们不断逼近最优解的过程。
梯度下降与损失函数相结合
那么我们如何将梯度下降与损失函数,还有训练联系到一起呢,下式就是一个很好地例子
R
e
p
e
a
t
{
θ
0
=
θ
0
−
α
∂
∂
θ
0
j
(
θ
0
,
θ
1
)
θ
1
=
θ
1
−
α
∂
∂
θ
1
j
(
θ
0
,
θ
1
)
}
}
\begin{aligned} Repeat\{ \\ \theta_0 &=\theta_0 - \alpha \frac{\partial}{\partial \theta_0} j(\theta_0, \theta_1) \\ \theta_1 &=\theta_1 - \alpha \frac{\partial}{\partial \theta_1} j(\theta_0, \theta_1) \} \\ \} \end{aligned}
Repeat{θ0θ1}=θ0−α∂θ0∂j(θ0,θ1)=θ1−α∂θ1∂j(θ0,θ1)}
其中:
-
== r e p e a t repeat repeat==的意思就是重复训练很多轮次
-
== α \alpha α==代表学习率,表示训练的步长
-
学习率 α \alpha α过小,达到收敛所需的迭代次数会非常高,就会花费很长的时间
-
学习率 α \alpha α过大,就会导致训练的下一轮(Batch)在最优点随意弹跳,有可能越过局部最小值无法收敛
-
我们的目的是找到一个足够找到一个足够高的学习速率,该速率要能够使梯度下降过程高效收敛,但又不会高到使该过程永远无法收敛。
-
-
== ∂ ∂ θ 0 j ( θ 0 , θ 1 ) \frac{\partial}{\partial \theta_0} j(\theta_0, \theta_1) ∂θ0∂j(θ0,θ1)==表示 θ 0 \theta_0 θ0的偏导数,表示梯度,即为损失函数中增长最为迅猛的方向
-
== j ( θ 0 , θ 1 ) j(\theta_0, \theta_1) j(θ0,θ1)==即为损失函数
📒 线性代数回顾
矩阵乘法
回忆起曾经学过的矩阵乘法,
m
×
n
m \times n
m×n的矩阵与
n
×
o
n \times o
n×o的矩阵相乘,会变成
m
×
o
m \times o
m×o的矩阵,如式1所示
[
1
2
3
4
5
6
]
∗
[
1
2
]
=
[
1
∗
1
+
2
∗
2
1
∗
3
+
2
∗
4
1
∗
5
+
2
∗
6
]
=
[
5
11
17
]
\left[ \begin{matrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{matrix} \right] * \left[ \begin{matrix} 1 \\ 2 \end{matrix} \right] = \left[ \begin{matrix} 1*1 + 2*2 \\ 1*3 + 2*4 \\ 1*5 + 2*6 \end{matrix} \right] = \left[ \begin{matrix} 5 \\ 11 \\ 17 \end{matrix} \right]
⎣⎡135246⎦⎤∗[12]=⎣⎡1∗1+2∗21∗3+2∗41∗5+2∗6⎦⎤=⎣⎡51117⎦⎤
- 矩阵乘法不满足交换律 A × B ≠ B × A A\times B\neq B\times A A×B=B×A
- 矩阵乘法满足结合律 ( A × B ) × C = A × ( B × C ) (A\times B)\times C = A\times (B \times C) (A×B)×C=A×(B×C)
- 单位矩阵 I I I(有时也写作 E E E)相当于1,有 A × I = A A \times I = A A×I=A
逆、转置
矩阵的逆就是说,当
A
×
B
=
E
A \times B = E
A×B=E时,
B
B
B矩阵就是
A
A
A矩阵的逆矩阵,记作:
A
−
1
=
B
A^{-1} = B
A−1=B
矩阵的转置就是说:
∣
a
b
c
d
e
f
∣
T
=
∣
a
c
e
b
d
f
∣
\left|\begin{array}{ll} a & b \\ c & d \\ e & f \end{array}\right|^{T}=\left|\begin{array}{lll} a & c & e \\ b & d & f \end{array}\right|
∣∣∣∣∣∣acebdf∣∣∣∣∣∣T=∣∣∣∣abcdef∣∣∣∣
矩阵的转置的基本性质如下:
(
A
±
B
)
T
=
A
T
±
B
T
(
A
×
B
)
T
=
B
T
×
A
T
(
A
T
)
T
=
A
(
K
A
)
T
=
K
A
T
\begin{array}{l} (A \pm B)^{T}=A^{T} \pm B^{T} \\ (A \times B)^{T}=B^{T} \times A^{T} \\ \left(A^{T}\right)^{T}=A \\ (K A)^{T}=K A^{T} \end{array}
(A±B)T=AT±BT(A×B)T=BT×AT(AT)T=A(KA)T=KAT
与梯度下降异曲同工的正规方程(Normal Equation)
既然梯度下降的最终目的是通过不断迭代,将
∂
∂
θ
0
j
(
θ
0
,
θ
1
)
\frac{\partial}{\partial \theta_0} j(\theta_0, \theta_1)
∂θ0∂j(θ0,θ1)降到最低,得到一个最终的
θ
\theta
θ值,那么是不是可以直接计算等式
∂
∂
θ
0
j
(
θ
0
,
θ
1
)
=
0
\frac{\partial}{\partial \theta_0} j(\theta_0, \theta_1) = 0
∂θ0∂j(θ0,θ1)=0
求解出最终的
θ
\theta
θ呢,这种方法就叫做正规方程,正规方程的解为
θ
=
(
X
T
X
)
−
1
X
T
y
\theta=\left(X^{T} X\right)^{-1} X^{T} y
θ=(XTX)−1XTy
正规方程也是有局限性的,下表是关于梯度下降与正规方程的比较:
梯度下降 | 正规方程 |
---|---|
需要学习率 α \alpha α | 不需要 |
需要多次迭代 | 一次运算得出 |
当特征数量较大时也能较好使用 | 特征数量大的话运算代价很大 |
适用于各种类型的模型 | 只适用于线性模型,不适合于逻辑回归等其他模型 |