一般的な注意から始めましょう:1次情報(つまり、勾配をエンコードする勾配のみを使用)は方向情報のみを提供できます:これは、関数の値が検索方向に減少することを通知できますが、時間の長さは通知できません。検索方向に沿ってどこまで行くかを決定するには、追加情報が必要です(一定のステップ長の勾配降下は、凸2次問題の場合でも失敗する可能性があります)。このため、基本的に2つの選択肢があります。
- たとえば、勾配降下の代わりにニュートン法を使用することで(曲率をエンコードする)2次情報を使用します(常に、最小化器に十分に近いステップ長使用できます)。1
- 試行錯誤(もちろん、Armijoなどの適切な行検索を使用することを意味します)。
あなたが書いているときに二次導関数にアクセスできず、関数obejctiveの評価に非常にコストがかかる場合、唯一の望みは妥協することです。十分な近似の二次情報を使用して、次のような適切な候補ステップ長を取得します。検索は評価のみを必要とします(つまり、勾配を評価するために必要な労力の最大で(小さい)定数倍)。O(1)
1つの可能性は、Barzilai--Borweinのステップ長を使用することです(例 :Fletcher:On the Barzilai-Borwein method。Optimization and control with applications、235–256、Appl。Optim。、96、Springer、New York、2005)。アイデアは、探索方向に沿った曲率の有限差分近似を使用して、ステップサイズの推定値を取得することです。具体的には、任意の選択し、を設定してから、:gで0:=α0>0K = 0 、。。。g0:=∇f(x0)k=0,...
- 集合及びX K + 1 = X K + S Ksk=−α−1kgkxk+1=xk+sk
- 評価及びセットY 、K = G K + 1 - G Kgk+1=∇f(xk+1)yk=gk+1−gk
- セットαk+1=(yk)Tyk(yk)Tsk
この選択は、2次関数に対して(実際には非常に迅速に)収束するように示されますが、収束は単調ではありません(つまり、関数値はより大きくなる可能性があります。しかし、たまにしかありません。フレッチャーの論文の10ページのプロットを参照してください)。非二次関数の場合は、これをラインサーチと組み合わせる必要があります。これは、非単調性を処理するように変更する必要があります。1つの可能性は、とように、(たとえば、バックトラックにより)。
ここでは典型的なArmijoパラメータとF (X 、K)σ K ∈ (0 、α - 1、K)F (X 、K - σ K G 、K)≤ maxの最大値(K - M 、1 )≤ J ≤ K G 、K、γ ∈ (0f(xk+1)f(xk)σk∈(0,α−1k)
f(xk−σkgk)≤maxmax(k−M,1)≤j≤kf(xj)−γσk(gk)Tgk,
M M = 10γ∈(0,1)M単調性の程度を制御します(例:)。関数値の代わりに勾配値を使用するバリアントもありますが、あなたの場合、勾配は関数よりも評価するのにさらにコストがかかるため、ここでは意味がありません。(注:もちろん、BBのステップ長を盲目的に受け入れて運を信頼することもできますが、コメントに書いたように、何らかの堅牢性が必要な場合は、これは非常に悪い考えです)。
M=10
別の(そして、私の意見では、はるかに良い)アプローチは、探索方向の計算で既にこの有限差分近似を使用することです。これは、準ニュートン法と呼ばれます。アイデアは、勾配の差を使用して、ヘッセ行列近似を段階的に構築することです。たとえば、(単位行列)を取り、 solve
と
を上記のおよび。(これはブロイデン更新と呼ばれますH 0 = 私はdは kは= 0 、... 、H 、K、S 、K = - G K、 HのK + 1 = HのK + (Y K -∇2f(xk)H0=Idk=0,…
Hksk=−gk,(1)
ykxk+1Hk+1=Hk+(yk−Hksk)T(sk)T(sk)Tsk
ykxk+1=xk+skそして実際にはめったに使用されません。より良いが少し複雑な更新は
BFGS更新です。これについては-および詳細-NocedalおよびWrightの著書
Numerical Optimizationを参照します。)欠点は、a)各ステップで線形システムを解く必要があります(しかしあなたの場合は初期条件である未知のサイズのみのため、勾配を取得するためにPDEを解決することによって努力が支配されるべきです;また、
逆ヘッシアンの近似のための更新規則が存在し、単一の行列の計算のみが必要です-vector product)およびb)収束を保証するためにライン検索が必要です...
幸いなことに、このコンテキストでは、すべての関数評価を利用する代替アプローチが存在します。考え方は、対称で正定(BFGS更新で保証されます)の場合、解くことは、2次モデルを最小化することと同じ
で信頼領域法、あなたは追加の制約とそうであろうと、ここでは適切に選択された信頼領域の半径(ステップ長)重要なアイデアは、計算されたステップに基づいて、この半径を適応的に選択することです。具体的には、比率を見て
Hkq k(s )= 1(1)‖S‖≤ΔKΔKσKρK:=F(
qk(s)=12sTHks+sTgk.
∥s∥≤ΔkΔkσk ρKρk:=f(xk)−f(xk+sk)f(xk)−qk(sk)
関数の実際のおよび予測された減少。場合非常に小さく、あなたのモデルが悪かった、とあなたは捨てとして再度お試し。がに近い場合、モデルは良好であり、を設定してを増やします。それ以外の場合は、、をそのままにします。実際の最小化計算するためにの
ρkskΔk+1<Δkρk1xk+1=xk+skΔk+1>Δkxk+1=xk+skΔkskmin∥s∥≤Δkqk(s)、完全に制約された最適化問題を解決する必要がないようにするいくつかの戦略があります。私のお気に入りは、
シュタイハウグの切り捨てCGメソッドです。詳細については、NocedalとWrightを再度参照します。