매우 고가의 목적 함수 문제에 대한 병렬 최적화 알고리즘


15

10-20 변수의 함수를 최적화하고 있습니다. 나쁜 소식은 각 함수 평가가 약 30 분의 직렬 계산으로 비싸다는 것입니다. 좋은 소식은 내가 수십 개의 계산 노드를 가진 클러스터를 가지고 있다는 것입니다.

따라서 모든 계산 능력을 효율적으로 사용할 수있는 최적화 알고리즘이 있습니까?

스펙트럼의 한쪽에는 철저한 검색이 있습니다. 전체 검색 공간을 미세 그리드로 세분화하고 각 그리드 포인트에서 독립적으로 함수를 계산합니다. 이것은 확실히 병렬 계산이지만 알고리즘은 끔찍하게 비효율적입니다.

스펙트럼의 반대편에는 유사-뉴턴 알고리즘이 있습니다. 이전 히스토리를 기반으로 매개 변수의 다음 추정값을 지능적으로 업데이트합니다. 이것은 효율적인 알고리즘이지만, 병렬화 방법을 모르겠습니다. "이전 히스토리에 기초한 파라미터 추정"의 개념은 직렬 계산처럼 들립니다.

이차 알고리즘은 중간에 어딘가에있는 것 같습니다. 많은 값을 병렬로 계산하여 초기 "대리 모델"을 만들 수는 있지만 나머지 반복이 병렬화 가능한지 여부는 알 수 없습니다.

어떤 종류의 그라디언트 프리 최적화 방법에 대한 제안이 클러스터에서 잘 수행됩니까? 또한 현재 사용 가능한 최적화 알고리즘의 병렬 구현이 있습니까?


1
유한 차이를 사용하는 유사 뉴턴 방법의 경우 항상 병렬로 기울기를 계산하고 매개 변수 수 (예 : 10x-20x)에 비례하여 속도를 높일 수 있습니다.
stali

@ stali : 최적화에서 준 뉴턴 방법을 위해서는 Hessian이 필요합니다. 함수 평가의 유한 한 차이를 통해 Hessian을 계산하는 것은 실제로 좋은 생각이 아닙니다. 최적화를위한 그래디언트의 유한 차이 근사값을 계산하는 것도 일반적으로 좋은 생각이 아닙니다.
Geoff Oxberry

BFGS와 같은 많은 유사 뉴턴 방법에는 명시 적으로 헤 시안이 필요하지 않습니다. 나는 그라디언트를 L-BFGS와 함께 사용하여 OP가 원하는 것을 빨리 얻을 수 있다고 생각합니다.
stali

@ stali : 그라디언트에 유한 차분 근사를 사용하는 것이 내 대답에 나쁜 생각이되는 이유를 지적했습니다. 유사 뉴턴 반복의 오른쪽에 오류를 도입하여 수렴을 저하시킵니다. 또한 대리 방법과 달리 이전 평가를 재사용 할 기회가 없기 때문에 함수 평가가 낭비됩니다. BFGS를 사용하면 제안 된 접근 방식의 절반 문제 만 해결합니다.
제프 옥스 베리

이것은 대답이 아닌 주석입니다. 그러나 의견을 게시하기에 충분한 담당자가 없기 때문에 선택의 여지가 없습니다. 마이클, 저는 비슷한 유형의 문제가 있습니다 : 클러스터에서 실행되는 복잡한 시뮬레이션을 포함하는 고가의 함수 평가. 함수 평가에 클러스터 시뮬레이션이 포함 된 경우 최적화 실행에 적합한 코드를 찾은 적이 있습니까?
MoonMan

답변:


16

바울은 더 많은 정보가 없으면 가정없이 조언을하기가 어렵다고 말합니다.

10-20 개의 변수와 값 비싼 함수 평가를 사용하면 파생이없는 최적화 알고리즘을 권장하는 경향이 있습니다. Paul의 조언에 강력하게 동의하지 않을 것입니다. 특별한 방법을 사용하지 않는 한 일반적으로 기계 정밀도 그라디언트가 필요합니다 (예 : 기계 학습의 확률 적 그라디언트 하강은 합리적인 형태로 목표의 형태를 이용합니다) 구배 추정치).

각 준-뉴턴 단계는 다음과 같은 형식입니다.

H~(엑스케이)케이=에프(엑스케이),

