最优化五:梯度法(梯度下降法、最优梯度法、共轭梯度法)

梯度下降法沿着负梯度方向逐步更新优化参数

最优梯度法利用梯度计算步长,减小在谷底的来回振动

共轭梯度法每次搜索方向与上次方向共轭,理论上K维变量经过k次迭代可找到最优解

1 梯度下降法

函数在某一点的梯度是,在该方向单位步长上升最快的向量。梯度下降法是利用待优化变量,沿着负梯度方向不断迭代寻找最优值。

直观理解:

                                                      

梯度下降法算法流程:

                   

(PPT画个图可真难)

梯度下降法证明:通过泰勒展开表达式证明沿着梯度下降最快。

对函数f(x)在初值x_0处进行一阶泰勒展开可以得到:

                                                                    f(x) \approx f(x_0) + (x-x_0)f{}'(x_0)                           (1-1)

由于是在x_0处泰勒展开,即在x_0附近近似程度才较高,因此x-x_0是微小向量,可以令:

                                                                                x-x_0 = \alpha v

\alpha是步长,v是单位向量,则有:((1-1)用约等于,后序采用等于号)

                                                                        f(x) = f(x_0) + \alpha vf{}'(x_0)

目的是找到新的x,使f(x) < f(x_0),即f(x) - f(x_0) < 0,令:

                                                                    f(x) - f(x_0) = \alpha vf{}'(x_0) < 0

得到目的转化为:

                                                                                \alpha vf{}'(x_0) < 0

\alpha是正标量忽略,得到:

                                                                                 vf{}'(x_0) < 0

由于向量v为单位向量,设\beta为v与f{}'(x_0)之间的夹角,由:

                                                                    vf{}'(x_0)=|v|\cdot |f{}'(x_0)|cos(\beta )

当且仅当v与f{}'(x_0)方向相反时,vf{}'(x_0)取得最小值,由f(x) - f(x_0) = \alpha vf{}'(x_0)可知,此时f(x)在此方向下降最快,即在梯度反方向下降最快。

2 最优梯度法

梯度法设置固定步长,可能出现的情况是在谷底左右来回波动难以收敛。最优梯度法根据梯度模长设置步长,在越接近最优点,步长越短。算法如下:

                     

相比梯度下降法,最优梯度法的核心在于利用梯度计算步长,步长计算公式推导如下:

最优化方程可以写成如下形式:

                                                      minf(x) = f(x_i + \alpha \theta _i) = f(x_{i+1})

f(x)x_i处进行二阶泰勒展开得到:

                                                f(x) = f(x_i) + \bigtriangledown ^Tf(x_i)\bigtriangleup x+\frac{1}{2}\bigtriangleup x^TA\bigtriangleup x

其中,A是f(x)的二阶偏导矩阵。用\alpha \theta _i替换\bigtriangleup x可以得到:

                                                f(x) = f(x_i) + \bigtriangledown ^Tf(x_i)(\alpha \theta _i)+\frac{1}{2}(\alpha \theta _i)^TA(\alpha \theta _i)

在极小值处有:

                                                             \frac{\partial f}{\partial \alpha} = \bigtriangledown^T f(x) \theta_i + \alpha _i \theta_i^TA\theta_i = 0

即可得到:

                                                                      \alpha _i =- \frac{\bigtriangledown^T f(x_i) \theta_i}{\theta_i^TA\theta_i}

 3 共轭梯度法

共轭梯度法对最优梯度法进行了修正,搜索方向为共轭方向,将负梯度方向旋转了一个角度,每次往最优方向需要在负梯度方向进行修正。算法如下:

                                            

共轭梯度法证明:

对于二次型优化问题:

                                                                   f(x) = \frac{1}{2}x^TQx + c^Tx + k                                 (3-1)

下一次的搜索方向需要与上一次搜索方向共轭,即:

                                                                            P_{i+1}QP_i = 0                                               (3-2)

计算梯度:

                                                      \bigtriangledown f(x_{i+1}) = Qx_{i+1} + k, \bigtriangledown f(x_{i}) = Qx_{i} + k                  (3-3)

两梯度相减可得:

                                                             \bigtriangledown f(x_{i+1}) - \bigtriangledown f(x_{i}) = Q(x_{i+1} - x_{i})                       (3-4)

由参数更新公式:

                                                                               x_{i+1} = x_i + \lambda_i P_i                                      (3-5)

代入(3-4)可得:

                                                                P_i = \frac{Q^{-1}(\bigtriangledown f(x_{i+1}) - \bigtriangledown f(x_{i}) )}{\lambda_i}                           (3-6)

将方向更新公式:

                                                                   P_{i+1} = -\bigtriangledown f(x_{i+1}) + \alpha_i P_i                               (3-7)

及(3-6)代入(3-2)可得:

                                  (-\bigtriangledown f(x_{i+1}) + \alpha_i P_i)\cdot Q\cdot \frac{Q^{-1}(\bigtriangledown f(x_{i+1}) - \bigtriangledown f(x_{i}) )}{\lambda_i}=0            (3-8)

因为P_i\bigtriangledown f(x_{i+1})正交,乘积为0。化简(3-8)可得:

                                     -\left \| \bigtriangledown f(x_{i+1}) \right \| ^2+ \bigtriangledown f(x_i)\bigtriangledown f(x_{i+1}) - \alpha_i\bigtriangledown P_i f(x_i) =0            (3-9)

P_{i} = -\bigtriangledown f(x_{i}) + \alpha_{i-1} P_{i-1}代入3-9得到:

                                                        \alpha _i =\frac{\left \| \bigtriangledown f(x_{i+1}) \right \| ^2-\bigtriangledown f(x_i)\bigtriangledown f(x_{i+1})}{\left \| \bigtriangledown f(x_{i}) \right \| ^2}                     (3-10)

可以近似成:

                                                                         \alpha _i =\frac{\left \| \bigtriangledown f(x_{i+1}) \right \| ^2}{\left \| \bigtriangledown f(x_{i}) \right \| ^2}                                        (3-11)

表格中步长计算采用了一维搜索法,当然也可以固定步长或者采用最优梯度法中的步长计算方法进行替换。

梯度下降法在不同的迭代轮数中会选择非常近似的方向,说明沿着这个方向的误差没有一次更新完成,优化过程呈锯齿状。共轭梯度法的思想是,选择一个优化方向后,本次选择的步长能够将这个方向的误差更新完,在以后的优化更新过程中不再需要朝这个方向更新了。由于每次将一个方向优化到了极小,后面的优化过程将不再影响之前优化方向上的极小值,所以理论上对N维问题求极小只用对N个方向都求出极小就行了。

共轭梯度法计算流程如下图:

                               

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章