凸优化问题有一个重要的特性:所有的局部最优解一定是全局最优解。
但实际中的问题往往不是凸的,或者说其梯度很难求解,所以我们想要得到精确的解很难。工程上一般用迭代法求近似解。它的思想是,从一个初始点开始,反复使用某种规则移动到下一个点,构造这样一个数列,直至收敛到梯度为0的点处。即有下列极限成立。
lim
k
→
+
∞
∇
f
(
x
k
)
=
0
\mathop {\lim }\limits_{k \to + \infty } \nabla f\left( {{x_k}} \right) = 0
k→+∞lim∇f(xk)=0
迭代法中核心是利用一阶或者二阶导数信息,得到由上一个点确定一个点的迭代公式:
x
k
+
1
=
h
(
x
k
)
{x_{k + 1}} = h\left( {{x_k}} \right)
xk+1=h(xk)
由于在最小化算法的设计中,要求迭代过程中目标函数是下降的,也就是:
f
(
x
k
+
1
)
<
f
(
x
k
)
f\left( {{x_{k + 1}}} \right) < f\left( {{x_k}} \right)
f(xk+1)<f(xk)
又因为目标函数在
x
k
+
1
{{x_{k + 1}}}
xk+1的一阶泰勒展开为:
f
(
x
k
+
1
)
≈
f
(
x
k
)
+
(
∇
f
(
x
k
)
)
T
Δ
x
k
f\left( {{x_{k + 1}}} \right) \approx f\left( {{x_k}} \right) + {\left( {\nabla f\left( {{x_k}} \right)} \right)^T}\Delta {x_k}
f(xk+1)≈f(xk)+(∇f(xk))TΔxk
可以知道,当
(
∇
f
(
x
k
)
)
T
Δ
x
k
<
0
{\left( {\nabla f\left( {{x_k}} \right)} \right)^T}\Delta {x_k}<0
(∇f(xk))TΔxk<0的时候,有
f
(
x
k
+
1
)
<
f
(
x
k
)
f\left( {{x_{k + 1}}} \right) < f\left( {{x_k}} \right)
f(xk+1)<f(xk)
所以称使得
(
∇
f
(
x
k
)
)
T
Δ
x
k
<
0
{\left( {\nabla f\left( {{x_k}} \right)} \right)^T}\Delta {x_k}<0
(∇f(xk))TΔxk<0的搜索方向
Δ
x
k
\Delta {x_k}
Δxk叫做目标函数在第k次迭代时的下降方向。
又两个向量相乘等于模长乘以cosθ。
(
∇
f
(
x
k
)
)
T
Δ
x
k
=
∥
∇
f
(
x
k
)
∥
∙
∥
Δ
x
k
∥
cos
θ
{\left( {\nabla f\left( {{x_k}} \right)} \right)^T}\Delta {x_k} = \left\| {\nabla f\left( {{x_k}} \right)} \right\| \bullet \left\| {\Delta {x_k}} \right\|\cos \theta
(∇f(xk))TΔxk=∥∇f(xk)∥∙∥Δxk∥cosθ
这里,cosθ=[-1,1],只有当cos<0时,上式才会小于0。特别的,当θ=
π
\pi
π时,有极小值。此时,
f
(
x
+
Δ
x
)
f(x + \Delta x)
f(x+Δx)沿着x的梯度方向下降最快。下降值为:
∥
∇
f
(
x
k
)
∥
∙
∥
Δ
x
k
∥
\left\| {\nabla f\left( {{x_k}} \right)} \right\| \bullet \left\| {\Delta {x_k}} \right\|
∥∇f(xk)∥∙∥Δxk∥。
设
α
\alpha
α为一个接近于0的数,称为步长,有,
Δ
x
=
−
α
∇
f
(
x
)
\Delta x = - \alpha \nabla f(x)
Δx=−α∇f(x)
所以有,
f
(
x
−
α
∇
f
(
x
)
)
<
∼
f
(
x
)
f\left( {x - \alpha \nabla f(x)} \right)\mathop < \limits_ \sim f(x)
f(x−α∇f(x))∼<f(x)
这就意味着,我们如果用
x
←
x
−
α
∇
f
(
x
)
x \leftarrow x - \alpha \nabla f(x)
x←x−α∇f(x)来迭代x,目标函数f(x)的值可能降低。所以在梯度下降中,我们先选取一个初始值x和常数α>0,然后通过上式不断来迭代x,直到达到停止条件。