여기서 는 Hessian 행렬의 근사값이고, d k 는 탐색 방향이며, x k 는 현재 반복에서 결정 변수의 값이고, f 는 목적 함수이며, f 는 목표의 기울기입니다. 결정 변수는 x k + 1 = x k + α k d k 와 같이 업데이트됩니다 . 여기서 α kH~케이엑스케이에프에프엑스케이+1=엑스케이+α케이케이α케이(라인 검색과 같은) 어떤 방식으로 결정된 단계 크기입니다. 정확한 기울기를 통해 Hessian의 유한 차분 근사값과 같은 것을 사용하면 잘못된 조건으로 인해 문제가 발생할 수 있지만 특정 방식으로 Hessian 근사값을 제거하면 반복이 수렴됩니다. 일반적으로 Hessian은 기울기를 사용하여 근사화됩니다 (예 : Hessian에 순위 1 업데이트가있는 BFGS 유형 방법).

유한 한 차이를 통해 Hessian과 기울기를 근사화하는 것은 여러 가지 이유로 나쁜 생각입니다.

  • 그래디언트에서 오류가 발생하므로 적용하는 유사 뉴턴 방법은 노이즈 함수의 근을 찾는 것과 유사합니다
  • 그래디언트에 오류가 있으면 Hessian에서 더 많은 오류가 발생합니다. 이는 선형 시스템의 컨디셔닝 측면에서 큰 문제입니다.
  • ... 비용이 듭니다.2

따라서 quasi-Newton을 한 번 잘못 반복하려면 평가 당 30 분에 최대 420 개의 함수 평가와 같은 작업을 수행하게됩니다. 즉, 각 반복마다 시간이 걸리거나 기능 평가를 위해 큰 클러스터가 필요합니다. 실제 선형 해는 20 x 20 행렬 (최대!)이되므로이를 평행화할 이유가 없습니다. 예를 들어 인접 문제를 해결하여 그라디언트 정보를 얻을 수 있다면 더 가치가있을 수 있습니다.이 경우 Nocedal & Wright와 같은 책을 보는 것이 좋습니다.

병렬로 많은 함수 평가를 수행하려는 경우, 유사-뉴턴 접근 방식을 고려하기 전에 대리 모델링 접근 방식을 보거나 세트 검색 방법을 생성해야합니다. 고전적인 리뷰 논문은 Rios와 Sahinidis 가 2012 년에 발표 한 파생물이없는 방법에 관한 기사로, 실제로는 훌륭하고 광범위하게 비교됩니다. 2009 년 More and Wild 의 벤치마킹 기사 ; Conn, Scheinberg 및 Vicente의 2009 교과서 "도함이없는 최적화 소개"; 2003 년부터 Kolda, Lewis 및 Torczon의 세트 검색 방법 생성에 대한 검토 기사 .

위에서 링크 된 바와 같이 DAKOTA 소프트웨어 패키지 는 이러한 메소드 중 일부 를 구현하며 DIRECT를 구현하는 NLOPT 및 일부 Powell 대리 모델링 메소드도 구현합니다. MCS를 살펴볼 수도 있습니다 . MATLAB으로 작성되었지만 MATLAB 구현을 선택한 언어로 이식 할 수 있습니다. DAKOTA는 본질적으로 고가의 시뮬레이션을 실행하고 최적화 알고리즘을위한 데이터를 수집하는 데 사용할 수있는 스크립트 모음이며, NLOPT에는 많은 언어로 인터페이스가 있으므로 소프트웨어 언어 선택은 소프트웨어 패키지를 사용하는 데 큰 문제가되지 않습니다. 그러나 DAKOTA는 배우는 데 시간이 걸리고 엄청나게 많은 문서가 있습니다.


2
내가 완전히 잘못되어 프로세스에서 새롭고 유용한 것을 배우는 것은 즐거움입니다 :).
Paul

감사! 한 가지 더 설명하면, 어떤 알고리즘이 기능 평가를 병렬로 수행 할 수 있습니까? 예를 들어 k-way 그리드에서 반복 1, ..., n에서 얻은 정보만을 기반으로 반복 n + 1, ..., n + k를 수행합니까?
Michael

케이

3

아마도 대리 기반 최적화 알고리즘이 당신이 찾고있는 것입니다. 이 알고리즘은 대리 모델을 사용하여 최적화 과정에서 실제 계산 비용이 높은 모델을 대체하고 계산 비용이 많이 드는 모델의 평가를 가능한 적게 사용하여 적절한 솔루션을 얻습니다.

