漆黑的冷空中有你,
惺忪的眼睛中有你,
心底的記憶中有你,
你留在我的腦海中,
一直這麼揮之不去。
無論哪時哪刻,
心中都想着你的笑,
想着你到我側相擁,
I can dream about you.
——暢寶寶的傻逼哥哥
在早期的最優化中,對於兩變量函數來說,用最速下降法得出的解軌跡表徵出zig-zag模式。對於某些性質較好的函數,相鄰的解差不多組成兩條線,他們在最小值的鄰域內相交,如圖1所示,因此比較明顯的策略是連接初始點與第二個解,沿着這個方向執行最速下降法。對於凸二次函數,在
n 次迭代內就能收斂,這個方法也被稱爲parallel tangent法或着partan法,這是因爲在二次函數的情況下,所得輪廓的正切屬性。
圖1
Partan算法如圖2所示,假設初始點爲
x0 ,並利用兩次最速下降法得到點
x1,y1 ,然後沿着
y1−x1 方向進行線搜索得到點
x2 ,這就完成了第一次迭代。對於第二次迭代,對點
x2 執行最速下降得到點
y2 ,沿着
y2−x1 方向得到點
x3 ,一直重複此過程。從效果上看,圖2中的點
y1,y2,… 是通過最速下降法得到的而
x2,x3,… 是沿着方向
y2−x1,y3−x2,… 方向用線搜索得到的。
圖2
對於凸二次問題,連接
x1,x2,…,xk 的線組成一個共軛梯度方向集,可以通過以下方法來證明:先假設
d0,d1,…,dk−1 是共軛梯度方向集,然後說明
dk 是
d0,d1,…,dk−1 的共軛梯度方向。
考慮圖3所示的步驟,注意到
gTkdi=0for 0≤i<k(1)
根據之前共軛梯度的結論可知點xk−1 處的梯度可以寫成
gk−1=∑i=0k−1aidi
其中ai,i=0,1,…,k−1 爲常數,所以
gTkgk−1=gTk(b+Hxk−1)=∑i=0k−1aigTkdi=0(2)
或者
gTkb=−gTkHxk−1(3)
因爲yk 是點xk 用最速下降法得到的,所以我們有
yk−xk=−gk
另外
−g(yk)Tgk=gTk(b+Hyk)=0
或者
gTkb=−gTkHyk(4)
因此,根據等式3與4可得
gTkH(yk−xk−1)=0(5)
圖3
因爲
yk−xk−1=β(xk−1−xk−1)
其中β 是常數,等式5可以寫成
gTkH(xk+1−xk−1)=0
或者
gTkHxk+1=gTkHxk−1(6)
接下來我們能夠寫成
gTkHxk+1=gTkHxk−1(7)
那麼根據
gTkgk+1=gTk(b+Hxk+1)(8)
以及等式2,等式6與等式9可得
gTkgk+1=gTk(b+Hxk−1)=gTkgk−1=0(9)
點xk+1 是在xk+1−yk 方向上使用線搜索得到的,因此
gTk+1(xk+1−yk)=0(10)
從圖3可以看出
xk+1=xk+dk(11)
且
yk=xk−αgk(12)
其中α 是最小化f(xk−αgk) 的α 值,因此等式9,10與11得到
gTk+1(dk+αkgk)=0
或者
gTk+1dk+αkgTkgk+1=0(13)
接下來根據等式8與12可得
gTk+1dk=0
再結合等式1與13可得
gTk+1di=0for 0≤i<k+1