Nelder Mead의 기준 중지


11

함수 최적화를 위해 Nelder-Mead 알고리즘을 구현하려고합니다. Nelder-미드에 대한 위키 페이지 의 정지 기준을 제외하고, 전체 알고리즘에 대한 놀라 울 정도로 분명하다. 슬프게도 다음과 같이 말합니다.

수렴을 확인하십시오 [설명 필요] .

나는 두 가지 기준을 직접 시도하고 테스트했다.

  • 중지하면 에프(엑스+1)에프(엑스1)<ϵ 여기서 ϵ 작고, 여기서 은 IS 번째 정점 낮은 (주문할 단방향의 하이로) ( ) 함수 값. 즉, 심플 렉스의 최대 값이 최소값과 거의 같은 경우. 이것이 함수가 심플 렉스 내부에서 수행하는 작업에 대해 보장하지 않기 때문에 이것이 제대로 작동하지 않는다는 것을 알았습니다. 예를 들어, 함수를 고려하십시오.엑스나는나는에프(엑스1)에프(엑스+1)

    에프(엑스)=엑스2
    이것은 물론 최적화하기는 쉽지 않지만 NM을 사용 하여이 작업을 수행하고 두 개의 단일 점을 및 이라고 가정 해 봅시다 . 알고리즘은 최적을 찾지 않고 여기에 수렴합니다.x1=1x2=1
  • 두 번째 옵션은 단면의 중심 평가가 포함됩니다 정지를하는 경우 |f(x1)f(xc)|<ϵ . 이것은 심플 렉스와 중심의 가장 낮은 점이 이와 유사한 값을 갖는 경우 심플 렉스는 수렴을 호출하기에 충분히 작다고 가정합니다.

이것이 수렴을 확인하는 적절한 방법입니까? 아니면 이것을 확인하는 기존의 방법이 있습니까? 대부분의 검색 히트는 알고리즘의 복잡성에 중점을두기 때문에 이에 대한 소스를 찾을 수 없습니다.


1. 그것은 왜에 무슨 비교하고 나에게 분명하지 않다 X 1 ; 반드시 x N 에서 일어나는 것과 비교하고 싶을 것 입니다. 2. 수렴 점검은 많은 최적화에서 특히 까다로운 영역입니다. 함수가 많이 변하지는 않지만 인수가 빠르게 변하는 경우 (함수가 거의 변하지 않더라도) 수렴하지 않았을 수 있으므로 사람들은 종종 두 가지를 모두 고려하는 기준을 사용합니다. 또한 상대 기준 또는 절대 기준 중 어느 것을 사용하는지에 대한 문제도 있습니다 (예 : 0에 매우 근접한 상대 테스트는 트리거되지 않습니다)xN+1x1xN
Glen_b -Reinstate Monica

3
Nelder Mead의 가장 좋은 정지 기준은 시작하기 전에입니다.
Mark L. Stone

@Glen_b의 의견에서 혼동 wrt 표기법을 피하기 위해 ... 여기의 아래 첨자는 알고리즘의 반복이 아니라 단순한 정점을 참조한다고 생각합니다. 따라서이 질문에서 제안 된 첫 번째 수렴 기준은 차원 매개 변수 공간 에서 정점의 가장 낮은 함수 값과 가장 높은 함수 값을 비교합니다 ... 문제에 명시 적으로 언급되어 있지는 않지만 연결된 위키 백과 페이지의 알고리즘에 대한 설명 ( 그리고 원래의 논문에서) N + 1 정점을 가장 낮은 기능 값에서 가장 높은 값으로 정렬하십시오 . NN+1
네이트 교황

@NatePope 그게 제 의도였습니다. 질문에 설명을 추가하겠습니다. \
JAD

답변:


6

Numerical Recipes 의 원본 버전에서이 "다운 힐 심플 렉스 알고리즘"에 대한 설명 은 특히 ​​명확하고 도움이됩니다. 따라서 관련 부분을 인용하겠습니다. 배경은 다음과 같습니다.

1 차원 최소화에서 최소한의 브라켓을 만들 수있었습니다. 아아! 다차원 공간에는 유사한 절차가 없습니다. ... 우리가 할 수있는 최선은 알고리즘에 시작 추측을주는 것입니다. 즉, 시도 할 첫 번째 지점으로 독립 변수로 구성된 벡터입니다. 그런 다음 알고리즘은 (최소한 로컬) 최소값에 도달 할 때까지 상상할 수없는 N 차원 지형의 복잡성을 통해 내리막 길을 내 립니다.

다운 힐 심플 렉스 방법은 단일 점뿐만 아니라 초기 심플 렉스를 정의하는 점 으로 시작해야합니다 . [참고 초기 시작점으로 이러한 점을 취할 수 P 0 과 함께] P = P 0 + λ E I 여기서 E I 의 인 N의 단위 벡터와 여기서 λ는 문제의 특성중인 추측 상수되는 길이 스케일. ...+10

(10.4.1)나는=0+λ이자형나는
이자형나는λ

대부분의 단계는 단순의 반대면을 통해 함수가 가장 큰 단순 점 ( "가장 높은 점")을 아래쪽 점으로 [이동]합니다. ...

