1. BackPropagation
Loss function을 이용하여 우리의 모델이 가지는 Weight의 정확성을 평가하였다. 그렇다면 어떠한 방식으로 학습을 시켜야 Weight가 우리가 가진 목적에 더욱 부합할 수 있을 것인지에 대해 명확하게 정리하고자 한다.
1) Computational Graph
https://minchael.tistory.com/7
Loss Function and Optimization
1. Loss Function 각각의 그림을 W와 함께 계산한 결과를 보자. 가장 왼쪽의 고양이 그림에 대해 값이 가장 높거나 낮아야 하는데, 2.9라는 값을 가지고있다. model을 재대로 train하기 위해서는 해당 결
minchael.tistory.com
해당 포스트에서 Loss function에 대해 다루었다. 이를 computational graph로 표현하면 다음과 같다.
1. input $x$와 Weight 값 $W$를 이용하여 score을 계산한다.
2. hinge loss를 이용하여 Loss값 $L_i$를 계산한다.
3. R(W)를 더하여 general한 값을 위해 Normalization한다.
왜 다음과 같이 Computational Graph로 표현할까?
바로 각각의 Weight값의 gradient 계산을 위해 backpropagation를 이용하기 위함이다.
alexnet과 같은 복잡한 수식에도 동일한 방식으로 backpropagation을 적용할 수 있다.
그렇다면 이제 back propagation이 이루어지는 과정을 예시를 통해 보자.
다음의 식은 $x$, $y$, $z$를 input으로 가진다. 우리는 다음의 식을 두가지 과정으로 더욱 자세히 생각할 수 있다.
$$q=x+y$$
$$f=qz$$
다음과 같이 $x$의 값이 -2, $y$의 값이 5, $z$의 값이 -4일때 -12의 값이 값을 가진다. 다음과 같이 순차적으로 연산하는 과정을 Forward process, Feed Forward, Forward Propagation이라한다.
이를 바탕으로 우리는 $x$, $y$, $z$에 대한 편미분값(partial derivative)을 구하고자 한다.
chain rule(연쇄법칙)을 이용하여 각각의 편미분값을 구해보면 다음과 같다.$$\frac{\partial f}{\partial f} = 1$$
$$\frac{\partial f}{\partial z} = q = 3$$
$$\frac{\partial f}{\partial q} = z = -4$$
$$\frac{\partial f}{\partial y}=\frac{\partial f}{\partial q}\cdot \frac{\partial q}{\partial y}=z \cdot 1 = -4$$
$$\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\cdot \frac{\partial q}{\partial x} = z \cdot 1 = -4$$
최종적인 각각의 변수에 대한 gradient의 값은 다음과 같다.
다음의 연산과정을 통해 알 수 있는 점은, $+$연산에서는 gradient 양 변수에게 그대로 전달되고, $\times$과정에서는 곱해지는 다른 변수의 값이 local gradient값이 된다. max 연산에서는 max값만 global gradient값 그대로 전달된다.
2) Gloabl Gradient & Local Gradient
그렇다면 연쇄법칙을 사용하기 위해 전체 node들에 대한 gradient값을 계산해야 할까?
이미 output에 가까운 node에서 계산된 Global Gradient를 이용한다면 Local Gradient와 곱해주기만 한다면 쉽게 계산 가능하다.
이때 Local Gradient는 Forward Pass하는 과정에서 미리 저장해둔다.
3) BackPropagation with Sigmoid function
위에서 보았던 예제는 덧셈과 곱셈으로만 이루어진 기본적인 연산과정이었다. 이제 더 복잡한 연산에 적용해보자.
$$f(w,x)=\frac{1}{1+e^{-(w_0x_0+w_1x_1+w_2)}}$$
다음 $f(w,x)$를 computational graph로 표현해보면 다음과 같다.
output에 가까운 값부터 global gradient를 계산하면 다음과 같다.
$\frac{1}{x}$를 미분한 값인 $-\frac{1}{x^2}$에 1.37을 대입하여 global gradient인 1과 곱하여 $-0.53$의 값이 나온다.
그다음은 +1 이기에 gradient가 그대로 -0.53을 가진다.
$e^x$는 미분해도 값이 그대로이므로 -1을 대입한 local gradient $e^{-1}$ 와 global gradient -0.53와 곱하여 최종 global gradient인 -0.20의 결과를 구한다.
이를 반복적으로 계산하면 다음과 같이 각각의 gradient를 계산할 수 있다.
sigmoid function의 경우 $\sigma (x) = \frac{1}{1+e^{-x}}$ 로 한번에 계산할 수 있기에, 다음과 같이 4단계에 나누어 연산할 필요 없이 한번에 연산 가능하다.
$$\frac{d\sigma (x)}{dx} = \frac{e^{-x}}{(1+e^{-x})^2}=(\frac{1+e^{-x}-1}{1+e{-x}})(\frac{1}{1+e^{-x}})=(1-\sigma (x)) \sigma (x)$$
결과적으로 BackPropagation과정을 통해 계산한 local variable에 대한 gradient를 통해 optimization을 할 수 있다.
4) Gradients for Vector
지금까지 우리는 Gradient값이 Scalar에 대해서 살펴 보았다. 이제는 실제로 컴퓨터에서 처리하는 형태인 Vector을 이용한 Gradient에 대해서 설명하겠다.
먼저 jacobian matrix에 대해서 설명하자면, 특정한 element에 대해서 다른 변수에 의해 편미분을 진행한 함수이다.
만약 $z=[z_1,z_2, z_3]$를 $x=[x_1,x_2,x_3]$에 대해 편미분 한다고 생각해보자.
그렇다면 jacobian matrix는 다음과 같다.
$$\frac{\partial{z}}{\partial{x}} = \begin{bmatrix} \frac{\partial {z_1}}{\partial {x_1}} & \frac{\partial{z_1}}{\partial{x_2}} & \frac{\partial{z_1}}{\partial{x_3}} \\ \frac{\partial{z_2}}{\partial{x_1}} & \frac{\partial{z_2}}{\partial{x_2}} & \frac{\partial{z_2}}{\partial{x_3}} \\ \frac{\partial{z_3}}{\partial{x_1}} & \frac{\partial{z_3}}{\partial{x_2}} & \frac{\partial{z_3}}{\partial{x_3}} \end{bmatrix}$$
다음과 같이 max를 구하는 연산의 jacobian matrix는 output에 대해서 각 input으로 편미분을 하기에 $4096\times 4096$이 되어야 한다.
다만 batch가 100인 minibatch를 이용할 경우 $409,600\times 409,600$이 되어 매우 커질 것이다.
다음과 같이 $|W\cdot x |^2$ 의 연산과정을 한번 살펴보자.
이제 backporpagation을 이용하여 각 node의 gradient를 구해보자.
마지막 node의 gradient는 1이다.
$W \cdot x$을 $q$로 치환하면 $q^2$ 이므로 편미분을 할 경우 $2q$가 된다. 따라서 local variable과 결합하여 0.44 0.52가 된다.
이 부분은 이해하기 어려울 수 있는데, 기존 우리가 곱하는 node에서는 서로 반대의 variable에 의해 영향을 받는다고 하였다. 따라서 $W$의 gradient는 global gradient와 x의 local variable이 transpose된 값이 곱해진 형태가 된다. 이는 $x$또한 마찬가지이다.
'공부 > 머신러닝' 카테고리의 다른 글
Optimizer (0) | 2024.04.06 |
---|---|
Weight Initialization (0) | 2024.03.25 |
Convolution Neural Network (0) | 2024.03.19 |
Activation Function (1) | 2024.03.17 |
Loss Function and Optimization (0) | 2024.03.05 |