logo

자동미분과 이원수 📂머신러닝

자동미분과 이원수

개요

이원수란, 두 실수 a,bRa, b \in \mathbb{R}에 대해서 다음과 같은 꼴로 표현되는 수를 말한다.

a+bϵ,(ϵ2=0, ϵ0) a + b\epsilon, \quad (\epsilon^{2} = 0,\ \epsilon \neq 0)

이원수의 덧셈과 곱셈 체계는 자동 미분의 전진모드forward mode를 구현하는데 유용하게 쓰인다.

설명1

자동미분, 특히 전진모드에서는 함수 ff의 함숫값을 계산할 때 미분계수를 동시에 계산한다. 가령 y(x)=ln(x2+sinx)y(x) = \ln (x^{2} + \sin x)의 미분계수를 계산하고 싶다면, 다음과 같은 식으로 계산한다. w˙=dwdx\dot{w} = \dfrac{dw}{dx}라고 하자.

Forward calulationsDerivativesw1=xw˙1=1w2=w12w˙2=2w1=2xw3=sinw1w˙3=cosw1=cosxw4=w2+w3w˙4=w˙2+w˙3=2x+cosxw5=ln(w4)w˙5=w˙4w4=2x+cosxx2+sinx \begin{array}{|l|l|} \hline \textbf{Forward calulations} & \textbf{Derivatives} \\ \hline w_{1} = x & \dot{w}_{1} = 1 \\[0.5em] w_{2} = w_{1}^{2} & \dot{w}_{2} = 2w_{1} = 2x \\[0.5em] w_{3} = \sin w_{1} & \dot{w}_{3} = \cos w_{1} = \cos x \\[0.5em] w_{4} = w_{2} + w_{3} & \dot{w}_{4} = \dot{w}_{2} + \dot{w}_{3} = 2x + \cos x \\[0.5em] w_{5} = \ln (w_{4}) & \dot{w}_{5} = \dfrac{\dot{w}_{4}}{w_{4}} = \dfrac{2x + \cos x}{x^{2} + \sin x} \\[1em] \hline \end{array}

이때 이원수의 연산을 이용하면, 함숫값과 미분계수를 자연스럽게 동시에 계산하는 것이 가능하다. 이원수 a+bϵa + b\epsilon(a,b)(a, b)와 같이 순서쌍으로 나타내자.

이원수의 덧셈

(a,b)+(c,d)=(a+c,b+d) (a, b) + (c, d) = (a + c, b + d)

이원수의 곱셈

(a,b)(c,d)=(ac,ad+bc) (a, b)(c, d) = (ac, ad+bc)

이원수 위에서 정의되는 미분가능한 함수

미분가능한 함수 f:RRf : \mathbb{R} \to \mathbb{R}에 대해서, f(a+bϵ):=f(a)+f(a)bϵ=(f(a),bf(a)) f(a + b\epsilon) := f(a) + f^{\prime}(a)b\epsilon = \big( f(a), b f^{\prime}(a) \big)

이원수 위에서 정의되는 함수의 합성

f,g:RRf, g : \mathbb{R} \to \mathbb{R}에 대해서, (fg)(a+bϵ):=f(g(a))+f(g(a))g(a)bϵ=(f(g(a)),bf(g(a))g(a)) (f \circ g)(a + b\epsilon) := f(g(a)) + f^{\prime}(g(a))g^{\prime}(a)b\epsilon = \big( f(g(a)), bf^{\prime}(g(a))g^{\prime}(a) \big)

미분

미분할 변수 xx를 이원수 (x,1)(x, 1)와 같이 나타내고 상수 α\alpha(α,0)(\alpha, 0)과 같이 나타내자. 그러면 이원수의 덧셈은 그 자체로 첫번째 성분은 함숫값, 두번째 성분은 미분계수를 나타낸다. 가령 xx+αx \mapsto x + \alpha라는 함수(즉 상수 덧셈)를 생각해보자. x=x0x = x_{0}에서 이 함수의 함숫값은 x0+αx_{0} + \alpha이고, 미분계수는 d(x+α)dxx=x0=1\left. \dfrac{d(x + \alpha)}{dx}\right|_{x = x_{0}} = 1이다. 이제 이원수로 나타내면 다음과 같다.