Mode Pursuing Sampling 방법을 사용하여 문제를 해결할 수 있다고 생각합니다 . 이 알고리즘은 RBF 대체 모델을 사용하여 값 비싼 목적 함수를 근사하고 비선형 구속 조건을 처리 할 수 ​​있습니다. 더 중요한 것은 고가의 기능 평가를 수행하기 위해 여러 후보를 선택하여 병렬 컴퓨팅을 위해 이러한 후보를 분배하여 검색 프로세스의 속도를 높일 수 있다는 것입니다. 이 코드는 오픈 소스이며 MATLAB으로 작성되었습니다.

참고

Wang, L., Shan, S., & Wang, GG (2004). 고가의 블랙 박스 기능에 대한 글로벌 최적화를위한 모드 추구 샘플링 방법. 공학 최적화, 36 (4), 419-438.


2

병렬 알고리즘이 실제로 원하는 것인지 확실하지 않습니다. 매우 비용이 많이 드는 기능 평가입니다. 당신이하고 싶은 것은 반드시 최적화 알고리즘이 아니라 함수 자체를 병렬화하는 것입니다.

그렇게 할 수 없다면 철저한 검색과 뉴턴 알고리즘 사이의 중간 지점이 몬테카를로 방법입니다. 여러 가지 다른 코어 / 노드에서 로컬 알고리즘 (예 : 유사 뉴턴 알고리즘)에 빠지기 쉬운 동일한 알고리즘을 시작할 수 있지만 모두 임의의 초기 조건이 있습니다. 진정한 최적화에 대한 최선의 추측은 최소값의 최소값입니다. 이것은 병렬화하기 쉽지 않으며 모든 방법을 확장하는 데 사용할 수 있습니다. 완벽하게 효율적이지는 않지만, 충분한 컴퓨팅 성능이 있다면 프로그래밍 생산성 대 알고리즘 성능 전투에서 승리 할 수 ​​있습니다.


0

최적화 알고리즘 (따라서 병렬화)의 선택은 목적 함수의 특성과 제약에 크게 좌우됩니다. 문제에 대해 더 많이 알지 못하면 의미있는 조언을하기가 어렵습니다.

그러나 뉴턴 방법을 고려할 때, 나는 당신의 목적 함수가 차별화 될 수 있다고 추론합니다. 가능하면 함수 평가를 병렬화하면 문제가 크게 도움이됩니다. 가능하지 않으면 정확한 기울기 / 헤 시안을 유한 차분 근사로 대체하는 부정확 한 뉴턴 방법을 고려할 수도 있습니다. 그런 다음 @stali가 제안한 것처럼 모든 프로세서를 자유롭게 사용하여 jacobian의 0이 아닌 각 요소를 계산할 수 있습니다.

자세한 내용은 Nocedal & Wright의 Numerical Optimization, Chapter 7을 참조하십시오 . 이것을 병렬로 구현하는 많은 최적화 소프트웨어 패키지가 있습니다. 가장 널리 사용되는 프리웨어 중에는 DAKOTA 소프트웨어 패키지 (Sandia National Labs)가 있습니다.


5

-2

다음은 문제에 대한 해결책 입니다.

논문 에서는 수학적 방법에 대한 설명을 제공 합니다 .


3
SciComp.SE에 오신 것을 환영합니다. 이 백서에서 설명하고 소프트웨어로 구현 된 접근 방식에 대한 세부 정보를 제공 할 수 있습니까? 사용 된 방법은 무엇입니까? 왜 좋은가요? 이 접근법에서 다른 답변이 다루지 않는 것은 무엇입니까?
nicoguaro

2
또한 이것은 당신의 일인 것 같습니다. 그것이 사실이라면, 귀하의 답변에 명시 적으로 기재하십시오.
nicoguaro

@nicoguaro : 감사합니다. 그러나 링크를 클릭하는 방법을 알고 있습니다.
Michael

2
@ 마이클, 그것은 당신을위한 것이 아닙니다. 이 사이트의 철학은 답변 모음입니다. 오늘 답변을 얻고 있지만 앞으로 다른 사람도 같은 도움이 필요할 수 있습니다. 이것이 좋은 답변이 무엇인지에 대한 표준 이있는 이유 입니다.
nicoguaro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.