자동 차별화는 언제 저렴합니까?


12

자동 미분을 통해 특정 입력에서 프로그램의 미분을 수치 적으로 평가할 수 있습니다. 이 계산은 원래 프로그램을 실행하는 비용의 5 배 미만의 비용으로 수행 될 수 있다는 이론이 있습니다. 이 5의 계수는 상한입니다.

어떤 상황에서이 비용을 더 줄일 수 있습니까? 대부분의 현장 파생 코드는 원래 프로그램의 속도와 거의 비슷하게 실행됩니다. 이 속도 향상을 위해 무엇을해야합니까?

계산 속도를 높이기 위해 활용 될 수있는 원래 프로그램의 특징은 무엇입니까?

계산 속도를 높이기 위해 어떤 소프트웨어 엔지니어링 기법을 사용할 수 있습니까?


1
확실히, 지수 함수 및 삼각 함수와 같은 함수 파생 ​​함수의 특수 속성을 활용하려고합니다. 거기에 많은 잠재적 인 공통 표현이 있습니다.
JM

리버스 모드 또는 포워드 모드에 대해 묻고 있습니까?
Jed Brown

나의 (제한된) 이해는 순방향과 역방향 모드가 거의 비슷한 비용을 가지고 있다는 것입니다.
MRocklin

답변:


6

AD에 대한 나의 제한된 이해는 Matt의 말과 유사합니다. 도함수의 계산 속도를 높이려면 표현 그래프의 구조가 야곱 행렬의 희소성과 희소성을 이용해야합니다. (자세한 내용 은 Griewank 의이 백서 를 참조하십시오 .) 소프트웨어 엔지니어링 기법은 AD 코드 자체에서 표현 그래프를 재구성하여 Jacobian 행렬 집합에서 이러한 속성을 활용할 수 있습니다. AD 코드가 작성중인 코드에서 식 그래프를 생성하는 방법을 알면 계산이 덜 필요한 코드 작성 방법을 더 잘 이해하는 데 도움이됩니다. 좋은 AD 코드는 이미 공통 하위 표현식이있는 내장 함수를 활용해야하지만 좋은 AD 코드를 작성하기는 어렵습니다.

이 분야의 표준 기준은 Andreas Griewank와 Andrea Walther 의 알고리즘 미분의 원리와 기법, 제 2 판 평가이며 프로그램의 미분을 평가하는 데 필요한 계산 수를 줄이는 방법에 대한 자세한 정보를 제공해야합니다.


3

모든 AD에는 여전히 이러한 내장 기능이 제공되어야하므로 표현의 일반적인 복잡성과 관련이 무엇인지 알 수 없습니다. AD를 이런 식으로 표현하기 때문에 식 그래프를 통해 경로 수로 복잡성을 분류 할 수 있다고 생각합니다. Andrew Lyons는 여기에서 직 병렬 그래프에 대해 잘 연구했습니다.

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