13
計算科学基礎 2018 1 22 日作成 名古屋工業大学 先進セラミックス研究センター 井田 2020 11 19 日更新 第3部 最適化とモンテカルロ法 8.最適化 Optimization 最適化(最適化計算) optimization とは,(コンピュータを使って)関数の最大あるい オプティマイゼイション 最小を求めようとすることです補足 8.A。技術や産業・経済だけでなく,政治・教育 の意味でも「最適化」は重要です。機械学習 machine learning では,訓練データに対す ラーニング る反応ののしかたがなるべく正解に近くなるように,機械の挙動を決めるパラメータが最 適化されます。 今までに学んだこと(第2部 構造のシミュレーション,ポテンシャルの計算など)と 「最適化」を組み合わせることで,例えば「安定な構造」を推定することができます。ポ テンシャルを最小にする構造は「エネルギー的に最も安定な構造」と呼ばれることがあり ます。 一定の圧力で最も安定な構造は,エンタルピー enthalpy (8.1) を最小にする構造として求められます。ここで U は内部エネルギー,P は圧力,V は体積 です。周期的境界条件を用いる場合には,U として「基本セル当たりの内部エネル ギー」,V として「基本セルの体積」を用い,「基本セルあたりのエンタルピー」につい て議論することになります。 一定温度,一定圧力で最も安定な構造はギブスの自由エネルギー (8.2) を最小にする構造になるはずです。ここで T は温度, S はエントロピーです。ただし,ダ イナミックスのシミュレーションのためには運動方程式(あるいは発展方程式)を解く方 法の使われる場合が多いようです。 最適化は,コンピュータを使った構造シミュレーションだけではなく,実験データ(力学 的/光学的/電気的/磁気的な測定の結果)を解析する場合にも用いられます。実験 experiment観測 observation で得られたデータに,パラメータを含む理論モデルをあ エクスペリメント オブザーベイション H = U + PV G = H TS = U + PV TS

27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

計算科学基礎 2018 年 1 月 22 日作成

名古屋工業大学 先進セラミックス研究センター 井田 隆 2020 年 11 月 19 日更新

第3部

最適化とモンテカルロ法 8.最適化 Optimization 最適化(最適化計算) optimization とは,(コンピュータを使って)関数の最大あるい

オプティマイゼイション

は最小を求めようとすることです(補足 8.A)。技術や産業・経済だけでなく,政治・教育の意味でも「最適化」は重要です。機械学習 machine learning では,訓練データに対す

マ シ ン ラ ー ニ ン グ

る反応ののしかたがなるべく正解に近くなるように,機械の挙動を決めるパラメータが最適化されます。

今までに学んだこと(第2部 構造のシミュレーション,ポテンシャルの計算など)と「最適化」を組み合わせることで,例えば「安定な構造」を推定することができます。ポテンシャルを最小にする構造は「エネルギー的に最も安定な構造」と呼ばれることがあります。

一定の圧力で最も安定な構造は,エンタルピー enthalpy

(8.1)

を最小にする構造として求められます。ここで U は内部エネルギー,P は圧力,V は体積です。周期的境界条件を用いる場合には,U として「基本セル当たりの内部エネルギー」,V として「基本セルの体積」を用い,「基本セルあたりのエンタルピー」について議論することになります。

一定温度,一定圧力で最も安定な構造はギブスの自由エネルギー

(8.2)

を最小にする構造になるはずです。ここで T は温度, S はエントロピーです。ただし,ダイナミックスのシミュレーションのためには運動方程式(あるいは発展方程式)を解く方法の使われる場合が多いようです。

最適化は,コンピュータを使った構造シミュレーションだけではなく,実験データ(力学的/光学的/電気的/磁気的な測定の結果)を解析する場合にも用いられます。実験 experiment・観測 observation で得られたデータに,パラメータを含む理論モデルをあエ ク スペ リ メ ン ト オブザーベイション

H = U + PV

G = H − TS = U + PV − TS

Page 2: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

てはめて,ずれを最小にするようなパラメータを求めるような最適化のしかたは曲線当てはめ curve fitting とも呼ばれ,実験データの解析には古くから用いられてきました。ほ

カ ー ブ フィッティング

ぼ同じことが回帰 regression と呼ばれることもあります(補足 8.B)。か い き リ グ レ ッ シ ョ ン

