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