梯度下降
梯度下降的思想
梯度下降就是用来求损失函数最小值的算法,我们将使用梯度下降算法来求出损失函数
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1)的最小值。
梯度下降思想:首先我们随机选择一个参数的组合
J
(
θ
0
,
θ
1
,
.
.
.
,
θ
n
)
J(\theta_0,\theta_1, ... ,\theta_n)
J(θ0,θ1,...,θn),计算损失函数(或代价函数),然后我们寻找下一个能让损失函数(或代价函数)下降最多的参数组合。重复上述过程,直至找到一个局部最小值。
注:选择不同的初始参数组合,可能会找到不同的局部最小值。
过程
批量梯度下降算法的公式为:
repeat until convergence{
θ
j
:
=
θ
j
−
a
∂
∂
θ
1
J
(
θ
0
,
θ
1
)
(
f
o
r
j
=
0
a
n
d
j
=
1
)
\theta_j:=\theta_j-a\frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1)\ (for\ j=0 \ and \ j=1)
θj:=θj−a∂θ1∂J(θ0,θ1) (for j=0 and j=1)
}
此处假设参数只有两个
θ
0
\theta_0
θ0和
θ
1
\theta_1
θ1。
α
\alpha
α表示学习率,
α
\alpha
α决定了每次能让代价函数下降程度最大方向迈下的步子有多大。
在梯度下降算法中需要同时更新
θ
0
\theta_0
θ0和
θ
1
\theta_1
θ1。
t
e
m
p
0
:
=
θ
0
−
α
∂
∂
θ
0
J
(
θ
0
,
θ
1
)
temp0 :=\theta_0-\alpha\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1)
temp0:=θ0−α∂θ0∂J(θ0,θ1)
t
e
m
p
1
:
=
θ
1
−
α
∂
∂
θ
1
J
(
θ
0
,
θ
1
)
temp1 :=\theta_1-\alpha\frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1)
temp1:=θ1−α∂θ1∂J(θ0,θ1)
θ
0
:
=
t
e
m
p
0
\theta_0 :=temp0
θ0:=temp0
θ
1
:
=
t
e
m
p
1
\theta_1 :=temp1
θ1:=temp1
几个问题
- 偏导数问题
对于只有一个变量的方程式来说,偏导数就是导数。在某一点的导数表示该点切线的斜率。
因此,当初始点在最小值点的右边, θ \theta θ的更新值不断减小;当初始点在最小值的左边, θ \theta θ的更新值不断增加。最终是要不断靠近最小值的点。 -
α
\alpha
α学习率的问题
α \alpha α太小,需要很多步才能找到局部最低点
α \alpha α太大,每一步迭代会因为步子太大而越过最低点,甚至导致无法收敛。 - 初始点为局部最小值点
如果初始点恰好为局部最小值点,此时的导数为0,也就是切线的斜率为0。所以,更新 θ \theta θ的值不会有变化。此时, θ \theta θ也就是我们需要的参数。 - 为什么不需要更新 α \alpha α的值
![](https://i-blog.csdnimg.cn/blog_migrate/9bf2e5dbaa1ae3a9388a6affe8d69624.jpeg)