現在、最小化の問題を数値的に解決しようとしており、SciPyで利用可能な最適化ライブラリを使用しようとしました。SciPy fmin_bfgs精度損失を扱う
My機能および誘導体はどちらか、動作しないうち最小化ここに提示することには少しあまりにも複雑であるが、それらは以下の機能に基づいています:
def func(x):
return np.log(1 + np.abs(x))
def grad(x):
return np.sign(x)/(1.0 + np.abs(x))
fmin_bfgs関数を呼び出すときに(と降下方法をx = 10に初期化すると、次のメッセージが表示されます。
Warning: Desired error not necessarily achieved due to precision loss.
Current function value: 2.397895
Iterations: 0
Function evaluations: 24
Gradient evaluations: 22
出力は10(つまり初期点)です。
目的関数は凸ではない:私は他の非凸関数で確認し、この方法は私に正しい結果を与えたが、私はこのエラーは二つの問題によって引き起こされる可能性があるとします。
目的関数は、ログのために最小値から遠く離れていると「非常にフラット」です。
私の仮定は正しいですか?あるいは、問題は他の何かから来ていますか? エラーが何であっても、これを修正するには何ができますか?特に、他に利用可能な最小化メソッドがありますか?
ありがとうございます。
「np.abs(x)」を[ここ](http://math.stackexchange.com/questions/728094/approximate-x-with-a-smooth-news)で議論されているような微分可能な近似で置き換えることができます。関数)。例えば、 'func'が' np.log(1 + np.sqrt(x ** 2 + 10 ** - 10)) 'を返すとき、最適化は問題ありません。 – Stelios
確かに!このアドバイスをありがとうございます!私はいくつかの検証を行いましたが、誤差は0の絶対値の非導出性から来ているようです。 – PAM