자동 차별화

Automatic differentiation

수학과 컴퓨터 대수학에서, 자동 미분(AD)은 알고리즘 미분, 계산 미분,[1][2] 자동 미분 또는 간단히 자동 미분이라고도 불리며, 컴퓨터 프로그램에 의해 지정된 함수의 도함수를 평가하기 위한 기술 집합이다.AD는 모든 컴퓨터 프로그램이 아무리 복잡해도 일련의 기초 연산(더하기, 빼기, 곱하기, 나누기 등)과 기초 함수(exp, log, sin, cos 등)를 실행한다는 사실을 이용한다.이들 연산에 체인규칙을 반복 적용함으로써 임의의 차수의 도함수를 자동적으로 정확하게 작업정밀도에 대해 산출할 수 있으며, 원래의 프로그램보다 더 작은 상수계수를 이용할 수 있다.

그림 1: 자동 차별화와 심볼적 차별화의 관계

자동 미분은 상징적 미분과 수치적 미분과 구별된다.기호적 미분은 컴퓨터 프로그램을 하나의 수학식으로 변환하는 어려움에 직면해 비효율적인 코드를 초래할 수 있습니다.수치미분(유한차이의 방법)은 이산화 프로세스 및 취소 과정에서 반올림 오류를 일으킬 수 있다.이러한 고전적인 방법 모두 복잡성과 오차가 증가하는 고차 미분 계산에 문제가 있습니다.마지막으로, 이 두 가지 고전적인 방법 모두 구배 기반 최적화 알고리즘에 필요한 많은 입력에 대한 함수의 부분 도함수를 계산하는 데 느리다.이러한 모든 문제는 자동 차별화 기능으로 해결됩니다.

연쇄 규칙, 정방향 및 역방향 누적

AD의 기본은 체인 규칙에 의해 제공되는 미분 분해이다.심플한 구성

사슬의 법칙이 주어지다

