最速下降法(梯度下降)
-
定义问题:
对于一个非线性函数 f ( x ) f(\textbf{x}) f(x),目标求: min f ( x ) ,    x ∈ R n \min f(\boldsymbol{x}) , \; \mathbf{x}\in\mathbb{R}^n minf(x),x∈Rn -
数学理论:
-
我们需要找到一个下降的方向,使得 f ( x ) f(\mathbf{x}) f(x)随着x的迭代而逐渐减小,直到 x \mathbf{x} x收敛于 x ∗ \mathbf{x^*} x∗:
f ( x k + 1 ) < f ( ( x k ) f(\mathbf{x_{k+1}})<f((\mathbf{x_k}) f(xk+1)<f((xk)
我们需要选择适当的方向 d \mathbf{d} d和 步长 α \alpha α , f ( x k + α d ) < f ( ( x k ) f(\mathbf{x_{k}+\alpha\mathbf{d}})<f((\mathbf{x_k}) f(xk+αd)<f((xk)
-
将 f ( x ) f(x) f(x)在进行一阶泰勒展开: f ( x + α d ) = f ( x ) + α ▽ f ( x ) T d , ▽ f ( x ) f(\boldsymbol{x}+\alpha\mathbf{d}) = f(\mathbf{x})+\alpha\triangledown f(\mathbf{x})^T\mathbf{d},\triangledown f(\mathbf{x}) f(x+αd)=f(x)+α▽f(x)Td,▽f(x)是 f ( x ) f(x) f(x)的梯度, ▽ f ( x ) T \triangledown f(\mathbf{x})^T ▽f(x)T可以用 J J J雅克比代替:
f ( x + α d ) = f ( x ) + α J d f(\boldsymbol{x}+\alpha\mathbf{d}) = f(\mathbf{x})+\alpha \mathbf{J} \mathbf{d} f(x+αd)=f(x)+αJd -
因为 α > 0 \alpha>0 α>0,所以 J d < 0 \mathbf{J} \mathbf{d}<0 Jd<0,有: J d = ∥ J ∥ ∥ d ∥ cos θ \mathbf{J} \mathbf{d}= \parallel \mathbf{J}\parallel \parallel \mathbf{d}\parallel \cos\theta Jd=∥J∥∥d∥cosθ
当 θ \theta θ取 − π -\pi −π也就是d取负梯度的方向: − J T -\mathbf{J}^T −JT,到达最小值。 -
对于 α \alpha α,我们在最速下降的方向进行-维的搜索,即 α \alpha α满足 f ( x k + α k d k ) = arg min α ⩾ 0 f ( x k + α d k ) f(\boldsymbol{x_k}+\alpha_k\mathbf{d_k}) = \arg \min_{\alpha\geqslant 0}f(\boldsymbol{x_k}+\alpha\mathbf{d_k}) f(xk+αkdk)=argα⩾0minf(xk+αdk)
- 算法:
- 给定初始点 x 0 \mathbf{x_0} x0,和允许的误差 ε > 0 \varepsilon>0 ε>0,置 k = 0 k=0 k=0;
- 计算搜索方向 d k = − ▽ f ( x k ) \mathbf{d_k}=- \triangledown f(\mathbf{x_k}) dk=−▽f(xk) ;
- 若 ∥ d k ∥ ⩽ ε \parallel\mathbf{d_k}\parallel\leqslant\varepsilon ∥dk∥⩽ε,则停止;否则从 x k \boldsymbol{x_k} xk出发,沿着 d k \mathbf{d_k} dk进行一维的搜索,求出 α k \alpha_k αk使得: f ( x k + α k d k ) = arg min α ⩾ 0 f ( x k + α d k ) f(\boldsymbol{x_k}+\alpha_k\mathbf{d_k}) = \arg \min_{\alpha\geqslant 0}f(\boldsymbol{x_k}+\alpha\mathbf{d_k}) f(xk+αkdk)=argα⩾0minf(xk+αdk)
- 令 x k + 1 = x k + α k d k \mathbf{x_{k+1}}=\mathbf{x_k}+\alpha_k\mathbf{d_k} xk+1=xk+αkdk,置 k = k + 1 k=k+1 k=k+1,转步骤2;
- 算法评价:
缺点:
- 因为每次迭代的梯度方向和下一次的梯度方向是正交的,当到了最优值的附近,震动收敛慢。
- 另外,如果 f ( x ) f(x) f(x)的海森矩阵正定,最大和最小特征值的比 r = A a r=\frac{A}{a} r=aA称为条件数,条件数越小,收敛越快,相反则慢。
Trick:
- 一般最大特征值和最小特征值和数据维度里面的数据Scale有关,也就是说可能是因为数据的量级差的比较多,这时候可以通过Scale进行数据的缩放,来达到收敛更快的效果。
例题:参考最优化理论和算法p283,例10.1.1
牛顿法->阻尼牛顿->修正阻尼牛顿
-
定义问题:
对于一个非线性函数 f ( x ) f(\textbf{x}) f(x),目标求: min f ( x ) ,    x ∈ R n \min f(\boldsymbol{x}) , \; \mathbf{x}\in\mathbb{R}^n minf(x),x∈Rn -
数学理论:
-
将 f ( x ) f(\textbf{x}) f(x)进行二阶泰勒展开:
(1) f ( x + Δ x ) = f ( x ) + J Δ x + 1 2 Δ x T H Δ x f(\boldsymbol{x}+\Delta \mathbf{x}) = f(\mathbf{x})+J\Delta\mathbf{x}+\frac{1}{2}\Delta \mathbf{x}^TH\Delta \mathbf{x}\tag{1} f(x+Δx)=f(x)+JΔx+21ΔxTHΔx(1)
在 x k \mathbf{x_k} xk处,求 Δ x k = arg min Δ x f ( x k + Δ x ) \Delta\mathbf{x_k}=\arg \min_{\Delta\mathbf{x}} f(\mathbf{x_k}+\Delta\mathbf{x}) Δxk=argΔxminf(xk+Δx) -
让二次的1式对 Δ x \Delta\mathbf{x} Δx求导,并令其为0,得到稳定点:
(2) J T + H Δ x = 0 J^T+H\Delta \mathbf{x}=0\tag{2} JT+HΔx=0(2)
得到 Δ x k = − H − 1 J T \Delta\mathbf{x_k}=-H^{-1}J^T Δxk=−H−1JT
注意,在局部最优解的附近, x + Δ x \boldsymbol{x}+\Delta \mathbf{x} x+Δx是最优解,但是当初始点远离极小点的时候,牛顿法可能不收敛,原因之一牛顿方向: Δ x k = − H − 1 J T \Delta\mathbf{x_k}=-H^{-1}J^T Δxk=−H−1JT不一定是下降的方向,目标值有可能上升。因此对牛顿法提出了修正,提出阻尼牛顿法
- 阻尼牛顿法在原始的牛顿法的基础上添加:沿着牛顿方向进行一维的搜索