ネルダーミードの停止基準


11

関数を最適化するためにNelder-Meadアルゴリズムを実装しようとしています。ネルダ-ミードに関するWikipediaのページには、その停止基準を除いて、全体のアルゴリズムについて驚くほど明らかです。悲しいことに、それは言う:

収束を確認します[説明が必要]

私は自分でいくつかの基準を試し、テストしました:

  • である場合に停止します。ここで、は小さく、はシンプレックスの番目の頂点で、low()からhigh()関数値。つまり、シンプレックスの最大値が最小値にほぼ​​等しい場合。これは、シンプレックス内の関数の動作を保証しないため、適切に機能しないことがわかりました。例:関数を考えます:これはもちろん最適化するのは簡単ですが、NMでこれを行い、2つのシンプレックスポイントをおよびとしましょう。f(xN+1)f(x1)<ϵϵxiif(x1)f(xN+1)

    f(x)=x2
    x1=1x2=1。アルゴリズムは、最適を見つけることなく、ここに収束します。
  • 2番目のオプションには、シンプレックスの重心の評価が含まれます。停止する場合。これは、シンプレックスの最低点と重心がそのような類似した値を持っている場合、シンプレックスが収束を呼び出すのに十分小さいと想定しています。|f(x1)f(xc)|<ϵ

これは収束をチェックする適切な方法ですか?または、これを確認する確立された方法はありますか?ほとんどの検索ヒットはアルゴリズムの複雑さに焦点を当てているため、これに関するソースは見つかりませんでした。


あなたがで何が起こるかを比較している理由は、私にははっきりしていない1と。確かに、それをで何が起こるかと比較したいでしょう。2.収束チェックは、多くの最適化において特に扱いにくい領域です。関数があまり変化しないことが必要ですが、引数が急速に変化している場合(関数がかろうじて変化している場合でも)、収束していない可能性があるため、人々は両方を参照する基準をよく使用します。相対基準と絶対基準のどちらを使用するかという問題もあります(どちらも不十分です。たとえば、0に非常に近い場合の相対テストはトリガーされません)xN+1x1xN
Glen_b -Reinstate Monica

3
ネルダーミードの最良の停止基準は、始める前です。
マークL.ストーン