実験データを解析する場合の基本的な考え方として,ベイズ推定,最大事後確率推定,最尤推定,最小二乗法などがあります。最尤推定とは,「観測されたデータの出現する確さいゆうすいてい

率が最大となるようなモデルを求める」ことを意味します。構造モデルなどの理論モデルによって,実験データの出現する確率を関数の形で表すことができれば,「実験データの解釈」は,この関数の最大を求める問題と同じことです。

つまり,

 安定構造のシミュレーション = ポテンシャル関数(自由エネルギー)の最小化

 実験データ解析 = 尤度関数(データの出現確率)の最大化

のような関係があります。

任意の n 変数関数 の最大化は,関数 の最小化と

同じことです。比較的最近まで,「最適化」とは「関数の最小を求める問題(方法)」という文脈で用いられることが多かったのですが,最近では「確率を表す関数を最大にする問題」「エントロピーを表す関数を最大にする問題」という文脈で用いる場合が増えているようです。

8-1 最適化の方法 Methods for optimization

コンピュータを使った最適化の方法として,いろいろな性格の膨大な種類の方法が提案されています。代表的な方法に以下のようなものがあります。

(1)グリッド・サーチ法

(2)黄金分割法(一次元の最小化)とそれを使った多次元の最小化の方法

(3)ネルダー・ミード法(滑降型シンプレックス法)

(4)ニュートン法と関連する方法

(5)モンテカルロ法と関連する方法(乱数を使う方法)

実際にはこれらを組み合わせた方法の使われる場合が多く,現実に使われる最適化の方法はかなり複雑です。

グリッド・サーチ grid-search 法(網探索法)とは,関数の変数が取りうる範囲を細かく区切り,すべての取りうる変数値の組み合わせで関数値を評価し,最小の値をとる組み合わせを選ぶ方法です。効率が良くなく,得られる結果の精度も高くなりませんが,最も安

f (x1, ⋯, xn) g (x1, ⋯, xn) = − f (x1, ⋯, xn)

Page 3: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

全で確実な方法とも言えます。他の方法で最小を求めるとしても,「正しく最小が得られているかを確認する」などの目的でも有効です。

黄金分割法 golden section method とネルダー・ミード法(滑降型シンプレックス法)を本章の次節以降で紹介します。

ニュートン法 Newton’s method は基本的には「微分がゼロになるような解」を求める方法で,最適解から少し離れた位置では効率が悪かったり挙動が不安定になる一方で,最適解の近くでは非常に効率良く働くので,他の方法と組み合わせて用いられるのも普通です。

準ニュートン法 quasi -Newton method と呼ばれる方法もよく使われます(補足 8.C)。じゅん クゥェイサイ ニ ュ ー ト ン メ ソ ッ ド

黄金分割法,ネルダー・ミード法,ニュートン法系の方法は,いずれも極小 local きょくしょう ローカル

minimum を求めるための方法であり,局所的な最適化のための算法 algorithm for local ミ ニ マ ム ア ル ゴ リ ズ ム ローカル

optimization に分類されます。多くの「局所的な最適化アルゴリズム」が知られていまオプティマイゼイション

す。

大域的な最小 global minimum (本当の意味での最小)を求めるため,あるいは,大域グローバル ミ ニ マ ム たいいき

的な最適化 global optimization のための算法も多く,その多くはモンテカルロ法 まと グローバル オプティマイゼイション

Monte Carlo method を組み込んだものです。ただし,「大域的な最適化アルゴリズム」を使ったからと言って,必ず大域的な最適化が実現されるとは限りません。

グリッド・サーチ法は「最適化アルゴリズム」には分類されませんが,局所的な最適化アルゴリズムと組み合わせて,大域的な最適解が得られる場合もあります。

モンテカルロ法と関連する方法については次章で扱います。

8-2 黄金分割法 Golden section method

(8.2.1)

あるいは,

(8.2.2)

が黄金比 golden ratio と呼ばれます。 の値のことは黄金数 golden number と呼ばれるこゴ ール デ ン レイショ ナ ン バ ー

ともあります。また,長辺と短辺の比が黄金比となる長方形を黄金長方形と呼びます(補足 8.2.A)。黄金比はフィボナッチ数列 Fibonacci 数列の隣り合う項の比の極限値としても知られています(補足 8.2.B)。

φ =1 + 5

2= 1.618 033 ⋯

=2

1 + 5=

5 − 12

= 0.618 003 ⋯

φ

Page 4: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

 

