자동 차별화와 관련하여 소스 코드 변환 (STC)이 운영자 오버로드 (OO)보다 효율적입니까?


12

우리는 시공간 프로세스를 위해 베이지안 (Bayesian) 모델을 연구하고 있으며 로그 확률에 대한 모델이 필요하고 모델 매개 변수에 대한 기울기가 필요한 NUTS (No-U-Turn No Sampler)를 사용하고 있습니다. 간결하게, 우리는 통계 분포, 크로네 커 곱, 지수, 비율, if-else 문 등을 포함하는 상당히 복잡한 로그 확률 함수 을 가지고 있으며 그것을 제공해야하며 NUTS에 대한 기울기를 제공해야합니다. 여러 패키지 ( StanJulia의 MCMC )는 운영자 과부하 (내가 아는 한)를 사용하여 그라디언트를 자동으로 얻습니다.f:RnR

소스 코드 변환 자동 차이 도구를 사용하여 자체 그라디언트 함수를 만들 수 있다면 성능이 향상되거나 OO가 나아 졌습니까?

답변:


9

소스에서 소스로의 변환은 성능 측면에서 골드 표준으로 간주됩니다. OO 접근 방식은 OO 패키지가 더 많고 성능이 중요한 단점으로 언급되지 않는다는 점에서 거의 우수합니다. 작업중 인 언어에 대해 좋아하는 OO 라이브러리를 찾으면 먼저 사용하고 소스에서 소스로 변환이 필요한지 나중에 필요한 도구가 필요한지 나중에 알아 봅니다. 자동 미분 생성 파생 상품의 일반적인 비용은 상황 평가를 위해 함수 평가 비용의 약 3 ~ 5 배입니다.

소스 간 변환을 사용하는 것보다 연산자 오버로딩을 사용하여 자동 차별화 도구를 구현하는 것이 더 쉽기 때문에 더 많은 OO 패키지가 있습니다. 소스-소스 번역기를 구현하는 것은 컴파일러 작성에있어 가장 중요한 요소입니다. 소스 코드를 구문 분석하고 토큰 화 한 다음 변환 규칙을 결과 표현식 트리에 적용해야합니다. Andreas Griewank의 책, 파생 상품 평가 : 알고리즘 차별화의 원리와 기법, 제 2 판은 트레이드 오프와 관련하여 더 자세히 설명합니다.


Geoff에게 감사드립니다. 특히 일반적인 비용 추정치에 많은 도움이됩니다.
Matthew Emmett

1

그래디언트 계산에는 AD의 역 모드를 사용합니다. 두 경우 모두 피연산자 스택을 빌드해야하며, OO 버전은 코드의 역 순회로 해석되어야하는 작업 스택도 빌드해야합니다. 소스 변환 된 코드는 역순으로 정렬 된 작업을 컴파일 된 추가 소스 코드로 작성합니다. 코드에서 연산 인터프리터를 갖는 오버 헤드는 상당 할 수 있습니다. Tapenade가 선호하는 Tapenade 생성 코드와 Adol-C의 비교가 있습니다.

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