(x,1)+(α,0)=(x+α,1) (x, 1) + (\alpha, 0) = (x + \alpha, 1)

첫번째 성분은 함숫값 x+αx + \alpha이고, 두번째 성분은 미분계수 11이다. 물론 x+xx + x에 대해서도 성립한다.

d(x+x)dx=2x,(x,1)+(x,1)=(2x,2) \dfrac{d(x+x)}{dx} = 2x, \qquad (x, 1) + (x, 1) = (2x, 2)

이제 함수 xαxx \mapsto \alpha x (곱셈)를 생각해보자. x=x0x = x_{0}에서 이 함수의 함숫값은 αx0\alpha x_{0}이고, 미분계수는 d(αx)dxx=x0=α\left. \dfrac{d(\alpha x)}{dx} \right|_{x = x_{0}} = \alpha이다. 이원수로 나타내면 다음과 같다.

(x,1)(α,0)=(αx,x0+1α)=(αx,α) (x, 1)(\alpha, 0) = (\alpha x, x\cdot0 + 1\cdot\alpha) = (\alpha x, \alpha)

마찬가지로 첫번째 성분은 함숫값, 두번째 성분은 미분계수가 됨을 알 수 있다. 거듭제곱 xx2x \mapsto x^{2}에 대해서도 성립한다.

(x,1)(x,1)=(x2,2x) (x, 1)(x, 1) = (x^{2}, 2x)

미분가능한 함수 ff와 함성함수 fgf \circ g에 대입했을 때도 미분계수가 보존된다.

f(x,1)=(f(x),f(x)),(fg)(x,1)=(f(g(x)),f(g(x))g(x)) f(x, 1) = \big( f(x), f^{\prime}(x) \big), \qquad (f \circ g)(x, 1) = \big( f(g(x)), f^{\prime}(g(x))g^{\prime}(x) \big)

이제 위에서 봤던 예시 y(x)=ln(x2+sinx)y(x) = \ln (x^{2} + \sin x)를 다시 보자. 실수 xx가 아니라 이원수 (x,1)(x, 1)를 대입하여 계산하면 다음과 같다.

(x,1)2=(x2,2x)sin(x,1)=(sinx,cosx)(x,1)2+sin(x,1)=(x2+sinx,2x+cosx)ln((x,1)2+sin(x,1))=ln(x2+sinx,2x+cosx)=(ln(x2+sinx),(2x+cosx)1x2+sinx)=(ln(x2+sinx),2x+cosxx2+sinx) \begin{align*} (x, 1)^{2} &= (x^{2}, 2x) \\ \sin(x, 1) &= (\sin x, \cos x) \\ (x, 1)^{2} + \sin(x, 1) &= (x^{2} + \sin x, 2x + \cos x) \\ \ln( (x, 1)^{2} + \sin(x, 1) ) &= \ln(x^{2} + \sin x, 2x + \cos x) \\ &= \Big( \ln(x^{2} + \sin x), (2x + \cos x) \dfrac{1}{x^{2} + \sin x} \Big) \\ &= \Big( \ln(x^{2} + \sin x), \dfrac{2x + \cos x}{x^{2} + \sin x} \Big) \\ \end{align*}

실제로 yy의 도함수를 구해보면 아래와 같으므로, 이원수의 두번째 성분과 같다는 것을 확인할 수 있다.

dydx=ddxln(x2+sinx)=2x+cosxx2+sinx \dfrac{dy}{dx} = \dfrac{d}{dx} \ln (x^{2} + \sin x) = \dfrac{2x + \cos x}{x^{2} + \sin x}

줄리아에서 자동미분을 구현하는 방법은 아래의 같이보기를 참고하라.

같이보기


  1. Mykel J. Kochenderfer, Algorithms for Optimization (2019), p27-32 ↩︎