Fig 8.2.1 レオナルド・ダヴィンチのウィトルウィウス的人体図(左)。描かれている円の半径と正方形の辺の長さの比が黄金比に等しいという説には無理がある(右)

「自然や人工の造形,芸術作品に黄金比の隠されていることが多い」という人もいますが,「それほどでもない」という人も少なくありません。例えば,「レオナルド・ダヴィンチの『ウィトルウィウス的人体図』に描かれている円の半径と正方形の辺の長さの比は黄金比に等しい」という説がありますが,実際に黄金比に対応する円を描くと,Fig.

8.2.1 の右側の図中に青線で示しているように,ダ・ヴィンチの描いた円(赤線)から,かなりずれていることがわかります(補足 8.2.C)。

【黄金分割アルゴリズム】

区間を あるいは の比率で分割するこ

とを黄金分割と呼びます。

黄金分割法は1次元の最小化アルゴリズムであり,動作は比較的安定でプログラミングも容易です。以下のような手続きで,有限の区間内での関数 の極小を求めることができます(補足 8.2.D)。

(i) 区間の下限を a, 上限を d とする。 , の値を計算する。(ii) 以下の式に従って,区間を黄金分割する二つの点 b,c をとる。

1 −1φ

:1φ

≈ 0.382 : 0.6181φ

: 1 −1φ

≈ 0.618 : 0.382

f (x)

f (a) f (d )

Page 5: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

(8.2.3)

(8.2.4)

また, , の値を計算する。

ここで,b と c はそれぞれ区間 (a, d) を , の比に内分する点であ

る。(iii) もし なら,最小となるのは (a, c) の区間内だから,以下の代入: ,

, , を行い, として の値を計算する。 なら,最小となるのは (b, d) の区間内なので,以下の代入: ,

, , を行い, として の値を計算する。

(iv) (iii) に戻る。

Fig. 8.2.2 黄金分割法を関数 の最小化に適用する場合の進行

例。初期区間を とする。(a) 関数の形状。(b) はじめの標本点配置と関数値。 なので標本点 と関数値 を捨てて, を に, を に, を に, を に読み替える。(c) 次の段階での標本点配置と関数値。ここでの は新しい区間 を黄金分割した点で,関数値 だけを新しく計算している。この結果 となったので,ここでは,標本点 と関数値 を捨てて, を に, を に, を に, を に読み替える。(d) 次の段階での標本点配置と関数値。ここ

では関数値 だけを新しく計算している。

b =aφ

+ (1 −1φ ) d

c = (1 −1φ ) a +

f (b) f (c)

1 −1φ

:1φ

: 1 −1φ

f (b) < f (c) d ← cc ← b f (d ) ← f (c) f (c) ← f (b) b = ra + (1 − r)d f (b)

f (c) ≤ f (b) a ← bb ← c f (a) ← f (b) f (b) ← f (c) c = (1 − r)a + rd f (c)

-2.5

-2.0

-1.5

-1.0

-0.5

0.0

y

3210-1x

-2.5

-2.0

-1.5

-1.0

-0.5

0.0

y

3210-1x

a d

c

b

f(a)

f(b)

f(d)

f(c)

-2.5

-2.0

-1.5

-1.0

-0.5

0.0

y

3210-1x

a

d

cb

f(a) f(b)

f(d)

f(c)

-2.5

-2.0

-1.5

-1.0

-0.5

0.0

y

3210-1x

a d

cb

f(a) f(b)

f(d)

f(c)

(a) (b)

(c) (d)

f (x) = − exp [−(x − 0.5)4] − exp[ − (x − 1.5)2]x ∈ [0, 2] f (b) > f (c)

a f (a) b a f (b) f (a) c b f (c) f (b)

c [a , d ] f (c)

f (b) < f (c) d f (d ) c

d f (c) f (d ) b c f (b) f (c)

f (b)

Page 6: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

例えば,Fig. 8.2.2 のように,

(8.2.5)

という関数について, として探索を繰り返せば,正しい最小位置( )が求められます。

ただし,黄金分割法はそもそも局所的な最適化法なので,正しい最小 global minimum ではない極小 local minimum (偽の最小 false minimum)に陥る場合があることも当然であ

フォールス ミ ニ マ ム

るということには注意するべきでしょう(補足 8.2.E)。

