說明:今天10.24,祝程序員們節日快樂,嗚啦啦啦
愛上一個人後,
發現自己變得主動了,
感覺什麼都值得去做。
我想大聲宣布,
我對你依依不舍,
我想牽着你的手不放開,
我想簡簡單單愛。
我的肩膀任你依靠,
我的胸口任你錘錘,
永遠單純沒有悲哀,
像這樣一直走下去。
——暢寶寶的傻逼哥哥
在多維算法中,大部分計算量都用在執行線搜索時函數與梯度的運算上,因此所需要的運算量主要依賴於所用線搜索的效率與精度。如果需要高精度的線搜索,那麼計算量就比較大。如果非精確線搜索不影響算法的收斂,那麼我們可能減少計算量。
實際發現許多優化算法可以容忍不精確的線搜索,正由於此,對於這些方法我們使用非精確線搜索。
假設
xk+1=xk+αdk
其中dk 是給定的方向向量且α 是無關的搜索參數,存在某個正值α ,使得函數f(xk+1) 有唯一的極小值,泰勒級數的線形近似爲
f(xk+1)=f(xk)+gTkdkα
其中
gTkdk=df(xk+αdk)dα|α=0
上面等式表示圖1中的直線A ,等式
f(xk+1)=f(xk)+ρgTkdkα
表示直線B ,其中0≤ρ≤12 ,其斜率從0到12gTkdk ,依賴於ρ 的值。另外等式
f(xk+1)=f(xk)+(1−ρ)gTkdkα
表示直線C ,其斜率從gTkdk 到12gTkdk ,C,B 之間的夾角θ 爲
θ=tan−1[−(1−2ρ)gTkdk1+ρ(1−ρ)(gTkdk)2]
如圖2所示。顯然當ρ 從0到12 時,θ 從−gTkdk 到0,當固定ρ 爲範圍內的某個值時,兩條直線與曲線f(xk+1) 相交可以得出兩個α 值,α1,α2 ,如圖2所示。
圖1
令
α0 是最小化
f(xk+αdk) 得到的
α 估計值,對於
α=α0 ,如果
f(xk+1) 等於或小於直線
B 相應的
f(xk+1) 值,並且等於或大於直線
C 相應的
f(xk+1) 值,即
f(xk+1)≤f(xk)+ρgTkdkα0f(xk+1)≥f(xk)+(1−ρ)gTkdkα0
那麼我們可以判定α0 爲α∗ 的一個估計值,這時候α1≤α0≤α2 ,如圖2所示,α1,α2 組成了包含最小值α0 的區間,上面的兩個不等式稱爲Goldstein條件,他們是非精確線搜索的基礎。該方法基於可利用的信息生成估計值α0 ,並檢查Goldstein條件,如果都滿足,那麼接受f(xk+1) 的減少並終止該過程。另一方面,如果任何一個條件不滿足,那麼f(xk+1) 的減少是不充分的,我們需要進一步改善α∗ 的估計值,用αˇ0 表示。假設第一個不等式不滿足,那麼α0>α2 如圖3所示,因爲αL<α∗<α0 ,所以新的αˇ0 可以用內插來確定。另一方面,如果第二個不等式不滿足,那麼α0<α1 如圖4所示,因爲α0 在αL<α0<α∗ 之間,所以α0ˇ 可以用外插來確定。
如果f(xk+αdk) 在α=αL,α=α0 處的函數值以及導數值均已知的話,那麼對於α0>α2 ,α0ˇ 的一個好估計用內插公式
αˇ0=αL+(α0−αL)2f′L2[fL−f0+(α0−αL)f′L]
得出,對於α0>α2 用外插公式
α0ˇ=α0+(α0−αL)f′0(f′L−f′0)
確定,其中
fLf0=f(xk+αLdk),f′L=f′(xk+αLdk)=g(xk+αLdk)Tdk=f(xk+α0dk),f′0=f′(xk+α0dk)=g(xk+α0dk)Tdk
圖2
重複上面的過程直到產生的
αˇ0 滿足
α1<αˇ0<α2 ,那麼終止非精確線搜索。
圖3
圖4