机器学习基础
任务:
- 回归:求预测
- 分类:做选择
组成
step1. 参数+模型+特征+权重+偏执
step2.定义损失函数
eg:MAE(平均绝对误差)MSE(均方误差)cross entropy(交叉熵)
可以使用误差表面图(error surface)来表示
step3. 解最优化问题
最常见的 方法有梯度下降(gradient descent)
优化形象来说就是从山顶找山底,在这个寻找的过程中,引入了两个问题:
1. 梯度大小:梯度(斜率)大小决定寻找步子的大小
2. 学习率(learning rate)大小:学习率大小决定参数更新快慢,影像寻找步子大小。
ps:在机器学习中,需要手动设置参数的被称为超参数
所有的目的:寻找谷底,寻找全局最小值or局部最小值
线性模型
定义:把输入的特征 x x x乘上一个权重 w w w,再加上一个偏置 b b b,这样的模型称为线性模型(linear model)
分段线性曲线
线性模型的问题:过于简单,输入和输出之间可能有更复杂的关系。线性模型中,输入
x
x
x和输出
y
y
y之间的关系就是一条直线,成正比或成反比。而某些情况下,输入和输出并不总是成正比或总是成反比,简单的线性模型就无法模拟真实情况。
分段线性曲线(piecewise linear curve) = 常数项 + 线性折线
分段曲线可以逼近任何连续曲线(类比微分法)
sigmoid函数:
y
=
c
1
1
+
e
−
(
b
+
w
x
1
)
y=c\frac1{1+e^{-(b+wx_1)}}
y=c1+e−(b+wx1)1
Hard_sigmoid函数:
h
a
r
d
s
i
g
m
o
i
d
(
x
)
=
{
0
x
<
a
w
x
+
b
a
<
=
x
<
=
b
c
x
>
2.5
hard_sigmoid(x)=\left\{\begin{array}{ll}0&x<a\\wx+b&a<=x<=b\\c&x>2.5\end{array}\right.
hardsigmoid(x)=⎩
⎨
⎧0wx+bcx<aa<=x<=bx>2.5
使用sigmoid函数可以逼近hard_sigmoid函数
sigmoid不同的参数可以制造不同的sigmoid函数.
此外,我们可以不止用一个特征,而是用多个特征带入不同的参数中,组合不同的,更有灵活性的函数
eg:
r
1
=
b
1
+
w
11
x
1
+
w
12
x
2
+
w
13
x
3
r
2
=
b
2
+
w
21
x
1
+
w
22
x
2
+
w
23
x
3
r
3
=
b
3
+
w
31
x
1
+
w
32
x
2
+
w
33
x
3
r_{1}=b_1+w_{11}x_1+w_{12}x_2+w_{13}x_3\\r_{2}=b_2+w_{21}x_1+w_{22}x_2+w_{23}x_3\\r_{3}=b_3+w_{31}x_1+w_{32}x_2+w_{33}x_3
r1=b1+w11x1+w12x2+w13x3r2=b2+w21x1+w22x2+w23x3r3=b3+w31x1+w32x2+w33x3
上式中,
w
i
j
w_{ij}
wij代表在第
i
i
i个sigmoid里面乘以第
j
j
j个特征的权重,
i
i
i就是现在考虑的是第
i
i
i个Sigmoid函数
用矩阵跟向量相乘的方法(矩阵可以使用GPU运算,更加快速),上式可以改为:
[
r
1
r
2
r
3
]
=
[
b
1
b
2
b
3
]
+
[
w
11
w
12
w
13
w
21
w
22
w
23
w
31
w
32
w
33
]
[
x
1
x
2
x
3
]
\left[\begin{array}{c}r_1\\r_2\\r_3\end{array}\right]=\left[\begin{array}{c}b_1\\b_2\\b_3\end{array}\right]+\left[\begin{array}{ccc}w_{11}&w_{12}&w_{13}\\w_{21}&w_{22}&w_{23}\\w_{31}&w_{32}&w_{33}\end{array}\right]\left[\begin{array}{c}x_1\\x_2\\x_3\end{array}\right]
r1r2r3
=
b1b2b3
+
w11w21w31w12w22w32w13w23w33
x1x2x3
改为线性函数来表示:
r
=
b
+
W
x
r=b+Wx
r=b+Wx
下一步要定义损失,使用 θ \theta θ来统一所有的未知参数,损失函数就变成了 L ( θ ) L(\theta) L(θ)。先给定 θ \theta θ所有的值,再带入特征 x x x,得到预测的 y y y,计算和真实标签Group Truth之间的误差。再将所有的误差相加得到损失。
- 初始化一个 θ 0 \theta_0 θ0
- 计算 θ \theta θ对 L L L的微分(计算梯度位置) g = ∇ L ( θ 0 ) \boldsymbol{g}=\nabla L\left(\boldsymbol{\theta}_0\right) g=∇L(θ0),即
g
=
[
∂
L
∂
θ
1
∣
θ
=
θ
0
∂
L
∂
θ
2
∣
θ
=
θ
0
⋮
]
g=\left[\begin{array}{c}\frac{\partial L}{\partial\theta_1}\bigg|_{\boldsymbol{\theta}=\boldsymbol{\theta}_0}\\\frac{\partial L}{\partial\theta_2}\bigg|_{\boldsymbol{\theta}=\boldsymbol{\theta}_0}\\\vdots\end{array}\right]
g=
∂θ1∂L
θ=θ0∂θ2∂L
θ=θ0⋮
Point:实际使用梯度下降时,会把N个数据随机分成一组一组的批量(batch),原先整个做一次梯度下降,现在一个batch里面拿出来计算一个损失,比起整体数据梯度下降可以进行多次更新。把所有的批量都计算一遍叫一个回合(epoch),每一次更新参数叫做一次更新。
eg:1000个数据,N= 1000,batch size 设为10,即B=10。1000个**样本(example)**形成1000(N)/10(B)=100个批量,一个回合离更新了100次
模型变形
Hard Sigmoid可以看做两个修正线性单元(Rectified Linear Unit,ReLu)的综合。
Sigmoid或ReLUctant被称为激活函数,提供非线性模块
神经网络(neural network)
input →神经网络(输入层→隐藏层→输出层)→output