また,黄金分割法では最適解に近づいてから収束するまでにかなり計算ステップが多くなるので,「一変数関数についての微分に対するニュートン・ラフソン法」とも言える「放物線補間」parabolic interpolation と組み合わせて収束を早くさせるブレントの方法 Brent’s method と呼ばれる方法が普通用いられます(補足 8.2.F)。

8-3 ネルダー・ミード法 Nelder-Mead method

滑降シンプレックス法 downhill simplex method とも超多面体法 polytope method,アかっこう ダ ウ ン ヒ ル ポ リ ト ウ プ

メーバ法 amoeba method とも呼ばれます。二つ以上の変数を持つ関数の最適化で用いられます。自分でコーディングするには少し手間がかかりますが,動作は比較的安定・確実であり,効率もニュートン法系の方法に比べて極端に悪いわけではなく,知っておくと良い方法です。

黄金分割法が一次元で「解を含む範囲を挟みうちしながら縮小していく」のと同じように,滑降シンプレックス法では理想的には「解を含む空間を囲む多面体(超多面体)を縮小していく」ような操作を繰り返します。

一般的に m 個のパラメータ(変数)を含む関数(m 次元関数)を最適化するためには,m 次元の空間(超空間)で (m + 1) 個の頂点を持つ多角形あるいは多面体(超多面体)を変形,移動する操作を行います。

2変数の関数であれば,平面の上で三角形を使います。3変数の関数なら三次元空間で四面体を使います。4変数以上の関数であれば超空間で超多面体を使うことになります。(1)各頂点 vertex の座標を とします。はじめに頂点の「初期配置」

を決めます。事実上この初期配置の決め方で最適化がうまくいくか決まります。初期配置はユーザに指定させるのが普通ですが, 個の数値を指定させることになり,こ

のことでネルダー・ミード法が使いづらいものになる傾向があります。乱数を使ってランダムな配置から始める場合もあります。ユーザーに「粗い推定値」 と

f (x) = − exp [−(x − 0.5)4] − exp [−(x − 1.5)2]x ∈ [0,2]

x = 1.088 43

pi (i = 1,⋯, m + 1)

m (m + 1)

p̃ = (p̃1, ⋯, p̃m)

Page 7: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

「粗い推定誤差」 の 個の数値のみ指定させ, 個の頂点

を , , のように配置す

るのも現実的な方法です (Fig. 8.3.1)。

Fig. 8.3.1 2次元での初期シンプレックスの例。ユーザーに の

4数値を指定させて,はじめの3つの頂点を決める。

(2)各ステップ毎に,頂点を関数値に応じて序列化します。特に「最悪点」worst point

と「第二最悪点」second worst point 「最良点」best point の3点の序列を決める必要があります。ここでは,

の関係が成り立つとします。最良点が ,第二最悪点が ,最悪点が であるとします (Fig. 8.3.2)。

Fig. 8.3.2 2次元での頂点の序列化

以下の手順を繰り返します。

Δp̃ = (Δp̃1, ⋯, Δp̃m) 2m (m + 1)

p̃1 = (p̃1 + Δp̃1, ⋯, p̃m) p̃m = (p̃1, ⋯, p̃m + Δp̃m) p̃m+1 = (p̃1, ⋯, p̃m)

y + Δy

x + Δxx

y

p2

p3 p1

{x , y, Δx , Δy}

f (p1) ≤ f (p2) ≤ ⋯ ≤ f (pm) ≤ f (pm+1)p1 pm pm+1

p1

p2

p3

(Best point)

(Worst point)

(Second worst point)

Page 8: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

(3)最悪点 以外のすべての点の重心 gravity center:グラヴィティ セ ン タ

を求めます (Fig. 8.3.3)。

(4)最悪点 を,重心 に対して反射 reflection (ふつうの幾何学の用語では反リフレクション

転 inversion に対応する)位置(反射点) を求めます 。反射点は以下の式で得られインバージョン

ます (Fig. 8.3.3)。

また反射点での関数の値 を求めます。

(5)反射点 が今までの最良点 よりは悪いが,最悪点 より良い場合 ,つまり

のとき,今までの最悪点 を捨て,反射点 に入れ替えます。このとき最良点は変化しません。 で新しく序列化を施します。ここでこのステップは終了し

(3)に戻ります。

Fig. 8.3.3 最悪点 ,最悪点以外の重心 ,反射点 ,反射拡大点 ,

収縮点 の関係

pm+1

p0 =1m

m

∑i=1

pi

pm+1 p0

prefl

prefl = p0 + (p0 − pm+1) = 2p0 − pm+1

