數值最佳化(Numerical Optimization)(2)-信賴域法
信賴域子問題與 Fidelity
信賴域法的思想很好理解:就是利用一個好解的
區域性模型
來近似當前迭代點附近 (附近就是一個區域
) 的函式情況
。
信賴域子問題的定義:假設
且
為目標函式,在區域
內目標函式的近似函式為
,則置信域子問題的目的是尋找
也就是說信賴域子問題求的是近似函式在信賴域內取最小時對應的自變數取值
。通常近似函式可以用二次函式來表示(注意這是關於
的函式)
其中
為模型 Hessian,這裡並沒有要求它是正定的。
近似函式
在點
的 Fidelity 定義為:(可以理解為兩個函式斜率的比值,用來衡量近似函式的可信程度)
我們需要根據近似函式
對目標函式
的近似程度的好壞來調整信賴域的大小:令
如果
且
是用於函式下降,函式
能夠很好地近似
,此時我們能夠增大置信域;(可以理解為
和近似函式的斜率(導數)相近,所以
能夠較好近似
)
如果
且
是用於函式下降,函式
不能有效近似
,此時應該收縮置信域;(可以理解為函式的導數偏差大,近似效果肯定不好了)
其他情況下不需要對信賴域做出調整。
假設
是函式
的下降方向,令
如果
則方向
並不能使得函式
具有一定的下降量,
如果
則方向
能夠使得函式
有較大的下降,
Fidelity 演算法
信賴域調整演算法
輸入:閾值
(通常取
),信賴域
判斷:
如果
(可以理解為擴大信賴域,但又不能超過最大信賴域的約束)
如果
則
(可以理解為縮小信賴域)
輸出:
解的接受演算法
輸入:閾值
判斷:
如果
則
否則
輸出:
子問題的近似解
柯西點
定義:令
為函式
在
的近似函式,
為
處的單位最陡下降方向(
),求解關於
的最佳化命題
則
為函式
的柯西點。可以理解為柯西點是函式
在區域
內沿著最陡下降方向進行線搜得到的最小點。
柯西點的計算:令
是函式
在區間
的一個二次近似模型
則柯西點為(其實就是高中的二次函式求最值問題,需要考慮邊界條件)
注:使用柯西點的收斂速率並不高。
Dogleg 法
狗腿路徑的定義:令
為函式
的二次近似函式且
,令
為柯西點,
為近似函式的無約束情況下的最小點,狗腿路徑
為
狗腿路徑可以理解為一種
兩階段
的方法,先朝最陡方向走,再往近似函式的無約束最小點走(如果碰到信賴域的邊界就不走了)。
狗腿法的定義:選擇
的迭代點
且
。
狗腿路徑的性質:假設
為二次函式
的狗腿路徑且半徑
,模型的 Hessian
是下降的
是上升的
柯西點法的全域性收斂性
引理1:柯西點
滿足
引理2:狗腿步長
滿足
引理3:假設一個方法採用的步長
滿足
且
,則
滿足
可以證明在一定條件下,柯西點法能夠使得:
。
子問題的迭代解
子問題的精確解
最小化二次函式的條件:假設
為二次函式
其中
是對稱矩陣
取得最小值當且僅當
且
,如果
則所有滿足
的
均是
的全域性最小點
具有唯一最小點當且僅當
精確解滿足定理:向量
是信賴域問題的解
當且僅當
是可行的且存在
子問題的迭代解
精確解定理保證瞭解的存在性,因此我們需要找到滿足條件的
,可以利用牛頓法求根的思想進行迭代求解。
算例及matlab程式碼
這裡採用信賴域法來求解一個無約束問題,信賴域子問題的求解採用柯西點法。最佳化問題為
這一函式也叫做 Branin 函式,經常被用作測試函式,它有三個全域性最優。
演算法流程
為:
初始化
重複以下步驟直到滿足收斂條件
求解區域性二次函式的最小值得到
計算
解的接受演算法
信賴域調整演算法
求解過程:
假設初始點為
,
,迭代的終止條件為
,信賴域半徑為
,
,
目標函式的梯度
為
目標函式的嚴格 Hessian 為
解的接受演算法中的閾值
,信賴域調整演算法中的
%% 定義函式、梯度和Hessian
f
=
@(
x1
,
x2
)
(
x2
-
0。129
*
x1
^
2
+
1。6
*
x1
-
6
)
^
2
+
6。07
*
cos
(
x1
)
+
10
;
g
=
@(
x1
,
x2
)
[
2
*
(
x2
-
0。129
*
x1
^
2
+
1。6
*
x1
-
6
)
*
(
-
0。258
*
x1
+
1。6
)
-
6。07
*
sin
(
x1
);
。。。
2
*
(
x2
-
0。129
*
x1
^
2
+
1。6
*
x1
-
6
)];
B
=
@(
x1
,
x2
)
[
2
*
(
-
0。258
*
x1
+
1。6
)
^
2
-
0。516
*
(
x2
-
0。128
*
x1
^
2
+
1。6
*
x1
-
6
)
-
6。07
*
cos
(
x1
),
。。。
-
0。516
*
x1
+
3。2
;
-
0。516
*
x1
+
3。2
,
2
];
%% 初始引數設定
epsilon
=
0。01
;
Delta_0
=
2
;
Delta_max
=
5
;
x0
=
[
6
;
14
];
c1
=
0。25
;
c2
=
0。75
;
eta
=
0。2
;
%% 迭代求解
while
1
if
norm
(
g
(
x0
(
1
),
x0
(
2
)),
2
)
<
=
0。01
break
end
g_k
=
g
(
x0
(
1
),
x0
(
2
));
B_k
=
B
(
x0
(
1
),
x0
(
2
));
if
g_k
‘*
B_k
*
g_k
>
0
p
=
-
g_k
/
norm
(
g_k
,
2
)
*
min
(
Delta_0
,(
norm
(
g_k
,
2
)
^
3
)
/
(
g_k
’*
B_k
*
g_k
));
else
p
=
-
g_k
/
norm
(
g_k
,
2
)
*
Delta_0
;
end
x_temp
=
x0
+
p
;
rho
=
(
f
(
x_temp
(
1
),
x_temp
(
2
))
-
f
(
x0
(
1
),
x0
(
2
)))
/
(
g_k
‘*
p
+
0。5
*
p
’*
B_k
*
p
);
if
rho
>
c2
Delta_0
=
min
(
2
*
Delta_0
,
Delta_max
);
else
Delta_0
=
0。5
*
Delta_0
;
end
if
rho
>
=
eta
x0
=
x0
+
p
;
end
end
求解的結果:左圖為自變數
的最佳化軌跡,右圖為函式值隨迭代次數的變化。
下圖在等高線圖中展示最佳化路徑