자동미분과 이원수
📂머신러닝 자동미분과 이원수 개요 이원수 란, 두 실수 a , b ∈ R a, b \in \mathbb{R} a , b ∈ R 에 대해서 다음과 같은 꼴로 표현되는 수를 말한다.
a + b ϵ , ( ϵ 2 = 0 , ϵ ≠ 0 )
a + b\epsilon, \quad (\epsilon^{2} = 0,\ \epsilon \neq 0)
a + b ϵ , ( ϵ 2 = 0 , ϵ = 0 )
이원수의 덧셈과 곱셈 체계는 자동 미분 의 전진모드forward mode 를 구현하는데 유용하게 쓰인다.
설명 자동미분, 특히 전진모드에서는 함수 f f f 의 함숫값을 계산할 때 미분계수 를 동시에 계산한다. 가령 y ( x ) = ln ( x 2 + sin x ) y(x) = \ln (x^{2} + \sin x) y ( x ) = ln ( x 2 + sin x ) 의 미분계수를 계산하고 싶다면, 다음과 같은 식으로 계산한다. w ˙ = d w d x \dot{w} = \dfrac{dw}{dx} w ˙ = d x d w 라고 하자.
Forward calulations Derivatives w 1 = x w ˙ 1 = 1 w 2 = w 1 2 w ˙ 2 = 2 w 1 = 2 x w 3 = sin w 1 w ˙ 3 = cos w 1 = cos x w 4 = w 2 + w 3 w ˙ 4 = w ˙ 2 + w ˙ 3 = 2 x + cos x w 5 = ln ( w 4 ) w ˙ 5 = w ˙ 4 w 4 = 2 x + cos x x 2 + sin x
\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}
Forward calulations w 1 = x w 2 = w 1 2 w 3 = sin w 1 w 4 = w 2 + w 3 w 5 = ln ( w 4 ) Derivatives w ˙ 1 = 1 w ˙ 2 = 2 w 1 = 2 x w ˙ 3 = cos w 1 = cos x w ˙ 4 = w ˙ 2 + w ˙ 3 = 2 x + cos x w ˙ 5 = w 4 w ˙ 4 = x 2 + sin x 2 x + cos x
이때 이원수의 연산을 이용하면, 함숫값과 미분계수를 자연스럽게 동시에 계산하는 것이 가능하다. 이원수 a + b ϵ a + b\epsilon a + b ϵ 을 ( a , b ) (a, b) ( a , b ) 와 같이 순서쌍으로 나타내자.
이원수의 덧셈
( a , b ) + ( c , d ) = ( a + c , b + d )
(a, b) + (c, d) = (a + c, b + d)
( a , b ) + ( c , d ) = ( a + c , b + d )
이원수의 곱셈
( a , b ) ( c , d ) = ( a c , a d + b c )
(a, b)(c, d) = (ac, ad+bc)
( a , b ) ( c , d ) = ( a c , a d + b c )
이원수 위에서 정의되는 미분가능한 함수
미분가능한 함수 f : R → R f : \mathbb{R} \to \mathbb{R} f : R → R 에 대해서,
f ( a + b ϵ ) : = f ( a ) + f ′ ( a ) b ϵ = ( f ( a ) , b f ′ ( a ) )
f(a + b\epsilon) := f(a) + f^{\prime}(a)b\epsilon = \big( f(a), b f^{\prime}(a) \big)
f ( a + b ϵ ) := f ( a ) + f ′ ( a ) b ϵ = ( f ( a ) , b f ′ ( a ) )
이원수 위에서 정의되는 함수의 합성
f , g : R → R f, g : \mathbb{R} \to \mathbb{R} f , g : R → R 에 대해서,
( f ∘ g ) ( a + b ϵ ) : = f ( g ( a ) ) + f ′ ( g ( a ) ) g ′ ( a ) b ϵ = ( f ( g ( a ) ) , b f ′ ( 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)
( f ∘ g ) ( a + b ϵ ) := f ( g ( a )) + f ′ ( g ( a )) g ′ ( a ) b ϵ = ( f ( g ( a )) , b f ′ ( g ( a )) g ′ ( a ) )
미분 미분할 변수 x x x 를 이원수 ( x , 1 ) (x, 1) ( x , 1 ) 와 같이 나타내고 상수 α \alpha α 를 ( α , 0 ) (\alpha, 0) ( α , 0 ) 과 같이 나타내자. 그러면 이원수의 덧셈은 그 자체로 첫번째 성분은 함숫값, 두번째 성분은 미분계수를 나타낸다. 가령 x ↦ x + α x \mapsto x + \alpha x ↦ x + α 라는 함수(즉 상수 덧셈)를 생각해보자. x = x 0 x = x_{0} x = x 0 에서 이 함수의 함숫값은 x 0 + α x_{0} + \alpha x 0 + α 이고, 미분계수는 d ( x + α ) d x ∣ x = x 0 = 1 \left. \dfrac{d(x + \alpha)}{dx}\right|_{x = x_{0}} = 1 d x d ( x + α ) x = x 0 = 1 이다. 이제 이원수로 나타내면 다음과 같다.
( x , 1 ) + ( α , 0 ) = ( x + α , 1 )
(x, 1) + (\alpha, 0) = (x + \alpha, 1)
( x , 1 ) + ( α , 0 ) = ( x + α , 1 )
첫번째 성분은 함숫값 x + α x + \alpha x + α 이고, 두번째 성분은 미분계수 1 1 1 이다. 물론 x + x x + x x + x 에 대해서도 성립한다.
d ( x + x ) d x = 2 x , ( x , 1 ) + ( x , 1 ) = ( 2 x , 2 )
\dfrac{d(x+x)}{dx} = 2x, \qquad (x, 1) + (x, 1) = (2x, 2)
d x d ( x + x ) = 2 x , ( x , 1 ) + ( x , 1 ) = ( 2 x , 2 )
이제 함수 x ↦ α x x \mapsto \alpha x x ↦ αx (곱셈)를 생각해보자. x = x 0 x = x_{0} x = x 0 에서 이 함수의 함숫값은 α x 0 \alpha x_{0} α x 0 이고, 미분계수는 d ( α x ) d x ∣ x = x 0 = α \left. \dfrac{d(\alpha x)}{dx} \right|_{x = x_{0}} = \alpha d x d ( αx ) x = x 0 = α 이다. 이원수로 나타내면 다음과 같다.
( x , 1 ) ( α , 0 ) = ( α x , x ⋅ 0 + 1 ⋅ α ) = ( α x , α )
(x, 1)(\alpha, 0) = (\alpha x, x\cdot0 + 1\cdot\alpha) = (\alpha x, \alpha)
( x , 1 ) ( α , 0 ) = ( αx , x ⋅ 0 + 1 ⋅ α ) = ( αx , α )
마찬가지로 첫번째 성분은 함숫값, 두번째 성분은 미분계수가 됨을 알 수 있다. 거듭제곱 x ↦ x 2 x \mapsto x^{2} x ↦ x 2 에 대해서도 성립한다.
( x , 1 ) ( x , 1 ) = ( x 2 , 2 x )
(x, 1)(x, 1) = (x^{2}, 2x)
( x , 1 ) ( x , 1 ) = ( x 2 , 2 x )
미분가능한 함수 f f f 와 함성함수 f ∘ g f \circ g f ∘ g 에 대입했을 때도 미분계수가 보존된다.
f ( x , 1 ) = ( f ( x ) , f ′ ( x ) ) , ( f ∘ g ) ( 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)
f ( x , 1 ) = ( f ( x ) , f ′ ( x ) ) , ( f ∘ g ) ( x , 1 ) = ( f ( g ( x )) , f ′ ( g ( x )) g ′ ( x ) )
이제 위에서 봤던 예시 y ( x ) = ln ( x 2 + sin x ) y(x) = \ln (x^{2} + \sin x) y ( x ) = ln ( x 2 + sin x ) 를 다시 보자. 실수 x x x 가 아니라 이원수 ( x , 1 ) (x, 1) ( x , 1 ) 를 대입하여 계산하면 다음과 같다.
( x , 1 ) 2 = ( x 2 , 2 x ) sin ( x , 1 ) = ( sin x , cos x ) ( x , 1 ) 2 + sin ( x , 1 ) = ( x 2 + sin x , 2 x + cos x ) ln ( ( x , 1 ) 2 + sin ( x , 1 ) ) = ln ( x 2 + sin x , 2 x + cos x ) = ( ln ( x 2 + sin x ) , ( 2 x + cos x ) 1 x 2 + sin x ) = ( ln ( x 2 + sin x ) , 2 x + cos x x 2 + sin x )
\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*}
( x , 1 ) 2 sin ( x , 1 ) ( x , 1 ) 2 + sin ( x , 1 ) ln (( x , 1 ) 2 + sin ( x , 1 )) = ( x 2 , 2 x ) = ( sin x , cos x ) = ( x 2 + sin x , 2 x + cos x ) = ln ( x 2 + sin x , 2 x + cos x ) = ( ln ( x 2 + sin x ) , ( 2 x + cos x ) x 2 + sin x 1 ) = ( ln ( x 2 + sin x ) , x 2 + sin x 2 x + cos x )
실제로 y y y 의 도함수를 구해보면 아래와 같으므로, 이원수의 두번째 성분과 같다는 것을 확인할 수 있다.
d y d x = d d x ln ( x 2 + sin x ) = 2 x + cos x x 2 + sin x
\dfrac{dy}{dx} = \dfrac{d}{dx} \ln (x^{2} + \sin x) = \dfrac{2x + \cos x}{x^{2} + \sin x}
d x d y = d x d ln ( x 2 + sin x ) = x 2 + sin x 2 x + cos x
줄리아 에서 자동미분을 구현하는 방법은 아래의 같이보기를 참고하라.
같이보기