f (prefl)prefl p1 pm+1

f (p1) ≤ f (prefl) ≤ f (pm+1)pm+1 prefl

{p2, ⋯, pm+1}

p3 p0 prefl pexpand

pcontract

p3 (Worst point)

p1

(Best point)

p2

(Second worst point)

pcontract

p0

prefl

pexpand

Page 9: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

(6)反射点 が今までの最良点 より良い場合,つまり,

のとき,反射拡大点 reflection & expansion point を求め,関数値 を計算し

ます。反射拡大点は次式で得られます (Fig. 8.3.3)。

(7)反射拡大点 が反射点 より良い場合,つまり

のとき,最悪点 を捨て,反射拡大点 を採用し,序列を更新します。ここでこのステップは終了し,(3)に戻ります。

(8)反射拡大点 が反射点 より悪い場合,つまり

のとき,最悪点 を捨て,反射点 を採用し,序列を更新します。ここでこのステップは終了し,(3)に戻ります。

(9)反射点が第二最悪点より悪い場合,つまり

のとき,一次元収縮 contraction を施し収縮点 を求め,関数値 を計算します。収縮点は以下の式で得られます (Fig. 8.3.3)。

(10)収縮点 が最悪点 より良い場合 ,つまり

のとき,最悪点 を捨て,収縮点 を採用し,頂点の序列を更新します。ここでこのステップは終了し(3)に戻ります。

(11)収縮点 が最悪点 より悪い場合,つまり

のとき,最良点 を中心に縮小 reduction を施します (Fig. 8.3.4)。「縮小」の操作は「反射」「反射拡大」「収縮」とは性格が異なり,「最良点」以外の全ての点に同時に施される操作で,以下の式で表されます。

prefl p1 f (prefl) < f (p1)pexpand f (pexpand)

pexpand = p0 + 2 (p0 − pm+1) = 3p0 − 2pm+1

pexpand prefl

f (pexpand) < f (prefl) < f (p1)pm+1 pexpand

pexpand prefl

f (prefl) ≤ f (pexpand)pm+1 prefl

f (pm) ≤ f (prefl)pcontract f (pcontract)

pcontract = p0 − 0.5 (p0 − pm+1) = 0.5p0 + 0.5pm+1

pcontract pm+1

f (pcontract) ≤ f (pm+1)pm+1 pcontract

pcontract pm+1

f (pm+1) < f (pcontract)p1

pi ← pi − 0.5 (pi − p1) = 1.5 pi − 0.5 p1

(i = 2,3,⋯, m + 1)

Page 10: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

関数値 を計算し直し,序列化を施し,(3)に戻ります。

Fig. 8.3.4 ネルダー・ミード法の「縮小 reduction」操作 

ネルダー・ミード法で必ず「極小」が求まることは証明されているそうですが,シンプレックスの初期配置によって「偽最小」に陥る場合があることは,黄金分割法と同様です。

(補足 8.A)最適化と関数の最大・最小

「最適化 optimization とは関数の最大 maximum あるいは最小 minimum を求めるのと同じことだ」という言い方に少し紛らわしさがあるかもしれません。もう少し詳しい表現のしかたをすれば「関数が最大あるいは最小になるための変数の値を求める」ということで,最大値あるいは最小値を求めるということとは意味が違います。

(補足 8.B)曲線当てはめ curve fitting と回帰 regression

曲線あてはめ curve fitting と回帰 regression は少し意味合いが違うとは思いますが,実際にはほとんどカ ー ブ フィッティング リ グ レ ッ シ ョ ン

同じ意味で使われます。「直線をあてはめる」場合でも「曲線当てはめ」という語を使う場合があることに違和感を持つ人もいるかもしれませんが,「直線は曲線の一種である」とも言えるので,そのことは,あまり気にする必要はないでしょう。語源からすると “regress” は「本来の位置に戻る」という意味合いで,「ノイズや統計的な変動の影響を受けて『本来の値』からずれてしまっている実験データに加工をして『本来の値』に戻してやる」とでも言いたいような雰囲気がありますが,実際の回帰分析 regression analysis で行われていることは「実験データに曲線をあてはめる」 方に近いと思います。

日本での状況はやや特殊で,数学の分野での専門用語の多くには伝統的に漢語風の表現が用いられてきたので「あてはめ」という和語を用いることに抵抗を持つ人もいそうです。 “Curve fitting” は中国語では「曲线

