2014-01-13 1 views
2

나는 2 차원 함수에서 scipy의 fmin_l_bfgs_b 최적화 방법을 블랙 박스로 사용할 수 있습니다. 그라디언트는 직접 평가할 수 없으므로, 그라디언트를 근사화하는 방법은 approx_grad = True으로 설정합니다.l_bfgs 최적화 방법으로 기울기를 근사값으로 계산하는 방법

대략적인 그래디언트가 어떻게 계산되는지 알고 싶습니다. 내 생각에 각 점에서 각 차원에 대해 기울기는 전진 차이로 근사됩니다. 따라서 N 차원에서 각 점에 대해 부분 도함수를 구하기 위해 N 개의 평가가 수행됩니다. 이 올바른지?

답변

5

코비안 근사로 이루어진다 scipy.optimize.approx_fprime 함수 docs :

 f(xk[i] + epsilon[i]) - f(xk[i]) 
f'[i] = --------------------------------- 
        epsilon[i] 
엡실론이 paramether가

은 엡실론 fmin_l_bfgs_b하는

:

스텝 사이즈가 사용 플로트 때 approx_grad 수치 계산을 위해서는 참입니다. g 그라디언트

+0

내 추측은 맞을 것 같아요 .N 포인트는 N을 치수의 수입니다 크기 벡터 x) –

1

나는 scipy가 특히 그것을 어떻게하는지 모르겠다. 인기있는 방법은 다음과 같이 그들을 계산하는 것입니다 :

(F를 (X + E) -f (XE)/(2 * E) (분명히 여기에 어떤 라텍스 지원)

이이 차에 당신이 최대 정확도를 제공합니다 용어 (그냥 각 용어에 대한 테일러 확장을 계산하고 그들을 빼십시오)

관련 문제