통상, AD 의 2 개의 다른 모드, 즉 순방향 축적(또는 순방향 모드)과 역방향 축적(또는 역방향 모드)이 표시됩니다.순방향 누적에서는 체인 규칙을 내부에서 외부로 통과시키는 것을 지정합니다(즉, 먼저 w / x{ style _ { / { _ {2 / _ 1at at d d d / _ { { style dw { { } ) 。역방향 누적에서는 순방향 누적에는 순방향 통과가 있습니다.m outside to inside (처음에는 / 2(\dw_ / 1(\ {1를 계산).좀 더 간결하게 말하면

  1. forward accumulation은 재귀 합니다. = - d - 1 x{ { display style } y{ frac _ { } { _ { i} } } { _ { }} } } } } {\ frac {\ frac {\ frac {\ { ty}
  2. 역누적으로 재귀관계가 됩니다. w y + w + w i = { {} { } { _ { i+ } { \ { dy } } { _ { dy } { } { } } } } { display { display _ { di + { display { }} } } }} { dis

전진적립

그림 2: 계산 그래프를 사용한 전방 누적의 예

순방향 누적 AD에서는 먼저 미분이 이루어지는 독립 변수를 고정하고 각 서브 표현의 도함수를 재귀적으로 계산한다.펜 앤 페이퍼 계산에서, 이것은 연쇄 규칙에서 내부 함수의 도함수를 반복적으로 치환하는 것을 포함한다.

이것은 야코비안의 행렬 곱으로서 여러 변수로 일반화 될 수 있다.

역축적에 비해 순축적은 자연스럽고 파생정보의 흐름이 평가순서와 일치하기 때문에 구현이 용이하다.변수 w는 그 도함수 θ(심볼식이 아닌 수치로 기억)로 증강된다.

점으로 나타내듯이.파생상품은 평가 단계와 동시에 계산되고 연쇄규칙을 통해 다른 파생상품과 결합된다.

예를 들어 다음 함수를 생각해 보겠습니다.

알기 쉽게 하기 위해 개별 하위 표현식에는 변수i w로 레이블이 지정되었습니다.

미분이 실행되는 독립 변수의 선택은 시드and12 영향을 줍니다.x에 대한1 이 함수의 도함수에 관심이 있는 경우 시드 값은 다음과 같이 설정되어야 한다.

시드 값이 설정되어 있는 경우 값은 그림과 같이 체인 규칙을 사용하여 전파됩니다.그림 2는 계산 그래프로 이 프로세스를 그림으로 나타낸 것입니다.

가치를 계산하기 위한 운영 파생상품 계산 작업
1 1}=1} 시드)
2 { } 2} =( 시드)

x뿐만 아니라1 x2 대해서도 f의 도함수가 필요한 이 예제 함수의 구배를 계산하기 위해 w 0 ; w 1 \ { { { 1 } =; { \ { w { { } 1 } the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the using the

전방 누적의 한 스위프의 계산 복잡도는 원래 코드의 복잡도에 비례합니다.

역방향 축적은 역방향 축적을 위한 m 스위프보다 n개의 스위프만 필요하므로 기능 f : Rn Rm with m µ n의 역방향 축적을 위한 것보다 효율적이다.

역축적

그림 3: 계산 그래프를 사용한 역축적의 예

역축적 AD에서는 미분해야 할 의존 변수를 고정하고 각 서브 표현대해 도함수를 재귀적으로 계산한다.펜 앤 페이퍼 계산에서 외부 함수의 도함수는 체인 규칙에서 반복적으로 치환됩니다.

역축적에서 관심량은 막대(w);)로 표시된 인접이다. 이는 하위 표현식 w에 관해 선택된 종속 변수의 파생물이다.

역누적은 외부에서 내부로, 또는 그림 3의 계산 그래프의 경우 위에서 아래로 체인 규칙을 통과합니다.예제 함수는 스칼라 값이며, 따라서 도함수 계산에 대한 시드는 1개뿐이며, 계산 그래프는 (2성분) 구배를 계산하는 데 1개만 필요합니다.이는 정방향 누적과 비교하면 절반에 불과하지만 역방향 누적에는 중간 변수i w와 이를 생성한 명령어(또는 "테이프")[3][4]가 필요하며, 계산 그래프가 클 경우 상당한 메모리가 소비될 수 있습니다.이것은 중간 변수의 하위 집합만 저장하고 필요한 작업 변수를 재구성함으로써 어느 정도 완화될 수 있다. 이는 재물질화라고 알려진 기법이다.체크 포인팅은 중간 상태를 저장하기 위해서도 사용됩니다.

역누적을 사용하여 도함수를 계산하는 연산은 아래 표에 나와 있습니다(역순서 참고).

파생상품 계산 작업

계산의 데이터 흐름 그래프는 원래 계산의 구배를 계산하도록 조작할 수 있습니다.이것은 각 프라이머리 노드에 인접 노드를 추가하여 이루어집니다.인접 노드는 프라이머리 에지와 평행하지만 반대 방향으로 흐릅니다.인접 그래프의 노드는 원시 노드에 의해 계산된 함수의 도함수에 의한 곱셈을 나타냅니다.예를 들어 primal의 추가는 인접의 팬아웃을 발생시키고, primal의 팬아웃은 [a]인접의 추가를 발생시키며, primal의 단항함수 y = f(x)는 인접의 xθ = (x)발생시킨다.

역축적은 m 스위프 필요하므로n f : R → Rm with m µ n의 함수에 대한 순축보다 효율적이다.

리버스 모드 AD는 1976년 Seppo Linnainmaa[5][6]의해 처음 출판되었습니다.

기계 학습에 사용되는 기술인 다층 퍼셉트론의 오류 역전파는 역모드 [2]AD의 특별한 경우이다.

정방향 및 역방향 축적을 넘어

정방향 누적과 역방향 누적은 체인 규칙을 통과하기 위한 두 가지(극단) 방법일 뿐입니다.최소의 산술 연산으로 f : Rn Rm 완전 야코비안을 계산하는 문제는 최적 야코비안 축적(OJA) 문제로 알려져 있으며, 이는 NP-완전이다.[7]이 증거의 중심은 그래프의 가장자리에 라벨을 붙이는 국소 부분 사이에 대수적 의존성이 존재할 수 있다는 생각이다.특히 둘 이상의 가장자리 라벨이 동일한 것으로 인식될 수 있습니다.모든 에지 레이블이 고유하고 대수적으로 독립적이라고 가정할 경우 문제의 복잡성은 여전히 해결되지 않습니다.

듀얼 번호를 사용한 자동 차별화

순방향 모드 자동 미분은 실수대수를 증가시켜 새로운 연산을 얻음으로써 실현된다.각 수에는 함수의 도함수를 나타내기 위해 추가 성분이 추가되며, 모든 연산자는 증강대수에 대해 확장된다.증강대수는 이중수의 대수이다.

모든 x(\\, x + x로 바꿉니다 서 x {\\}은(\\varepsilon 추상수입니다.초기 분석).이것만을 사용하여, 정규 산술은 다음을 나타낸다.

using( + / ) 1 - = \ ( 1 + y ' \ / )\ (1 - y ' \ / y ) } 。

이제 다항식은 이 증강 산술로 계산할 수 있습니다.( ) + + + + n \ P) = + +xn}},

P( P 첫 번째 인수에 대한P({P})의 도함수를 나타내며 라고 불리는 x x는 임의로 선택할 수 있습니다.

새로운 산술은 순서쌍x」, 「x라고 쓰여진 요소 」({ x구성되어 있으며, 첫 번째 컴포넌트에서는 일반 산술, 두 번째 컴포넌트에서는 1차 미분 산술로 구성되어 있습니다.위의 다항식 결과를 해석 함수로 확장하면 새로운 산술에 대한 기본 산술 및 일부 표준 함수 목록이 제공됩니다.

일반적으로 함수 gg에 대해서는
서 gu { _ { } v { g { } where 、 v where g { g} where where where where where where where where where,, ,,,,,,, ,,,,,

2진수 기본연산을 혼합인수 u uu, { \'\rangle 에 적용할 경우, 먼저 실수는 { c로 상승합니다 의 { \ 위의 산술로(0 , f(x , 0 \(x 계산하면 찾을 수 있습니다

벡터 인수 및 함수

다변량 함수는 지향성 미분 연산자를 채택함으로써 일변량 함수와 동일한 효율성 및 메커니즘으로 처리할 수 있다., y f ( )⋅ x { y ' = \ f ( x ) \ x'}, R R { } ^ {{ f} 의 도함수 y ′ R ′ R′ R = R f(x ) :^{ 의 R n \ x^{ ( may , 1y y m y m ) ( , x 1 n)로됩니다gle (를) 위와 같은 연산을 사용합니다. style f의 모든 요소를 원하는 경우 n의 기능 평가가 필요합니다.많은 최적화 어플리케이션에서 방향성 도함수는 실제로 충분하다는 점에 유의하십시오.

높은 차수와 많은 변수

위의 산술은 다변량 함수의 2차 이상의 도함수를 계산하기 위해 일반화 될 수 있다.그러나 산술 규칙은 빠르게 복잡해집니다. 복잡도는 가장 높은 미분 차수의 2차입니다.대신, 잘린 테일러 다항식 대수를 사용할 수 있다.일반화된 이중 번호로 정의된 결과 산술은 함수를 데이터 유형처럼 사용하여 효율적으로 계산할 수 있습니다.일단 함수의 테일러 다항식이 알려지면, 도함수는 쉽게 추출된다.

실행

순방향 모드 AD는, 실수가 2개의 번호로 치환되고, 상수가 0의 엡실론 계수로 2개의 번호로 상승하며, 수치 프리미티브가 2개의 번호로 동작하도록 상승하는 프로그램의 비표준 해석에 의해서 실장된다.이 비표준 해석은 일반적으로 소스 코드 변환 또는 연산자 오버로드의 두 가지 전략 중 하나를 사용하여 구현됩니다.

소스 코드 변환(SCT)

그림 4: 소스 코드 변환의 동작 예

함수의 소스 코드는 원래 명령과 인터리브된 파생상품을 계산하는 문을 포함하는 자동으로 생성된 소스 코드로 대체됩니다.

소스 코드 변환은 모든 프로그래밍 언어에 대해 구현할 수 있으며 컴파일러가 컴파일 시간 최적화를 수행하는 것도 더 쉽습니다.다만, AD 툴의 실장은 그 자체보다 어렵습니다.

연산자 오버로드(OO)

그림 5: 오퍼레이터의 오버로드 동작 예

연산자 오버로드는 이를 지원하는 언어로 작성된 소스 코드일 수 있습니다.위에 나타낸 증강 산술에 맞추기 위해 실수 및 초급 수학 연산을 위한 개체는 과부하가 걸려야 합니다.이를 위해 함수를 구별하기 위해 원래 소스 코드의 형식이나 조작 시퀀스를 변경할 필요는 없지만 오버로드를 지원하기 위해 숫자 및 벡터의 기본 데이터 유형을 변경해야 하는 경우가 종종 있으며 특수한 플래깅 조작의 삽입도 수반됩니다.

정방향 축적을 위한 연산자 오버로드는 구현이 용이하며 역방향 축적이 가능하다.그러나 LLVM과 같은 기성 컴파일러는 전진 축적에 비해 코드 최적화에 뒤처집니다.일반적으로 AAD 툴의 인접 계수는 5를 넘습니다.즉, AAD를 도입하여 모든 리스크를 계산할 수 있는 경우 퍼포먼스의 5배의 불이익을 받습니다.특수 AAD 컴파일러를 사용하면 인접 계수를 0.4로[8] 줄일 수 있습니다.

연산자 오버로드는 정방향 및 역방향 누적 모두에 대해 개체가 스칼라가 아닌 실수의 벡터인 애플리케이션에 적합합니다.이는 테이프가 벡터 연산을 구성하기 때문입니다.이것에 의해, 각 벡터 연산이 다수의 스칼라 연산을 실행하는 계산 효율의 실장이 용이하게 됩니다.예를 들어 Vector Adjoint Algorithmic Differentation(Vector AAD; 벡터 인접 알고리즘 미분) 기술을 사용하여 Monte-Carlo 시뮬레이션에 의해 계산된 값을 미분할 수 있습니다.이러한 기법은 xVA 가격 책정 및 그리스 [9]계산의 연산 속도를 비약적으로 높일 수 있는 금융 기관 및 에너지 회사에 적용할 수 있습니다.

C++에서의 자동 차별화 오퍼레이터 오버로드 구현의 예로는 Adapt 및 Stan 라이브러리가 있습니다.

「 」를 참조해 주세요.

메모들

  1. ^ 가중치 행렬의 관점에서 인접은 전치이다. 11 { \ \ 1 1 + + n[、 { \ [ 1 \ 1 _ \ \ \ \ \ \ [ { \ ) 。[ ][ x] [ 。\ \ left [ { \} \ \ \ \ \ \ \ 1 \ \ \ \ \ \ \ \ \ \ \ matrix } \ right] [ 1 \ 1 \ ]

레퍼런스

  1. ^ Neidinger, Richard D. (2010). "Introduction to Automatic Differentiation and MATLAB Object-Oriented Programming" (PDF). SIAM Review. 52 (3): 545–563. CiteSeerX 10.1.1.362.6580. doi:10.1137/080743627.
  2. ^ a b Baydin, Atilim Gunes; Pearlmutter, Barak; Radul, Alexey Andreyevich; Siskind, Jeffrey (2018). "Automatic differentiation in machine learning: a survey". Journal of Machine Learning Research. 18: 1–43.
  3. ^ R.E. Wengert (1964). "A simple automatic derivative evaluation program". Comm. ACM. 7 (8): 463–464. doi:10.1145/355586.364791. S2CID 24039274.
  4. ^ Bartholomew-Biggs, Michael; Brown, Steven; Christianson, Bruce; Dixon, Laurence (2000). "Automatic differentiation of algorithms". Journal of Computational and Applied Mathematics. 124 (1–2): 171–190. Bibcode:2000JCoAM.124..171B. doi:10.1016/S0377-0427(00)00422-2. hdl:2299/3010.
  5. ^ Linnainmaa, Seppo (1976). "Taylor Expansion of the Accumulated Rounding Error". BIT Numerical Mathematics. 16 (2): 146–160. doi:10.1007/BF01931367. S2CID 122357351.
  6. ^ Griewank, Andreas (2012). "Who Invented the Reverse Mode of Differentiation?" (PDF). Optimization Stories, Documenta Matematica. Extra Volume ISMP: 389–400.
  7. ^ Naumann, Uwe (April 2008). "Optimal Jacobian accumulation is NP-complete". Mathematical Programming. 112 (2): 427–441. CiteSeerX 10.1.1.320.5665. doi:10.1007/s10107-006-0042-z. S2CID 30219572.
  8. ^ https://wilmott.com/aad-breaking-the-primal-barrier/
  9. ^ https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/xva-pricing-application-financial-services-white-papers.pdf[베어 URL PDF]

추가 정보

외부 링크