Nonlinear programming輪講スライド with 最適化法
Transcript of Nonlinear programming輪講スライド with 最適化法
![Page 1: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/1.jpg)
Nonlinear Optimization 2008/06/26
1.7 Quasi-Newton Method (準ニュートン法)
1.8 :gradientも使えない時の話 1.7でL-BFGSが出てくるので,1.7の方が重要だと思うので,1.7中心に
やります. 江原 遥
![Page 2: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/2.jpg)
Newton Method復習:何でヘシアンの逆行列が必要だったんだっけ?
12
12
2
22
))((
)())((
0))(()(
0d)(
)||(||))(('2
1)'()()(
)(
xf
xfxfd
dxfxf
dxf
dodxfddxfxfdxf
xf
ヘシアンの逆行列:
ニュートン方向:
.で微分しての二次近似が最小
を二次で近似.
ヘシアンの逆行列が必要
![Page 3: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/3.jpg)
ヘシアンは正定値がいい
ヘシアンが正定値⇒進めば必ず減尐
0)(';0
0)(';0
0)(';0
12
12
2
zxfzz
zxfzz
zxfzz
k
k
k
0)('
0)()()'(
)(
12
k
k
kkk
k
xfd
xfxfxf
xfz とおいて,
特に書いていませんが,次の事実も,一応,再確認: fが凸関数⇔ヘシアンは半正定値 (最適化法p.99) 行列Mが正定値⇔M^(-1)も正定値
)0)'(( k
k dxf
![Page 4: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/4.jpg)
Newton Method →Quasi Newton Method
Newton
Quasi-Newton
1)Dkが常に正定値だと嬉しい 2)Naïveに実装するとメモリがたくさん必要 →実は,メモリは省メモリで済むよ=L-BFGS
![Page 5: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/5.jpg)
どうやってヘシアンを近似するか: セカント条件
が成り立つ.
だから,
のとき,
))(()()(
)(,)(,)(
''2
1)(
121
112
kkkkk
kkkkk
xxxfxfxf
AxxfAxxfAxf
xbAxxxf
1.181のDを近似したい.
ここには書いてありませんが,1.182式はセカント条件というものです.
![Page 6: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/6.jpg)
セカント条件:この辺で文字をまとめる
1.181のDを近似したい.
この本の記法はちょっと特殊 普通は,右のように表記する:
kkkkkk
kkk
kkk
k
k
syHysB
xfxfy
xxs
B
H
11
1
1
1
1
,
)()(
ヘシアンの近似:
似:ヘシアンの逆行列の近
![Page 7: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/7.jpg)
セカント条件はこう考えれば当たり前
))(()()(
)(
)(
111 kkkkk
k
xxxdx
df
dx
dx
dx
dfx
dx
df
xdx
df
xf
るだけ.の一次近似をやってい数一次元で考えると,関
書いただけ.の一次近似をまとめて各成分ごとに見れば,
![Page 8: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/8.jpg)
どうやって近似するか
))(()()( 121 kkkkk xxxfxfxf
q,pを次のように定義: kkk
kkk
xxp
xfxfq
1
1 )()(
より,すると, kkk pxfq )(2
![Page 9: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/9.jpg)
で,BFGSに入るわけですが・・・
この本の書き方は,次のようになっています.
• いきなりBFGS公式が出現する
• 後から,その妥当性を説明する
Prop. 1.7.1 ヘシアン逆行列の近似行列が,必ず正定値になるように設計されている
Prop. 1.7.2, 1.7.3 共役勾配法との関係(目的関数がQuadraticなら最初のn個の結果は共役勾配法と一致) ただし,nは入力xの次元数.
![Page 10: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/10.jpg)
に注意してDFPとBFGS を導入
.が最適),両者は一致線形探索が最適なら(
.の時,
.の時,
k
k
k
k
k
BFGS1;
DFP0;
)(
1
kkk
kkkk
xfDd
dxx
![Page 11: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/11.jpg)
この本には書いていないこと:1
Hyy
HHyy
ys
ssHH
DFPybvyau
syH
yHvsu
bvvauuHH
vu
qxfxfy
pxxs
B
DH
kk
kk
kkk
kkkkk
kk
kkkk
kkkk
k
kk
'
'
'
'
1',1'
,
''
,
)(:)()(
)(:
)(:
1
1
1
1
1
1
11
公式が出てくる.として正規化すると,
を満たすようにして,セカント条件
とおいて,ここで,
ようにする.を用いて更新式を次のとりあえず,ベクトル
この本の
この本の
ヘシアンの近似:
この本の似:ヘシアンの逆行列の近
だから,DFP公式,BFGS公式がセカント条件を満たすのは,ある意味当たり前.
![Page 12: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/12.jpg)
この本には書いていないこと:2 DFP公式→BFGS公式
).公式が出てくる(はずとに関する更新式に直す
列をとってに関する更新式の逆行できた
,に関して更新式を作りとして,セカント条件
の更新式でやって同じことを,ヘシアン
を課した式.セカント条件
として
行列の更新式をこれは,ヘシアンの逆
BFGS
''
''
'
'
'
'
1
1
1
1
1
k
k
kkk
kk
kkk
kk
kk
H
B
syB
bvvauuBB
syH
bvvauuHH
Hyy
HHyy
ys
ssHH
![Page 13: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/13.jpg)
正定値性の証明
にしたいが正定値 1 kk DD
参考:Wolfの基準
を直線探索する.となるように
について,
k
kkkk dxfdxf
)'()'(
10
1
![Page 14: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/14.jpg)
の意味 kkkk dxfdxf )'()'( 1
k
←この傾き<↓この傾き
kkkk dxfdxf )'()'( 1
![Page 15: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/15.jpg)
BFGS公式の正定値性の証明 方針:正定値の定義そのまま
![Page 16: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/16.jpg)
共役勾配法との関係
![Page 17: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/17.jpg)
prop. 1.7.2の証明概要
1.195は次のようにしめす:
より,:
![Page 18: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/18.jpg)
もうっちょっと言うと:
![Page 19: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/19.jpg)
共役勾配法とBFGS
![Page 20: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/20.jpg)
計算速度の観点
共役勾配法:
共役勾配が分かれば,共役方向の計算はO(n)
だけど,共役勾配の計算に時間がかかる
準ニュートン法:
ヘシアンの(逆行列の)計算にO(n^2)
![Page 21: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/21.jpg)
L-BFGS
は,式を変形すると,こう書ける.: (実際,共立出版最適化法には,こっちで書いてある.)
![Page 22: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/22.jpg)
L-BFGS
![Page 23: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/23.jpg)
最初のD0をスケーリングすると 実際には重要な改善が見込める
重要:理論的には,ニュートン法は,アフィン変換(スケーリング)に対して,不変.しかし,実際には,最初のD0をスケーリングすると性能が改善して,よくあるのは次のような選び方:
condition number:
は,行列の正則性を見るための指標.この値が大きいほど,特異性(正則でない度合い)が強くなるので,これが,iterationの間に増加しないよう
にしたい.スケーリングすると,これができる(というか,むしろ,これを減尐させられる)
![Page 24: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/24.jpg)
L-BFGSの高速実装
結論: 自分の知る限り,辻井研の岡崎直観さんのlibbfgsが最速っぽい.岡崎さんは,これをオープンソースにしているので,これを使うのがよさげ.
理由: 同じL-BFGSライブラリでも,直線探索はバラバラ.
libbfgsは,直線探索も吟味してある.また,計算をSSE2命令を使って高速化するのも試されていて,10%ほど早くなる.(ご本人は,これを大して早くならないと書いていますが・・・)
![Page 25: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/25.jpg)
主なBFGSの実装
J. Nocedalコード 2000 :L-BFGSの原論文(1989)
f2c(J. Nocedal) 上記をf2cでC言語に.
Tsuruoka 2007
libbfgs (Okazakiさん) 2008
![Page 26: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/26.jpg)
CRFとBFGSの対応表
工藤さん:CRF++,mecab:f2c(J.Nocedal)
岡崎さん:CRFsuite: libbfgs
清水さん:機械学習テンプレートライブラリ:Tsuruoka 2007
![Page 27: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/27.jpg)
1.8 NONDERIVATIVE METHODS
central differenceはforward differenceの2倍の計算量だが,その分精度がいい.central differenceだと,ついでにHessianも計算できてしまう:
![Page 28: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/28.jpg)
hの選び方
• 小さいhを使ってgradientを近似している
→どういうhを選べばいいのか?
hを(丸め誤差に対して)固定すると,丸め誤差に対して近似誤差が分かりやすくなる:
![Page 29: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/29.jpg)
forward -> centralの切り替え タイミング
普通は,計算の楽なforwardで初めて,ある時からcentralで正確に計算し始める.その,切り替えるタイミングは,適当なεを決めておいて,
が成り立たなくなった時に,centralに切り替える.
![Page 30: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/30.jpg)
Hessian
• 次のようにして二回微分(Hessian)を計算してNewton法をするという手もある.このとき,経験的には,このHessianの計算の精度はそこまで収束の早さに影響しないので,普通は,forwardで十分.余力があればcentralで.
![Page 31: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/31.jpg)
Coordinate Discent
• あらかじめ独立なベクトルの集合を決めておいて,各ベクトルの方向に最適化していく.
![Page 32: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/32.jpg)
並列化に使えます
![Page 33: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/33.jpg)
steepest discentとの比較
![Page 34: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/34.jpg)
Direct Search Methods
Coordinate Discentでは,あらかじめ,独立なベクトルの集合を決めておいて,各ベクトルの方向に最適化していった.
→「独立なベクトルの集合」そのものも,改善していけるとうれしい.それが,Direct Search Methods.
残念ながら,ヒューリスティクスでしかないが,一応,やり方はあって,Simplex Methodという(線形計画問題の単体法とは何の関係もない)
方針:「与えられた独立なベクトルの集合」の凸包を考えて,その頂点の中で最悪なコストを持つ頂点を,ましな頂点に変えていく.
![Page 35: Nonlinear programming輪講スライド with 最適化法](https://reader034.fdocument.pub/reader034/viewer/2022042601/55660cf4d8b42aa6628b5205/html5/thumbnails/35.jpg)
終わり