이제 당면한 문제에 대해 알고리즘을 종료하십시오. 계정의 일반성에 유의하십시오. 저자는 다차원 옵티 마이저 를 종료 하는 데 직관적이고 유용한 조언을 제공 하고이 알고리즘이이 알고리즘에 어떻게 적용되는지 구체적으로 보여줍니다. 첫 번째 단락은 우리 앞에있는 질문에 대한 답입니다.

종료 기준은 섬세 할 수 있습니다. 우리는 일반적으로 다차원 알고리즘의 하나의 "사이클"또는 "단계"를 식별 할 수 있습니다. 그런 다음 해당 단계에서 이동 한 벡터 거리가 일부 허용 오차보다 조금 작은 경우 종료 할 수 있습니다 TOL. 대안으로, 종료 단계에서 함수 값의 감소가 일부 공차보다 부분적으로 작을 것을 요구할 수 있습니다 FTOL. ...

위의 기준 중 하나는 어떤 이유로 든 다른 곳에서는 도달하지 못한 단일 예외 단계에 의해 속일 수 있습니다. 따라서 최소값을 찾은 시점에서 다차원 최소화 루틴 을 다시 시작 하는 것이 좋습니다 . 다시 시작하려면 보조 입력 수량을 다시 초기화해야합니다. 다운 힐 심플 렉스 법에서는, 예를 들어, 재 초기화해야 N + 1 개 식으로 다시 단면의 정점 ( 10.4.1 ) 로, P 0 청구 최소의 정점 중 하나 인.+1(10.4.1)0

재시작은 매우 비싸지 않아야합니다. 결국 알고리즘은 재시작 지점으로 한 번 수렴했으며 이제 알고리즘을 이미 시작했습니다.

[페이지 290-292.]

이 텍스트에 첨부 된 부호 수치 조리법 '분별 작은 "의 의미를 명확히 : 차이 값 Y (두 값 인수 또는 함수의 값)이 임계 값보다"단편적 작은 "인 T > 0엑스와이>0

(1)|엑스||와이|에프(엑스,와이)=2|엑스||와이||엑스|+|와이|<

에프(엑스,와이)=(|엑스|+|와이|)/2

(1)

참고

William H. Press et al. , 수치 레시피 : 과학 컴퓨팅 기술. 케임브리지 대학 출판부 (1986). 최신 버전은 http://numerical.recipes/ 를 방문하십시오 .


1
다시 시작에 대한 통찰력에 감사드립니다. 나는 이것이 다른 출발점에서 알고리즘을 실행하고 있다고 생각했지만 실제로는 더 많은 것으로 보입니다.
JAD

나는 "다시 시작"의 가능한 의미에 대해 이전에 생각하지 못했습니다. 현재 상황에서 "다시 시작"에 "연마"와 같은 용어를 사용했을 수도 있지만 아마도 그다지 정확하지 않을 수도 있습니다. 심플 렉스 방법에 대해 옹호 된 "다시 시작"은 다소 특별 할 수 있습니다.
whuber

9

완전한 답변은 아니지만 의견이 너무 길어서 올바른 길로 안내 할 수 있습니다.

이 항목은 John C. Nash의 "컴퓨터의 컴팩트 숫자 방법"2 판의 171 페이지에서 간단히 다루고 있습니다. 그리고 R의 optim()함수로 구현 된 Nelder-Mead 루틴에 인용 된 참조가 됩니다. 관련 부분 인용 :

이자형에스=[(나는=1+1[에스(나는)에스¯]2)/]1/2
에스¯=나는=1+1에스(나는)/(+1).

에스(.)+1H

에스()에스(H)

출처를 간략히 살펴보면optim() 가장 높은 함수 값과 가장 낮은 함수 값의 차이 (단일을 정의하는 점의 차이)를 사용하여 수렴을 결정할 수 있습니다. 높은 값과 낮은 값 은 if (VH <= VL + convtol || VL <= abstol) break;어디에 있습니까 ? 이것은 내가 소스를 매우 빨리 보았고 아마도 뭔가 빠졌을 것이라는 경고와 함께 제공됩니다.VHVL

이제 귀하의 옵션 (1)은 Nash가 옹호하는 두 번째 접근법 인 것으로 보입니다. 또한 발생한 문제에 대해서도 설명합니다.

(+1)(1)

내쉬가 여기에 언급 한 최초의 참고 문헌은 다음과 같습니다.

Nelder JA, Mead R. 1965. 함수 최소화를위한 단순한 방법. 컴퓨터 저널 7 : 308-313.

O'Neill R. 1971. Algorithm AS 47 : 심플 렉스 절차를 사용한 함수 최소화. 응용 통계 20 : 338-345.


3

에프()모든 구석 에프(엑스나는,)
# 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

+1

  1. 문제 : 거친 지형, 아마도 잘못된 스케일링 또는 바보 같은 제약 조건
  2. 알고리즘, 탐색 및 이동 균형 조정 (및 소프트웨어 복잡성)
  3. 적절한 중지 규칙

실제 테스트 사례를 환영합니다.

(실제 Stopiter클래스에는 정지 조건이 많으며 patience벽시계 시간이 가장 간단합니다.)

참조 :
NLopt가 : Nelder-미드 등 많은 알고리즘이 쉽게 비교 할 수 있습니다. 내리막 알고리즘 비교에 대한 참고 사항을 참조하십시오 .
min_improvement

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