올바른 최적화 알고리즘을 선택하는 방법은 무엇입니까?


16

함수의 최소값을 찾아야합니다. http://docs.scipy.org/doc/scipy/reference/optimize.html 에서 문서 읽기 동일한 작업을 수행하는 최소 몇 가지 알고리즘이 있습니다. 어떤 것을 선택해야하는지 어떻게 알 수 있습니까?

나열된 알고리즘 중 일부

  • 다운 힐 심플 렉스 알고리즘을 사용하여 함수를 최소화하십시오.
  • BFGS 알고리즘을 사용하여 기능을 최소화하십시오.
  • 비선형 켤레 그라디언트 알고리즘으로 함수를 최소화하십시오.
  • Newton-CG 방법을 사용하여 기능 f를 최소화하십시오.
  • 수정 된 파월 방법을 사용하여 기능을 최소화하십시오.

내 기능은 선형입니다. 차원은 약 232750 (매번 계산 해야하는 다른 그라디언트 수)이며 그라디언트와 비용을 한 번 계산하는 데 약 2 분이 걸리므로 저렴하지 않습니다. 나는 제약이 없다고 생각합니다. 결정적이고 지속적입니다.


글쎄, 당신은 문제의 본질을 조사해야합니다 : 그것은 선형입니까, 그렇지 않습니까? 그것의 차원은 무엇입니까? 비용 함수는 평가하기에 저렴합니까? 파생 상품을 분석적으로 또는 저렴하게 평가할 수 있습니까? 제약이 있습니까? 제약이있는 경우 제약이없는 문제를 쉽게 작성할 수 있습니까? 이 문제에 대해 더 자세히 설명하십시오.
usεr11852는 Reinstate Monic이

@ user11852 선형입니다. 차원은 약 50 개의 기능이며, 그래디언트와 비용을 한 번 계산하는 데 약 2 분이 소요되므로 저렴하지는 않습니다. 나는 제약이 없다고 생각합니다.
siamii

여기서 "선형"이 무슨 뜻인지 잘 모르겠습니다. 문제가 선형이면 그래디언트는 일정하고 계산하기에 저렴합니다. 목적 함수가 선형이고 제약 조건이없는 경우 최소값은-무한 (또는 0)입니다.
paul

@paul : 최적화 선형성은 일반적으로 함수 자체가 아니라 제약 조건을 나타냅니다. 나는 기능의 평활도와 관련하여 "선형성"을 잘못 언급했으며 OP가 언급 한 것입니다. 내 대답에서 나는 그가 어쨌든 "연속적"이라고 말한 사실에 주로 근거했다.
usεr11852는

답변:


14

당신이 말한 것을 기반으로 : 나는 당신이 50 개의 변수를 최적화해야한다고 가정합니다. 또한 분석 파생 상품을 찾는 데 비용이 많이 들고 (숫자 만 알아낼 수는 없음) 최적화가 제한되지 않는 상황이라고 가정합니다.

스트레스를 줄이자, 당신은 불행히도 25-30에서 100 사이의 변수를 유발합니다. 대규모 또는 소규모 최적화 루틴 중에서 선택할 때 약간의 황혼 지대입니다. 그럼에도 불구하고 아무것도 잃어 버리지 않습니다.

1 차 도함수조차도 그 종류를 없애는 데 비용이 많이 들기 때문에 뉴턴의 방법에 대한 아이디어를 죽입니다. Hessian이 약간 대각선으로 시작하는 경우 Quasi-Newton (BFGS)과 함께 운이 좋을 수도 있습니다. CG는 일반적으로 BFGS보다 약간 느리므로 아마도 많은 것이 향상되지는 않을 것입니다. 메모리도 문제가있는 경우 사용하십시오 (또는이 경우 L-BFGS를 사용하십시오). 또한 함수를 평가하는 속도가 느리면 가장 가파른 하강 / 라인 검색 알고리즘은 엄청나게 느립니다. Simulated Annealing 및 기타 임의 검색 변형도 마찬가지입니다 (HMC 및 모든 재즈에 액세스 할 수 없다고 가정합니다).

따라서 단일 기능 평가와 관련하여 벅을위한 최상의 강타가 필요할 때 : Powell의 방법으로 이동하여 COBYLA를 테스트하십시오. 제한적인 최적화 알고리즘 임에도 불구하고 사물의 속도를 높이기 위해 함수의 기울기와 근사 적으로 선형화하기 때문에 함수의 선형성을 활용할 수 있습니다. 또한 확실히 하려고 파이썬 NLopt을 . 그라디언트가없는 옵티마이 저가 많이 있습니다. UOBYQA를 시도하십시오. 그것은 파월의 두뇌의 자식이기도합니다 (제곱 근사에 의한 제약없는 최적화).

아주 간단히 : N-CG 알고리즘은 Hessian 계산에 의존하며, Hessian은 계산하는 데 비용이 많이 드는 것 같습니다. NLCG와 BFGS는 첫 단계에서 한 번 계산하려고 시도 할 수 있지만 필요하지 않습니다.

심플 렉스 알고리즘은 완전히 다른 짐승이기 때문에 의도적으로 생략했습니다. 그래디언트와는 아무런 관련이 없습니다. 그것을 시도하지만 그것에 대해 실제로 언급 할 수는 없습니다. 그것은 실제로 문제의 본질에 달려 있습니다.

수치 최적화에 대한 첫 번째 좋은 참고 자료를 보려면 CTKelly의 책 ' Iterative Methods for Optimization '을 참조하십시오 .


향후 참조를 위해 : Stackexchange에서 Computational Science 베타를 확인하여 비슷한 질문을 할 수 있습니다.
usεr11852는 Reinstate Monic이

답변 해주셔서 감사합니다. 사실, 내 차원은 232,750입니다. 이것은 매번 계산하는 그라디언트 수입니다. GPU에서 함수 평가 및 그라디언트 계산을 수행합니다. NLopt와 호환됩니까?
siamii

GPU에서 NLopt를 사용하지는 않았지만 호환성과 관련하여 문제가되는 분명한 이유는 없습니다. GPU와의 I / O 작업이 빈번하지만 문제가 있다고 생각할 수도 있습니다.
usεr11852는 Reinstate Monic이

@ usεr11852, 선형 회귀 비용 함수의 최소화를위한 기울기 하강 및 QR 분해 방법 비교를 논의 할 수 있습니까? 별도의 질문을해야합니까?
박사 Nisha 아 로라

@ DrNishaArora : 그렇습니다. 별도의 질문에 적합합니다. 폐쇄 형 수학 솔루션을 사용할 수있는 경우 선형 회귀에 그래디언트 디센트를 사용 하는 이유 스레드를 참조하십시오 . 중복을 피하기 위해!
usεr11852는 Reinstate Monic이

1

수치 최적화에 대한 소개 책을 구해야 할 수도 있습니다. 알고리즘을 결정하려면 함수를 고려해야합니다.

언급 한 알고리즘 중에서 중요한 차이점은 Jacobian 또는 Hessian이 필요한지 아니면 함수 자체 만 필요한지입니다.

이 사이트 가 통계 Q & A 사이트이므로 임의의 변수를 처리 한다는 점을 고려 하십시오. 함수가 결정적인지 확인하여 검색 공간에서 지속적인 결과를 산출하는 방식으로 평가할 수 있는지 확인하십시오.


결정적이고 지속적입니다.
siamii
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.