梯度下降法应用十分广泛,可以用于求解最小值问题。一个机器学习算法的目标就是要找到其损失函数最低点对应的参数,这时就用到了梯度下降法,该方法在之后要介绍的很多算法中要用到,所以单独写一篇文章来介绍。
1.概述
梯度下降法也成为最速下降法,是一种一阶最优化算法。
- 首先对所有的参数进行初始化;
- 然后不断更新参数的值,直到目标函数达到最小值。此时模型就被训练完成了。
Require: 学习率
α
\alpha
α和初始参数
Θ
\Theta
Θ repeat
θ
j
:
=
θ
j
?
α
?
?
J
(
Θ
)
?
θ
j
\theta _{j} := \theta _{j} - \alpha \cdot \frac{\partial J(\Theta )}{\partial \theta _{j}}
θj?:=θj??α??θj??J(Θ)? until 达到收敛条件
注意事项 参数同时更新 正确的计算方式:(假设只有两个参数)
t
e
m
p
0
:
=
θ
0
?
α
?
?
J
(
Θ
)
?
θ
0
temp_{0} := \theta _{0} - \alpha \cdot \frac{\partial J(\Theta )}{\partial \theta _{0}}
temp0?:=θ0??α??θ0??J(Θ)?
t
e
m
p
1
:
=
θ
1
?
α
?
?
J
(
Θ
)
?
θ
1
temp_{1} := \theta _{1} - \alpha \cdot \frac{\partial J(\Theta )}{\partial \theta _{1}}
temp1?:=θ1??α??θ1??J(Θ)?
θ
0
:
=
t
e
m
p
0
\theta _{0} := temp_{0}
θ0?:=temp0?
θ
1
:
=
t
e
m
p
1
\theta _{1} := temp_{1}
θ1?:=temp1? 错误的计算方式:(假设只有两个参数)
t
e
m
p
0
:
=
θ
0
?
α
?
?
J
(
Θ
)
?
θ
0
temp_{0} := \theta _{0} - \alpha \cdot \frac{\partial J(\Theta )}{\partial \theta _{0}}
temp0?:=θ0??α??θ0??J(Θ)?
θ
0
:
=
t
e
m
p
0
\theta _{0} := temp_{0}
θ0?:=temp0?
t
e
m
p
1
:
=
θ
1
?
α
?
?
J
(
Θ
)
?
θ
1
temp_{1} := \theta _{1} - \alpha \cdot \frac{\partial J(\Theta )}{\partial \theta _{1}}
temp1?:=θ1??α??θ1??J(Θ)? (此时由于
θ
0
\theta _{0}
θ0?已经更新,
t
e
m
p
1
temp_{1}
temp1?的值将受到影响)
θ
1
:
=
t
e
m
p
1
\theta _{1} := temp_{1}
θ1?:=temp1?
2.公式中各项的含义
收敛准则
不能证明梯度下降法是收敛的,并且没有明确定义的算法停止准则。
通常使用如下方法对是否收敛进行判断:
- 当梯度向量的欧几里得范数达到一个充分小的阈值时。
∥
?
Θ
∥
=
(
?
θ
0
)
2
+
(
?
θ
1
)
2
+
?
+
(
?
θ
n
)
2
\left \| \nabla\Theta \right \| = \sqrt{(\nabla\theta_{0})^{2}+(\nabla\theta_{1})^{2}+\cdots +(\nabla\theta_{n})^{2}}
∥?Θ∥=(?θ0?)2+(?θ1?)2+?+(?θn?)2
? - 当迭代的每一个回合的均方误差变化的绝对速率足够小时。
当目标函数是凸函数时,梯度下降法的解是全局最优解。一般情况下,其解不保证是全局最优解。其下降速度也不保证是最快的(不同特征之间特征值相差较大的情况下使用特征缩放,能够加快下降速度)。
导数项含义(作用)
导数为正:
θ
=
θ
?
α
?
\theta = \theta - \alpha \cdot
θ=θ?α? (positive number),
θ
\theta
θ变小,向代价减小的方向; 导数为负:
θ
=
θ
?
α
?
\theta = \theta - \alpha \cdot
θ=θ?α? (negtive number),
θ
\theta
θ变大,向代价减小的方向。 由此可见,导数项的作用是使参数向使得损失逐渐减小的方向更新。
学习率(learning rate)的作用
学习率
α
\alpha
α决定梯度下降的速度 上图引自知乎用户@马同学,图中的
η
\eta
η表示学习率。 由上图可知,学习率太小,导致梯度下降缓慢,而学习率太高,可能越过最低点,导致无法收敛甚至发散,因此,应该选取合适大小的学习率。可以尝试从一系列学习率中(…, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, …间隔约三倍)使用K折交叉验证的方式选取合适的学习率。 在迭代的过程中,应使梯度下降的速率逐渐缓慢,以免越过最低点,而在实际的操作中,不需要逐渐减小
α
\alpha
α值,因为导数值越来越小,梯度下降会自动变缓慢。
3.批量与小批量
- 批量梯度下降法(Gradient Descent, GD, Batch Gradient Descent):使用全部训练样本估计梯度进行训练。计算量大,一般不使用批量算法。
- 小批量梯度下降法(Mini Batch Gradient Descent, MBGD):使用部分训练样本估计梯度进行训练。实际操作中最常使用。
- 随机梯度下降法(Stochastic Gradient Descent, SGD):每次从固定训练集中抽取一个训练样本估计梯度进行训练。
4.总结
以上就是关于梯度下降算法的内容,其具体应用及实现将在以后的算法中展示。
|