본문 바로가기
수학

Backpropagation and Automatic Differentiation

by 볼록티 2020. 5. 30.
728x90
반응형

  머신러닝 알고리즘들이 데이터를 잘 성명하면서 일반화성능이 좋은 모델 파라미터를 찾는게 목적인데, 좋은 파라미터라는 것은 GD(gradient descent) 방식으로 찾게 된다. train 데이터를 잘 설명하는 objective function을 define하고 이를 minimize하는 방법으로 parameter를 찾는 방식으로 GD를 수행한다.

 

gradient를 구하는 함수가 (5.109)와 같이 매우 복잡한 경우라고 생각해보자.

이런 계산을 효율적으로 계산하게 도와주는 알고리즘이 Automatic Differentiation이고, 이의 특별한 경우가 backpropagation알고리즘이라고 부른다. backpropagation는 gradient를 계산하기 위해 활용하는 최적화 알고리즘인데, 간단하게 개념만 살펴보자. deep learning 모델은 최종적인 output 이 간단한 연산들의 sequential한 chain으로 표현이 된다. 많은 function이 결합되어 있는 모델이라고 생각하면 된다.

$x$가 $f_{1}$의 입력이 되어 output 을 내고, 이 output이 다음의 input이 되는 걸 반복하는 composition된 모델이다. 

아래의 그림은 식(5.112), (5.113)을 도식화한 그림이다. $f_{i}$가 가지고 있는 parameter는 $j=0, ... ,K-1$,

$\theta_{j} =  A_{j}, b_{j}$가 주어져 있다. 

 

$L$을 loss라하고 이를 최소화시켜줄 수 있는 parameter를 GD를 통해서 찾는다고 하면, gradient정보를 미분을 통해서 찾고 $L$을 줄일 수 있는 방향을 알고, 반대방향으로 이동을 하고, $L$이 줄어들고, 또다시 gradient를 통해서 방향을 찾아서 loss를 줄여나가는 방식이다.

 

$\theta = \left \{ A_{0},b_{0}, ... , A_{K-1}, b_{K-1}  \right \} $이라 할 때, 식 (5.114)를 줄여나가는 방식이다.

(5.115)가 의미하는 것은 $L$가 $\theta_{K-1}$하는 애들을 조금 변화시켰을 때, 얼마나 변화하는지 변화량을 나타낸다. $L$을 $f_{K}$로 partial derivative한거에 $f_{K}$를 $ \theta_{K-1}$로 partial derivative한거를 곱한 chain rule로 생각할 수 있다. 

 주황색으로 표기된 부분은 output 을 그 함수의 input으로 편미분해주는 것이고, 파란색으로 표기된 부분은 그 함수의 output을 그 함수가 지닌 parameter들로 편미분한 것이다.  $\theta_{0}$ 부터 $\theta_{K-1}$ 까지 gradient를 구할 수 있다.

이 구조를 보면 앞서 계산된 결과를 재활용해서 계산하는 구조라는 것을 알 수 있는데, 연산에 사용된 부분이 재사용가능 하다는 것을 토대로 아래처럼 뒤로부터 gradient가 propagation된다하여 Backpropagation이라고 한다.

 

위 그림의 주황색 동그라미 처럼 x$를 $y$로 미분하는 chain rule이 있을 때, (5.119)는 (5.120)과 (5.121)처럼 각각 reverse mode와 forward mode로 방법이 나뉘는데, 둘 다 결과는 똑같은데, 주어진 연산이 어떤 형태를 가지는가에 따라서 그 효율성이 크게 차이가 난다.

  input$x$가 $D$ dimension이라하고, $y$ 편미분 과정에서 나오는 output을 $p$ dimension이라고 하면, input의 dimension이 output의 dimension보다 훨씬 크다면 (1.120)이 효율적이고, output의 dimension이 input의 dimension보다 훨씬 크면 (5.121)의 forward mode가 더 효율적이다.

(5.109)와 같은 복잡한 함수를 explicit하게 쓰는 것 자체가 비효율적인 경우에 간단하게 gradient를 어떻게 구할 수 있는가에 대한 이해를 하면된다. -> Automatic diffenentiation

 

 

 

 위의 (5.122) 식을 아래의 computation graph로 나타내게 된다. 이를 위해서 (5.123)의 intermediate variables를 구한다.

 

식 (5.129)에서 (5.134)까지 중간변수들이 각각 input에 대해 미분한 결과를 보여준다.

 

최종적으로 함수 $f$를 $x$로 미분한 결과는 어떻게 얻는가.  $f$가 $x$에 대해 미분한 결과를 얻기 위한 chain rule과정을 위에서 구한 intermediate variables들로 partial derivatives하면 된다.

대입하면 $f$를 $a$로 미분한 것에 $2x$를 곱한 결과를 얻게 된다. $x$를 이용해서 $f$를 구하는 연산만큼 반대로 순차적으로 연산 수행이 가능하다. 주어진 함수를 죽 나열해서 썼던 것과 비교하면 계산하는 과정은 단위함수들의 곱과 합을 통해 간편하게 정리할 수 있다. 이것이 Autometic differenciation 이다.

 

$x_{1}, ... ,x_{d}$가 input이고,  $x_{d+1}, ... ,x_{D-1}$이 intermediate variables이고 $x_{D}$가 output variable이라고 하면, 일반적으로 computation graph는 (5.143)과 같다. 아래의 $pa$는 parent node를 나타내며, $x_{i}$를 편미분하기 위해 필요한 변수를 의미한다. 위의 예제의 경우는 $c$의 parent node는 $a, b$라 할 수 있다.

최종적으로 아래의 수식처럼 표현할 수 있다. 

 

간단한 함수들의 복잡한 결합을 미분할 때, 단위 함수들의 미분값들을 이용한 chain rule로 gradient를 계산하는게 explicit하게 gradient를 구하는 것보다 훨씬 간편하다는 것을 알았다.

 backpropagation은 하나의 계산 알고리즘으로 gradient를 구하는 방법 중의 하나이며, 이 방법은 최적하는 하는 것이 목적이기 때문에 딥러닝의 일반화과정 (학습과정) 에서 optimal한 parameter를 찾는데 용이하게 활용될 수 있는 것이다.

 

 

 

 

 

 

728x90
반응형

'수학' 카테고리의 다른 글

Eigendecomposition  (0) 2020.05.30
Higher-Order Derivatives  (0) 2020.05.30
Gradients of Matrices  (0) 2020.05.27
Differentiation of Univariate/Multivariate Functions  (0) 2020.05.27
Linear Algebra(6)  (0) 2020.04.27

댓글