文章目录
摘要
本文详细补充了Gradient descent的底层数学理论,阐明了Bias和Variance怎样对Error产生影响以及如何优化,通过引入验证集来解决模型如何选择问题,并且补充了在实操Gradient descent时会遇到的一些细节问题及其解决办法。
1 模型的结果与正确值之间误差的来源
- bias(截距)
- variance(方差)
上图中的每一个蓝点,都是进行一次完整的Regression后得到的
f
∗
f^*
f∗,因为每次Regression时都会收集不同的Training Data,所以每次的
f
∗
f^*
f∗一定不同。
图中的 f ^ \hat{f} f^代表真正的正确的程式,位于靶心。
1.1 Bias的规律
一、定义: E [ f ∗ ] = f ˉ E[f^*] = \bar{f} E[f∗]=fˉ,求出每次的 f ∗ f^* f∗的期望,记作 f ˉ \bar{f} fˉ,Bias描述 f ˉ \bar{f} fˉ与 f ^ \hat{f} f^的接近程度
Bias只关注 f ˉ \bar{f} fˉ与 f ^ \hat{f} f^之间的差距
二、规律
Model越复杂,Bias越小
如上图,展示了一次式与五次式Bias的靶子图,可以看出Model越复杂,
f
ˉ
\bar{f}
fˉ平均出来与
f
^
\hat{f}
f^越接近。
图中黑色曲线代表 f ^ \hat{f} f^、红色曲线代表5000次Regression后的 f ∗ f^* f∗、蓝色曲线代表5000个 f ∗ f^* f∗的平均 f ˉ \bar{f} fˉ
1.2 Variance的规律
Model越复杂,Variance越大
原因:越简单的Model,受Training Data的影响越小。
可以想象,如果将每次的Model定为最简单的常数C,那么Variance=0
1.3 两者对Error的影响
图中横坐标代表Model的最高次幂,Variance随次数的升高增长非常快,所以造成过拟合。而error来自bias很大,则称为Underfitting
2 通过减小Bias&Variance来优化
2.1 判断当前结果是Bias大还是Variance大
如果 f ∗ f^* f∗不能准确描述Training Data上的点,也就是对于Training Data都有很大误差,那么就是Bias大的Underfitting
如果 f ∗ f^* f∗在Training Data上得到小的error,但是在Testing Data上得到一个大的error,那么可能是Variance大的Overfitting
2.2 Bias大的优化方法
重构Model(考虑更多的feature;使Model更复杂…)
现在的Function set中根本就不包含 f ^ \hat{f} f^
2.3 Variance大的优化方法
- 收集更多的Data【generalization泛化】
- Regularization【这招可能影响Bias,通过加入一项使曲线变平滑,那么
f
^
\hat{f}
f^有可能被剔除,所以要调整
λ
\lambda
λ,找一个平衡使两者都小】
3 Model Selection
3.1 反面教材
注意:我们手里的Testing Set与真正使用中的Testing Set之间有一定的Bias,因为我们其实不知道
f
^
\hat{f}
f^
在我们手上Testing Set上得到的“最佳Model”不一定是最佳的那个
3.2 正确解法
我们手上的Data分配比例应该为Training Set:Validation Set:Testing Set = 3 : 1 : 1
正确步骤是将Training Set(总)按比例分成Training Set和Validation Set。在Training Set上完成训练的Model用Validation Set选择,假设Validation Set上Model3表现最佳,那么再用全部的Training Set(总)数据训练Model3。这样得到的Model在Testing Set上表现会差很多,但是不要再回头改参数,这个差的结果才是真实的。
还可以做N-fold Cross Validation:按相同比例分Training Set(总),分别将不同的部分做Validation,余下部分做Train,多次重复实验,求各个Model多次结果的平均Error,来选择最佳Model
总之,少去根据Testing set上的结果去调Model,真实上线后的结果反而比较好。
4 Gradient Descent
梯度是一个矢量,是图中的红色箭头,指向上升/下降最快的方向。移动则带入公式,为图中的蓝色箭头所示的大小与方向。
4.1 Learning Rate - η \eta η
learning rate的大小影响Gradient descent能否顺利走到Loss(
θ
\theta
θ),
θ
\theta
θ为参数的最低点。正确的做法是画出随着参数的更新,Loss的变化,观察前几次更新时,图像是否是稳定的下降
adaptive learning rate(自适应)一般的规律是越来越小,例如 η t = η / t + 1 \eta^t=\eta/\sqrt{t+1} ηt=η/t+1
最好每个参数都给它不同的learning rate-Adagrad:每一个参数的learning rate都把它除上之前算出来的微分值的root mean square
w
t
+
1
=
w
t
−
η
t
σ
t
g
t
w^{t+1}=w^t-\dfrac{\eta^t}{\sigma^t}g^t
wt+1=wt−σtηtgt,其中
g
t
=
∂
L
(
θ
t
)
∂
w
g^t=\dfrac{\partial L(\theta^t)}{\partial w}
gt=∂w∂L(θt)
而
σ
t
\sigma^t
σt就是 root mean square(RMS): 一组统计数据的平方的平均值的平方根
总结 Adagrad:
w
t
+
1
=
w
t
−
η
∑
i
=
0
t
(
g
i
)
2
g
t
w^{t+1}=w^t-\dfrac{\eta}{\sqrt{\textstyle\sum_{i=0}^t(g^i)^2}}g^t
wt+1=wt−∑i=0t(gi)2ηgt
更强的方法Adam
4.2 Stochastic Gradient Descent
L
n
=
[
y
^
n
−
(
b
+
∑
w
i
x
i
n
)
]
2
L^n=[{\hat{y}^n-(b + \sum w_ix_i^n)}]^2
Ln=[y^n−(b+∑wixin)]2即定义Loss function时只取一个点
x
n
x^n
xn,不求和了
θ
i
=
θ
i
−
1
−
η
⋅
∇
L
n
(
θ
i
−
1
)
\theta^i=\theta^{i-1}-\eta\sdot\nabla L^n(\theta^{i-1})
θi=θi−1−η⋅∇Ln(θi−1)
4.3 Feature Scaling
上图直观展示何为Feature Scaling
而做Feature Scaling的好处是
- 对Learning rate要求不再那么高,否则需要adaptive learning rate
- gradient descent效率高
Feature Scaling的具体做法就是将其标准化
现有r个example,每一个example都有一组feature,上标代表object,下标代表component
- 对于每个dimension i(坐标轴方向),都算它的期望,记为 m i m_i mi;都算它的标准差,记为 σ i \sigma_i σi
- 对第 r 个example的第 i 个component做 x i r = x i r − m i σ i x_i^r=\dfrac{x_i^r-m_i}{\sigma_i} xir=σixir−mi
对每一个example这样处理后,所有dimension的期望会变0、标准差会变1
5 The Theory of Gradient Descent
首先,不是每次更新参数,Loss的值都一定会下降
下面解释一下:
以微元的方法,先随机找到初始点,记作
θ
0
\theta^0
θ0,现以
θ
0
\theta^0
θ0【坐标
(
a
,
b
)
(a,b)
(a,b)】为圆心有一个极其小的圆,半径为d【极小】
L
(
θ
)
≈
s
+
u
⋅
(
θ
1
−
a
)
+
v
⋅
(
θ
2
−
b
)
L(\theta)\approx s + u\sdot(\theta_1-a) + v\sdot(\theta_2-b)
L(θ)≈s+u⋅(θ1−a)+v⋅(θ2−b),【运用Taylor展开公式】,其中
s
=
L
(
a
,
b
)
;
u
=
∂
L
(
a
,
b
)
∂
θ
1
;
v
=
∂
L
(
a
,
b
)
∂
θ
2
s=L(a,b); u=\dfrac{\partial L(a,b)}{\partial \theta_1}; v=\dfrac{\partial L(a,b)}{\partial \theta_2}
s=L(a,b);u=∂θ1∂L(a,b);v=∂θ2∂L(a,b).
在
(
θ
1
−
a
)
2
+
(
θ
2
−
b
)
2
⩽
d
2
(\theta_1-a)^2+(\theta_2-b)^2\leqslant d^2
(θ1−a)2+(θ2−b)2⩽d2范围内,求
θ
1
\theta_1
θ1和
θ
2
\theta_2
θ2使
L
(
θ
)
L(\theta)
L(θ)最小
如上图,考虑
u
⋅
(
θ
1
−
a
)
+
v
⋅
(
θ
2
−
b
)
u\sdot(\theta_1-a) + v\sdot(\theta_2-b)
u⋅(θ1−a)+v⋅(θ2−b)时,就是在考虑两个向量的内积何时最小?当蓝色向量与黑色反向,并且长度达到半径d时最小。因此,learning rate起到了调节长度的作用。
再将u,v带入向量中,于是便得到了Gradient descent的程式。
推导的前提是 L ( θ ) ≈ s + u ⋅ ( θ 1 − a ) + v ⋅ ( θ 2 − b ) L(\theta)\approx s + u\sdot(\theta_1-a) + v\sdot(\theta_2-b) L(θ)≈s+u⋅(θ1−a)+v⋅(θ2−b)成立,那就要求 d 足够小【Taylor】,而learning rate与 d 成正比,所以learning rate的取值很关键,只有足够小时,Loss才能逐渐变小。
6 总结与展望
文章通过一些图形展示,对比了使用各种方法后的优化效果;并且通过一些数学推导,尝试解释Gradient descent的理论。
接下来将会详细介绍SGD、RMSprop、Adam等Gradient descent相关算法、并进行实操。