UA MATH575B 数值分析下I 梯度下降
UA MATH575B 數(shù)值分析下I 梯度下降
- 梯度下降
- 最速下降
- 下降算法實現(xiàn)舉例
- 梯度下降的應(yīng)用
對于凸優(yōu)化問題min?xf(x)\min_x f(x)minx?f(x),最主流的數(shù)值計算方法是下降算法(Descent Method)。下降算法遞推方程的一般形式是
xk+1=xk?αkSk?f(xk)x_{k+1} = x_{k} - \alpha_k S_k \nabla f(x_k) xk+1?=xk??αk?Sk??f(xk?)
其中αk\alpha_kαk?是常數(shù),SkS_kSk?是正定矩陣(或半正定)。因為
?f(xk)T(xk+1?xk)=?αk?f(xk)TSk?f(xk)<0(or≤0)\nabla f(x_k)^T(x_{k+1}-x_k) = -\alpha_k \nabla f(x_k)^T S_k \nabla f(x_k) <0(or \le 0) ?f(xk?)T(xk+1??xk?)=?αk??f(xk?)TSk??f(xk?)<0(or≤0)
所以每一次迭代后函數(shù)值會下降,因而叫下降算法。如果SkS_kSk?是單位陣,對應(yīng)的下降算法又叫梯度下降;如果SkS_kSk?等于Hessian的逆,對應(yīng)的下降算法又叫Newton法。本講介紹梯度下降,下一講介紹牛頓法。
梯度下降
梯度下降的遞推方程是
xk+1=xk?αk?f(xk)x_{k+1} = x_{k} - \alpha_k \nabla f(x_k) xk+1?=xk??αk??f(xk?)
給定初始值和停止準則根據(jù)遞推方程進行迭代就可以了,唯一需要注意的是??f(xk)-\nabla f(x_k)??f(xk?)給出的是第一次下降的方向,αk\alpha_kαk?給出每一次下降的步長,下降方向的確定最好是能算出梯度的解析式然后根據(jù)解析式計算,下降的步長可以用Line search來確定。具體有兩種操作,第一種是exact line search:
αk=arg?min?tf(xk?t?f(xk))\alpha_k = \argmin_t f(x_k - t\nabla f(x_k)) αk?=targmin?f(xk??t?f(xk?))
第二種是backtracking line search:選定一個不算小的ttt作為初始值,判斷
f(xk?t?f(xk))<f(xk)?αt?f(xk)??f(xk)f(x_k - t\nabla f(x_k)) < f(x_k) - \alpha t \nabla f(x_k) \cdot \nabla f(x_k) f(xk??t?f(xk?))<f(xk?)?αt?f(xk?)??f(xk?)
是否成立,如果成立接受現(xiàn)在的ttt值,如果不成立則減小ttt的值,再做判斷,重復(fù)這個操作直到上式成立,然后把ttt的值給αk\alpha_kαk?。其中α\alphaα是一個松弛參數(shù),選擇小一點的α\alphaα可以在下降方向比較合適的時候讓下降的步長更大一點。
最速下降
最速下降和梯度下降類似,但選擇下降方向與步長的時候考慮的是最小化函數(shù)值的更新值:
Δxk=arg?min?∣∣Δxk∣∣=1?f(xk)Δxk\Delta x_k = \argmin_{||\Delta x_k||=1} \nabla f(x_k) \Delta x_k Δxk?=∣∣Δxk?∣∣=1argmin??f(xk?)Δxk?
因為
f(xk+1)≈f(xk)+?f(xk)Δxkf(x_{k+1}) \approx f(x_k) + \nabla f(x_k) \Delta x_k f(xk+1?)≈f(xk?)+?f(xk?)Δxk?
所以根據(jù)最小化函數(shù)值的更新值選擇的步長和方向可以讓函數(shù)值下降得最快,因此這個方法叫最速下降。最速下降的范數(shù)可以選擇權(quán)重范數(shù),可以選擇L2L_2L2?范數(shù)等。假設(shè)權(quán)重為www,權(quán)重范數(shù)指的是
∣∣Δxk∣∣w=∣∣Δxk⊙w∣∣L2||\Delta x_k||_w = ||\Delta x_k \odot w||_{L_2} ∣∣Δxk?∣∣w?=∣∣Δxk?⊙w∣∣L2??
在這個范數(shù)下做最速下降等價于在In⊙wI_n \odot wIn?⊙w仿射坐標下做梯度下降。
下降算法實現(xiàn)舉例
梯度下降的應(yīng)用
給定初始值(?50,40)(-50,40)(?50,40),最小化函數(shù)
H2(x,y)=50g(y2?x2)+(x?10)2+y2H_2(x,y) = 50\sqrt{g(y^2-x^2)} + (x-10)^2 + y^2 H2?(x,y)=50g(y2?x2)?+(x?10)2+y2
其中g(x)=x+x2+1g(x) = x+ \sqrt{x^2 + 1}g(x)=x+x2+1?。這個函數(shù)的等值曲線可以先畫一下
紅色的x形的點是下降的路徑,計算的時候存下來貼在等值線上可以看出下降的規(guī)律。從圖中可以看出梯度下降是沿著西北方向那條山谷下降的,基本符合直覺。下面的函數(shù)用來做梯度下降:
這個函數(shù)有幾點需要注意,首先是初值
F = 6000;這個值盡量比下降軌跡上的函數(shù)值都大一點,不然在line search的時候會死循環(huán)。
dt = .005;這個就是做backtracking line search的時候給定的步長的初始值,這個值與停止準則、梯度的大小等有一定聯(lián)動性;如果梯度都比較大,停止準則又比較嚴格,較大的步長初始值會導(dǎo)致在做line search的時候會死循環(huán)。所以調(diào)參的時候一般是調(diào)這個初始步長和停止準則保證函數(shù)能給出返回值,然后再繼續(xù)調(diào)參收斂到更好的最小值。
abs(F-F_old)>1e-10這個是停止準則,梯度比較大時一般用不那么嚴格的停止準則。
if F > F_oldx = x_old;F = F_old;F_old = F_old + 1; % or abs(F-F_old)=0, loop will be closeddt = .5*dt;end這一步是line search,放棄使用了松弛參數(shù),但在前面定義了
dt = 1.1*dt;這能使下降方向調(diào)整不大的時候逐漸放大下降的步長,起到類似松弛的作用。
總結(jié)
以上是生活随笔為你收集整理的UA MATH575B 数值分析下I 梯度下降的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UA MATH571B 试验设计II 简
- 下一篇: UA MATH571B 试验设计III