赞
踩
梯度下降法应用十分广泛,可以用于求解最小值问题。一个机器学习算法的目标就是要找到其损失函数最低点对应的参数,这时就用到了梯度下降法,该方法在之后要介绍的很多算法中要用到,所以单独写一篇文章来介绍。
梯度下降法也成为最速下降法,是一种一阶最优化算法。
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
不能证明梯度下降法是收敛的,并且没有明确定义的算法停止准则。
通常使用如下方法对是否收敛进行判断:
当目标函数是凸函数时,梯度下降法的解是全局最优解。一般情况下,其解不保证是全局最优解。其下降速度也不保证是最快的(不同特征之间特征值相差较大的情况下使用特征缩放,能够加快下降速度)。
导数为正:
θ
=
θ
−
α
⋅
\theta = \theta - \alpha \cdot
θ=θ−α⋅ (positive number),
θ
\theta
θ变小,向代价减小的方向;
导数为负:
θ
=
θ
−
α
⋅
\theta = \theta - \alpha \cdot
θ=θ−α⋅ (negtive number),
θ
\theta
θ变大,向代价减小的方向。
由此可见,导数项的作用是使参数向使得损失逐渐减小的方向更新。
学习率
α
\alpha
α决定梯度下降的速度
上图引自知乎用户@马同学,图中的
η
\eta
η表示学习率。
由上图可知,学习率太小,导致梯度下降缓慢,而学习率太高,可能越过最低点,导致无法收敛甚至发散,因此,应该选取合适大小的学习率。可以尝试从一系列学习率中(…, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, …间隔约三倍)选取合适的学习率。
在迭代的过程中,应使梯度下降的速率逐渐缓慢,以免越过最低点,而在实际的操作中,不需要逐渐减小
α
\alpha
α值,因为导数值越来越小,梯度下降会自动变缓慢。
以上就是关于梯度下降算法的内容,其具体应用及实现将在以后的算法中展示。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。