拟合」と翻訳され,「曲线」は曲線の意味,「拟」は日本で用いられる漢字では「擬」に近く「曲線擬合」ぎ ごう

とでもすれば良いのかもしれませんが,無理にそのような語を作る必要もないでしょう。 “Regression” は中国語には「回归」と翻訳され,日本語の「回帰」と同じです。

f (pi) (i = 2,3,⋯, m + 1)

p3 (Worst point)

p3

p2

(Second worst point)p2p1

(Best point)

Page 11: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

(補足 8.C)準ニュートン法 quasi-Newton method

「ニュートン法 Newton’s method」は,多変数関数の方程式を解く場合には,「多変数関数の微分」に相当する勾配 gradientを使い,多変数関数の最適化では「多変数関数の2階微分」に相当するヘッセ行列

グラディエント

Hessian matirx(ヘシアン Hessian)を使いますが,準ニュートン法 quasi -Newton method では,これクゥェイサイ ニ ュ ー ト ン メ ソ ッ ド

らの厳密な値を使うわけではないという特徴があります。準ニュートン法の中で過去には比較的良く使われていた方法に,パウエル法 Powell’s method(パウエルの共役方向法 Powell’s conjugate direction

きょうやく コ ン ジ ュ ゲ イ ト ディレクション

methodあるいはダビドン・フレッチャー・パウエル法 Davidon-Fletcher Powell method)(DFP 法) がありますが,この系統のアルゴリズムとしては,最近ではブロイデン・フレッチャー・ゴールドファウプ・シャンノ法 Broyden-Fletcher-Goldfarb-Shannno method(BGFS 法)の使われる方が普通のようです。

ニュートン法系の方法では最急降下法 gradient descent (steepest descent method) と共役勾配法 グラディエント ディーセント スティーペスト

conjugate gradient method(CG 法)と呼ばれる方法の区別もありますが,これらはニュートン法か準ニュートン法かということとは関係がなく,多変数関数の一次元的な最小化の方向として勾配の最も急な方向を選ぶか,それとは一般的に異なる共役勾配方向を選ぶかという違いであり,単独で意味のあることではないかもしれません。

(補足 8.2.A)黄金長方形

「黄金長方形が最も美しく見える長方形だ」と言う人もいますが,実際のところ,見た目では「 1 : 1.6 = 5 :

8 の比を持つ長方形」と区別することはできないでしょう。「黄金比」が「美しく見える」として,「1 :

1.62 の方が 1 : 1.60 より美しく見える」と主張することには無理がありそうです。

   縦 100 px, 横 162 px として描いた長方形   縦 100 px, 横 160 px として描いた長方形

(補足 8.2.B)黄金比とフィボナッチ数列

フィボナッチ Fibonacci 数列は,「新しい項」が「前の項」と「さらにもう一つ前の項」の和で表される数列で,

という並び方をします。となりあうフィボナッチ数の比は黄金比に近づくことが知られています。たとえば,

, , , , , , ,

,…

などとなります。

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ⋯

01

= 011

= 112

= 0.523

= 0.6666⋯35

= 0.658

= 0.6258

13= 0.61538⋯

1321

= 0.61904⋯

Page 12: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

第 n 番目のフィボナッチ数を として,隣り合う2つの数の極限値を

(8.2.B.1)

とすれば,

(8.2.B.2)

の関係から

(8.2.B.3)なので, のとき

(8.2.B.4)

という解を持つことは,自然に導かれます。

(補足 8.2.C)レオナルド・ダヴィンチのウィトルウィウス的人体図と黄金比

レオナルド・ダヴィンチがどのような意図で「ウィトルウィウス的˚人体図」を描いたかについて調べた結果を日本語(http://www.crl.nitech.ac.jp/~ida/education/VitruvianMan/index-j.html)と英語(http://

www.crl.nitech.ac.jp/~ida/education/VitruvianMan/index.html)で公開しています。

(補足 8.2.D)黄金分割法の別バージョン

以下のようにすれば,はじめの下限 と上限 での関数値 , のうち,どちらか一回だけ関数計算を節約することができます。

(i) 区間の下限を a, 上限を d とする。

(ii) 以下の式に従って,区間を黄金分割する二つの点 b,c をとる。

(8.2.D.1)

(8.2.D.2)

また, , の値を計算する。

(iii) もし なら,最小となるのは (a, c) の区間内だから, の値を計算し,以下の代入:

