李宏毅2020机器学习
1. 简介
机器学习就是自动找函式
机器学习:
- 语音识别,f(一段声音)=“How are you”
- 图片识别,f(一张图片)=“Cat”
- 下围棋,f(一张围棋图片)=“5-5”
- 对话系统,f(“How are you?”)=“I am fine.”
你想找什么样的函式?机器怎么找出你想要的函式?即 Gradient Descent;函式的Loss,机器会自动找出Loss最低的函式
- Regression —- 回归,输出一个数值
- Classification —- 二分类,input->f->Yes or No
- RNN —- 二分类,input -> f -> 正面 or 负面
- CNN —- Multi-class Classification,多分类,input->f->Class 1, Class 2, … Class N
- Seq2seq —- Generation,生成
- GAN
- Unsupervised Learning —- 非监督学习,例如 Auto-encoder
- Anomaly Detection —- 训练机器知道“我不知道”
- Transfer Learning(Domain Adversarial Learning) —- 处理不同的输入数据
- Explainable AI —- 可解释
- Adversarial Attack —- 攻击AI
- Network Compression —- 网络简化
- Meta Learning —- Learn to learn,让机器学习如何学习
- Life-long Learning —- 终身学习
- Reinforcement Learning —- 强化学习
2. 规定
2.1. 环境
建议linux或macOS
python 3.6.8
pyenv
2.2. Kaggle
机器学习平台
3. Regression
回归:PM2.5预测、股票预测、自动驾驶、推荐系统
3.1. Model
a set of function
y
=
b
+
w
⋅
x
y = b + w \cdot x
y
=
b
+
w
⋅
x
,
w
w
w
:weight,
b
b
b
:bias 可以是任意值,因此 y 为一组函式
3.2. 准备训练数据 Training Data,定义损失函数Loss
Loss: input – a function,output – how bad it is
L
(
f
)
=
L
(
w
,
b
)
=
∑
n
=
1
10
(
y
^
n
−
(
b
+
w
⋅
x
c
p
n
)
)
2
L(f) = L(w, b) = \sum _{n=1}^{10} (\hat{y}^n – (b + w \cdot x_{cp}^n))^2
L
(
f
)
=
L
(
w
,
b
)
=
n
=
1
∑
1
0
(
y
^
n
−
(
b
+
w
⋅
x
c
p
n
)
)
2
3.3. Gradient Descent
线性回归基础版本
线性回归动态学习率adagrad版本
动态学习率能提高学习速度
局部最小值:线性回归中不用担心局部最小值,因为 loss function L is convex (凸函数)
3.4. Overfitting 过拟合
从最简单的线性方程开始,然后用二次方程,三次方程演示过拟合
模拟过拟合
3.5. Regularization 正则化
y
=
b
+
∑
w
i
x
i
L
=
∑
n
(
y
^
n
−
(
b
+
∑
w
i
x
i
)
)
2
+
λ
∑
(
w
i
)
2
y=b+\sum w_i x_i \\ L = \sum _n (\hat{y}^n – (b+\sum w_i x_i))^2 + \lambda \sum (w_i)^2
y
=
b
+
∑
w
i
x
i
L
=
n
∑
(
y
^
n
−
(
b
+
∑
w
i
x
i
)
)
2
+
λ
∑
(
w
i
)
2
The function with smaller
w
i
w_i
w
i
are better. 参数越接近0,方程越平滑
为什么平滑的方程比较好?平滑方程受噪声的影响比较小
λ
\lambda
λ
的值需要调整,才能获得较好的模型
注意:正则化并没有将3.4中的过拟合纠正过来,暂时不知道原因
4. 误差从哪来?
Bias(偏差)、Error(误差)、Variance(方差)
5. 梯度下降法
通过画出Loss的曲线,来判断如何调整学习率,通常情况下,lr随迭代次数逐渐变小
lr不应该one-size-fits-all,每个参数应该有自己的lr
调整学习率:自适应学习率—adagrad
W
t
+
1
←
W
t
−
η
t
δ
t
g
t
=
W
t
−
η
∑
i
=
0
t
(
g
i
)
2
g
t
η
t
=
η
t
+
1
δ
t
=
1
t
+
1
∑
i
=
0
t
(
g
i
)
2
W^{t+1} \leftarrow W^{t} – \frac{\eta^t}{\delta^t} g^t = W^t – \frac{\eta}{\sqrt{\sum_{i=0}^t(g^i)^2}}g^t \\ \eta^t = \frac{\eta}{\sqrt{t+1}} \\ \delta^t = \sqrt{\frac{1}{t+1} \sum_{i=0}^t(g^i)^2}
W
t
+
1
←
W
t
−
δ
t
η
t
g
t
=
W
t
−
∑
i
=
0
t
(
g
i
)
2
η
g
t
η
t
=
t
+
1
η
δ
t
=
t
+
1
1
i
=
0
∑
t
(
g
i
)
2
adagrad后面学习非常慢,可以使用 adam
Stochastic Gradient Descent: 随机梯度下降法,仅随机选取一个样本,来计算梯度值
Feature Scaling: 特征缩放,让不同的特征有相同的比例;多个特征分布的区间非常不同时,建议进行特征缩放。特征缩放的方法很多,常见的有:
x
i
r
←
x
i
r
−
m
i
δ
i
x_i^r \leftarrow \frac{x_i^r – m_i}{\delta_i}
x
i
r
←
δ
i
x
i
r
−
m
i
r 表示第几个样本, i 表示第几个维度 : 均值表示为
m
i
m_i
m
i
,标准差表示为
δ
i
\delta _i
δ
i
标准化处理后,所有维度均值为0,方差为1
泰勒级数:
h
(
x
)
=
∑
k
=
0
∞
h
(
k
)
(
x
0
)
k
!
(
x
−
x
0
)
k
h(x) = \sum_{k=0}^\infty \frac{h^{(k)}(x_0)}{k!} (x-x_0)^k
h
(
x
)
=
k
=
0
∑
∞
k
!
h
(
k
)
(
x
0
)
(
x
−
x
0
)
k
当
x
x
x
很接近
x
0
x_0
x
0
时:
h
(
x
)
≈
h
(
x
0
)
+
h
′
(
x
0
)
(
x
−
x
0
)
h(x) \approx h(x_0) + h^{‘}(x_0)(x-x_0)
h
(
x
)
≈
h
(
x
0
)
+
h
′
(
x
0
)
(
x
−
x
0
)
泰勒级数可以扩展到多参数
梯度下降法的限制:局部最小值、鞍点的微分值都为0
8. 深度学习优化
一些数学符号:
-
θt
\theta _t
θ
t
: t 时刻的模型参数 -
gt
g_t
g
t
:
θt
\theta _t
θ
t
的梯度 -
mt
+
1
m_{t+1}
m
t
+
1
: 动量
优化内容:找一个参数
θ
\theta
θ
, 对于所有样本,使得Loss最小
On-line vs Off-line: 看到一个样本还是所有样本
优化器(Optimizers):
SGD(1847年): Start at position
θ
0
\theta ^0
θ
0
, Compute gradient at
θ
0
\theta ^0
θ
0
, Move to
θ
1
=
θ
0
−
η
∇
L
(
θ
0
)
\theta ^1 = \theta ^0 – \eta \nabla L(\theta ^0)
θ
1
=
θ
0
−
η
∇
L
(
θ
0
)
, Compute gradient at
θ
1
\theta ^1
θ
1
, Move to
θ
2
=
θ
1
−
η
∇
L
(
θ
1
)
\theta ^2 = \theta ^1 – \eta \nabla L(\theta ^1)
θ
2
=
θ
1
−
η
∇
L
(
θ
1
)
… Stop until
∇
L
(
θ
t
)
≈
0
\nabla L(\theta ^t) \approx 0
∇
L
(
θ
t
)
≈
0
SGD with Momentum(SGDM)(1986年): Start at point
θ
0
\theta ^0
θ
0
, Movement
v
0
=
0
v^0=0
v
0
=
0
; Compute gradient at
θ
0
\theta ^0
θ
0
, Movement
v
1
=
λ
v
0
−
η
∇
L
(
θ
0
)
v^1 = \lambda v^0 – \eta \nabla L(\theta^0)
v
1
=
λ
v
0
−
η
∇
L
(
θ
0
)
, Move to
θ
1
=
θ
0
+
v
1
\theta ^1=\theta ^0 + v^1
θ
1
=
θ
0
+
v
1
; Compute gradient at
θ
1
\theta ^1
θ
1
, Movement
v
2
=
λ
v
1
−
η
∇
L
(
θ
1
)
v^2 = \lambda v^1 – \eta \nabla L(\theta^1)
v
2
=
λ
v
1
−
η
∇
L
(
θ
1
)
, Move to
θ
2
=
θ
1
+
v
2
\theta ^2=\theta ^1 + v^2
θ
2
=
θ
1
+
v
2
; Movement not just based on gradient, but previous movement.
(下面三个优化器采用动态学习率)
Adagrad(2011年):
θ
t
=
θ
t
−
1
−
η
∑
i
=
0
t
−
1
(
g
i
)
2
g
t
−
1
\theta_t = \theta_{t-1} – \frac{\eta}{\sqrt{\sum_{i=0}^{t-1}(g_i)^2}}g_{t-1}
θ
t
=
θ
t
−
1
−
∑
i
=
0
t
−
1
(
g
i
)
2
η
g
t
−
1
RMSProp(2013年):
θ
t
=
θ
t
−
1
−
η
v
t
g
t
−
1
\theta_t = \theta_{t-1} – \frac{\eta}{\sqrt{v_t}}g_{t-1}
θ
t
=
θ
t
−
1
−
v
t
η
g
t
−
1
,
v
1
=
(
g
0
)
2
v_1=(g_0)^2
v
1
=
(
g
0
)
2
,
v
t
=
a
v
t
−
1
+
(
1
−
a
)
(
g
t
−
1
)
2
v_t=a v_{t-1} + (1-a)(g_{t-1})^2
v
t
=
a
v
t
−
1
+
(
1
−
a
)
(
g
t
−
1
)
2
; 此方法与 Adagrad 仅分母不同
Adam(2015年): SGDM 变形 + RMSProp—- SGDM[
θ
t
=
θ
t
−
1
−
η
m
t
;
m
t
=
β
1
m
t
−
1
+
(
1
−
β
1
)
g
t
−
1
\theta_t=\theta_{t-1}-\eta m_t;m_t=\beta_1 m_{t-1} + (1-\beta _1)g_{t-1}
θ
t
=
θ
t
−
1
−
η
m
t
;
m
t
=
β
1
m
t
−
1
+
(
1
−
β
1
)
g
t
−
1
] + RMSProp[
θ
t
=
θ
t
−
1
−
η
v
t
g
t
−
1
\theta_t = \theta_{t-1} – \frac{\eta}{\sqrt{v_t}}g_{t-1}
θ
t
=
θ
t
−
1
−
v
t
η
g
t
−
1
,
v
1
=
(
g
0
)
2
v_1=(g_0)^2
v
1
=
(
g
0
)
2
,
v
t
=
β
2
v
t
−
1
+
(
1
−
β
2
)
(
g
t
−
1
)
2
v_t=\beta_2 v_{t-1} + (1-\beta_2)(g_{t-1})^2
v
t
=
β
2
v
t
−
1
+
(
1
−
β
2
)
(
g
t
−
1
)
2
] = Adam[
θ
t
=
θ
t
−
1
−
η
v
^
t
+
ε
m
^
t
\theta_t = \theta_{t-1} – \frac{\eta}{\sqrt{\hat{v}_t} + \varepsilon} \hat{m}_t
θ
t
=
θ
t
−
1
−
v
^
t
+
ε
η
m
^
t
;
m
^
t
=
m
t
1
−
β
1
t
\hat{m}_t=\frac{m_t}{1-\beta_1 ^t}
m
^
t
=
1
−
β
1
t
m
t
,
v
^
t
=
v
t
1
−
β
2
t
\hat{v}_t=\frac{v_t}{1-\beta_2 ^t}
v
^
t
=
1
−
β
2
t
v
t
,
β
1
=
0.9
,
β
2
=
0.999
,
ε
=
1
0
−
8
\beta_1 = 0.9, \beta_2=0.999, \varepsilon=10^{-8}
β
1
=
0
.
9
,
β
2
=
0
.
9
9
9
,
ε
=
1
0
−
8
]
真实应用中,大部分模型使用的优化器是 SGDM(稳定) 或 Adam(训练快)
L2 regularization:
L
l
2
(
θ
)
=
L
(
θ
)
+
γ
∣
∣
θ
∣
∣
2
L_{l_2}(\theta) = L(\theta) + \gamma ||\theta||^2
L
l
2
(
θ
)
=
L
(
θ
)
+
γ
∣
∣
θ
∣
∣
2
Shuffling
Dropout
Gradient noise
建议:
SGDM: Computer vision(image classification、segmentation、object detection)
Adam: NLP(QA、machine translation、summary)、Speech synthesis、GAN、Reinforcement learning