@Glen_bのコメントでの表記に関する混乱を避けるために...ここでの添え字は、アルゴリズムの反復ではなく、シンプレックスの頂点を指していると思います。したがって、この質問で提案された最初の収束基準は、次元パラメーター空間の頂点の最低関数値と最高関数値を比較します...それは質問では明示的に述べられていませんが、リンクされたウィキペディアページのアルゴリズムの説明(また、元の論文では、頂点を関数の最低値から最高値の順に並べています。NN+1
ネイトポープ

@NatePopeはい、私の意図でした。質問に説明を追加します。\
JAD

回答:


6

Numerical Recipesの元のバージョンにおけるこの「下り坂シンプレックスアルゴリズム」の説明は、特に明快で役立つものです。したがって、その関連部分を引用します。背景は次のとおりです。

1次元の最小化では、最小値をブラケットすることが可能でした...。ああ!多次元空間には類似の手順はありません。...私たちにできる最善のことは、アルゴリズムに最初の推測を与えることです。つまり、最初に試すポイントとしての独立変数のベクトルです。次に、アルゴリズムは、(少なくとも局所的な)最小値に遭遇するまで、次元の地形の想像を絶する複雑さを通り抜けて、独自の方法で下り坂を作ると想定されています。NN

ダウンヒルシンプレックス法は、単一の点だけでなく、点から開始して、初期シンプレックスを定義する必要があります。[これらの点を最初の開始点にすることができます]ここで、は単位のベクトルであり、はあなたの推測である定数です問題の特徴的な長さスケールの。...N+1P0

(10.4.1)Pi=P0+λei
eiNλ

ほとんどのステップでは、シンプレックスの反対側の面を通過して、関数が最大になるシンプレックスのポイント(「最高ポイント」)を低いポイントに移動します。...

次に、当面の問題について、アルゴリズムを終了します。 アカウントの一般性に注意してください。作成者は多次元オプティマイザーを終了するための直感的で有用なアドバイスを提供し、それがこの特定のアルゴリズムにどのように適用されるかを具体的に示します。最初の段落は私たちの前の質問に答えます:

終了基準は微妙な場合があります...。通常、多次元アルゴリズムの1つの「サイクル」または「ステップ」を識別できます。次に、そのステップで移動したベクトル距離の大きさが、ある許容値よりもわずかに小さいときに終了することができTOLます。または、終了ステップでの関数値の減少が、許容値よりもわずかに小さいことを要求することもできますFTOL。...

上記の基準のいずれかが、何らかの理由でどこにも到達できなかった単一の異常なステップによってだまされる可能性があることに注意してください。したがって、最小値を見つけたと主張した時点で、多次元最小化ルーチンを再起動することはしばしば良い考えです。この再起動では、補助入力量を再初期化する必要があります。滑降シンプレックス法では、例えば、次の再初期化すべきであるのの式で再びシンプレックスの頂点をと、記載最小の頂点の1つです。NN+1(10.4.1)P0

再起動は非常に高価になることはありません。結局のところ、アルゴリズムは再起動ポイントに一度収束したので、すでにそこからアルゴリズムを開始しています。

[290-292ページ。]

コードは、このテキストに付随する数値レシピは「分数小さい」の意味を明確に:値の差としきい値よりも(関数の引数または値のいずれかの値)「分別小さい」である場合xyT>0

(1)|x||y|f(x,y)=2|x||y||x|+|y|<T

f(x,y)=(|x|+|y|)/2

の左側は、「相対絶対差」として知られています。一部のフィールドでは、「相対パーセント誤差」と呼ばれるパーセントで表されます。その他のオプションと用語については、相対的な変化と差異に関するWikipediaの記事を参照してください。(1)

参照

ウィリアムH.プレス数値レシピ:科学的コンピューティングの芸術。 ケンブリッジ大学出版局(1986)。最新版については、http://numerical.recipes/にアクセスしてください。


1
再起動についての洞察をありがとう。これはさまざまな開始点からアルゴリズムを実行しているだけだと思いましたが、実際にはそれだけではないようです。
JAD

「再開」の可能な意味については、今まで考えていませんでした。現在の状況では、「再起動」に「研磨」などの用語を使用した可能性がありますが、それも正しくない可能性があります。シンプレックス法に推奨されている「再起動」の種類は、それに対してかなり特別な場合があります。
whuber

9

完全な回答ではありませんが、コメントには長すぎるため、正しい方向に進む可能性があります。

このトピックは、John C. Nash著の「Compact Numerical Methods for Computers」第2版の171ページで簡単に扱われています。そして、たまたまRのoptim()関数に実装されたNelder-Meadルーチンについて引用されたリファレンスです。関連部分を引用:

したがって、最小化アルゴリズムに関する最も厄介な質問に対処する必要があります。最小値はいつ見つかりましたか?ネルダーとミードは、関数値の「標準誤差」を提案します: ここで、

test=[(i=1n+1[S(bi)S¯]2)/n]1/2
S¯=i=1n+1S(bi)/(n+1).

が最小化される関数であることを明確にするために中断しますは次元シンプレックスを定義するポイントです。関数値が最も高い点はで、関数値が最も低い点はです。ナッシュは続けます:S(.)bn+1nbHbL

手順は、テスト値が事前に割り当てられた許容誤差を下回ったときに収束したと見なされます。NelderとMeadが興味を持った統計アプリケーションでは、このアプローチは合理的です。ただし、作者は、この基準が関数表面のかなり平坦な領域の問題でプロシージャの早期終了を引き起こす可能性があることを発見しました。統計的なコンテキストでは、そのような領域が検出された場合に停止することをお勧めしますが、最小値が求められていると仮定すると、 とが等しいかどうかの簡単なテスト、つまり、シンプレックスのすべてのポイントの高さが等しいかどうかをテストします。S(bL)S(bH)

のソースをざっと見ると、optim()(シンプレックスを定義するポイントの)関数の最高値と最低値の差を使用して収束を判断していることがわかります。高値とif (VH <= VL + convtol || VL <= abstol) break;低値VHはどこにあるか VLこれには、ソースをざっと見ただけで、おそらく何かが欠けているという警告が付いています。

ここで、オプション(1)は、ナッシュが提唱する2番目のアプローチのようです。また、発生した問題についても説明します。

最後に、最小ではない点に収束することはまだ可能です。たとえば、シンプレックスのポイントがすべて1つの平面(2次元の線)にある場合、シンプレックスは次元空間で方向にしか移動できず、最小限に進むことができません。オニール(1971)は、ネルダーミードのアイデアのFORTRAN実装で、各パラメーター軸に沿って想定された最小値の両側の関数値をテストします。現在の想定最小値よりも低い関数値が見つかった場合、手順が再開されます。(n+1)(n1)n

ナッシュがここで参照する元の参照は次のとおりです。

Nelder JA、ミードR.1965。関数の最小化のためのシンプレックス法。コンピュータジャーナル7:308-313。

O'Neill R.1971。Algorithm AS 47:シンプレックス法を使用した関数の最小化。応用統計20:338-345。


3

ストローマン: 「忍耐」停止規則を使用して、最下部のコーナーのみを追跡 :

fmin(t)minall corners f(Xi,t)
# stop when you run out of patience, no improvement for say 10 iterations in a row:
if t > tbest + patience:
    message = "iter %d: f %g >= fbest %g" ...
    return message, fbest, xbest

すべてのコーナーを監視することは、妥当な座標スケーリング、制約、NM初期シンプレックスをチェックするのに非常に役立ちます。すべてのコーナーを追跡することで、n+1

  1. 問題:起伏の多い地形、おそらく悪いスケーリングまたは愚かな制約
  2. アルゴリズム、探索と移動のバランスをとる(およびソフトウェアの複雑さ)
  3. 適切な停止規則

まだ確認されていません—実際のテストケースを歓迎します。

(実際のStopiterクラスには、に加えて多くの停止条件がありpatienceます。最も単純なのは実時間です。)

参照:
NLopt:Nelder-Meadを含む多くのアルゴリズム。比較が簡単です。上特に注意を参照してください するアルゴリズムを比較すると、
ダウンヒル:忍耐と停止min_improvement

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.