, , , を行い, として の値を計算する。

なら,最小となるのは (b, d) の区間内なので, の値を計算し,以下の代入: ,, , を行い, として の値を計算する。

(iv) もし なら,最小となるのは (a, c) の区間内だから, , , , を行い, として の値を計算する。 なら,最小となるの

は (b, d) の区間内なので,以下の代入: , , , を行い, として の値を計算する。

(v) (iv) に戻る。

ただし,コードが冗長になるか余分な条件判断を挿入するかしなければいけなくなるのに対して,節約できる計算量は無視できるほどなので,自分でコードを書く場合に,わざわざこの方法をとる必要はないでしょう。

Fn

x = limn→∞

Fn−1Fn

x = limn→∞

Fn−1Fn−1 + Fn−2

= limn→∞

1

1 +Fn−2Fn−1

=1

1 + x

x2 + x − 1 = 00 < x

x =−1 + 5

2= 0.618034⋯

a d f (a) f (d )

b =aφ

+ (1 −1φ ) d

c = (1 −1φ ) a +

f (b) f (c)

f (b) < f (c) f (a)

d ← c c ← b f (d ) ← f (c) f (c) ← f (b) b = r a + (1 − r)d f (b)

f (c) ≤ f (b) f (d ) a ← b

b ← c f (a) ← f (b) f (b) ← f (c) c = (1 − r)a + r d f (c)

f (b) < f (c) d ← c c ← b f (d ) ← f (c)

f (c) ← f (b) b = r a + (1 − r)d f (b) f (c) ≤ f (b)

a ← b b ← c f (a) ← f (b) f (b) ← f (c)

c = (1 − r)a + r d f (c)

Page 13: 27 第3部 最適化とモンテカルロ法 - takashiida.floppy.jptakashiida.floppy.jp/public/education/ComputerScience/0308.pdf · 8-1 最適化の方法 Methods for optimization

(補足 8.2.E)黄金分割法で最適化に失敗する例黄金分割法法で極小が求められることは保証されているようですが,

(8.2.E.1)

のような関数については, として黄金分割探索すると という偽最小 false minimum ぎ フォールス ミ ニ マ ム

に陥ってしまいます。Fig. 8.2.E.1 に式 (8.2.E.1) で表される関数の形状を示します。

Fig. 8.2.E.1 式 (8.2.E.1) で表される関数の形状。 で最小値をとるが, でも極小を持つ。

この場合でも探索範囲を のように最小位置に近い狭い範囲に設定して探索を始めれば,正しい最

小位置 が導かれます。

(補足 8.2.F)ブレントの方法 Brent’s method

ある標本点位置 での関数値 と微分 ,二次微分 の値がわかれば,その点を通り と傾きも曲率も等しい放物線:

(8.2.F.1)

を,一義的に確定することができます。この放物線の傾きがゼロとなる場所(底の位置)を求めることは,そこ

関数の微分 について「方程式の解を求める」ためのニュートン・ラフソン法を適用することと同じです。

ところが,式 (8.2.9) と Fig. 8.2.2 に示した関数:

(8.2.F.2)

のように,上に凸な場所や曲率のゼロになる場所のあるような関数の極小を求める問題の場合,この「放物線の底の位置の予測」は,まったく役に立たない場合があります。その一方で,最小値に近い場所では,この放物線を用いた予測をすれば,黄金分割法よりずっと効率良く最小値を見つけられることになります。

ブレントの方法 Brent’s method は,黄金分割と放物線予測を切り替えながら最小化を行う考え方に基づいていて,実際によく使われている方法です。ただし,ブレント法も局所的な最適化を行う方法であり,必ずしも大域的な最適化が行われるとは限りません。

f (x) = − exp [−10 (x − 0.5)4] − 1.2 exp [−10 (x − 1.5)2]x ∈ [0,2] x = 0.538 108

-2.0

-1.5

-1.0

-0.5

0.0

0.5

y

3210-1x

f (x) = ! exp [!10 (x ! 0.5)4] ! 1.2 exp [!10 (x ! 1.5)2]

x ≈ 1.5 x ≈ 0.5

x ∈ [1, 2]

x0 f (x0) f ′ (x0) f ′ ′ (x0) f (x)

y = f (x0) + (x − x0) f ′ (x0) +(x − x0)2

2f ′ ′ (x0)

f ′ (x)

f (x) = − exp [−(x − 0.5)4] − exp [−(x − 1.5)2]