IT Repository

(4) What is Backpropagation? 본문

Basic fundamentals

(4) What is Backpropagation?

IT찬니 2020. 1. 6. 20:31

 

 

 

 

What is Backpropagation?

Backpropagation은 MLP의 훈련을 가능하게 할 수 있는 파라미터 업데이트 방식입니다.
아래의 Backpropagation이 진행되는 순서를 통해 전체적인 과정을 살펴봅시다.

  1. 가장 마지막 뉴런의 Gradient를 계산
  2. 그 Gradient를 바탕으로 바로 이전 뉴런의 Gradient를 계산
  3. 다시 그 Gradient를 바탕으로 바로 이전 뉴런의 Gradient를 계산

이를 반복하면 가장 마지막 뉴런에서부터 가장 처음의 뉴런까지 모든 뉴런의 파라미터를 업데이트하게 됩니다.

(뉴런을 Deep Learning 분야의 컴퓨터 공학적 표현으로는 "노드" 라고 합니다.)

 

Gradient Calculation for MLP

MLP는 수많은 노드들이 연결되어 복잡한 연산을 하게 됩니다.
이러한 노드들은 각각 파라미터를 갖게 됩니다.
우리가 $WX+b$에서는 W와 b가 그 파라미터가 될 것 입니다.

우리가 모델을 최적화시킨다는 것은 이 파라미터들을 잘 조정해서 해결하고자 하는 문제에 알맞게 fitting 시킨다는 것을 의미합니다.
그리고 우리는 이 파라미터들을 조정하기 위해 Loss를 계산하고 Gradient Descent 알고리즘을 통해 Gradient를 계산하여 파라미터를 업데이트 해보았습니다.

그러나 우리가 Gradient를 계산했던 구조는 단순한 $WX+b$ 구조 하나였습니다.
아래의 그림처럼 수많은 노드와 수많은 파라미터들이 있는 MLP에서는 이 모든 것을 편미분해서 구하기에는 너무 복잡하고 어렵습니다.
그러한 복잡함과 어려움 때문에 Backpropagation이 연구되기 전까지 MLP는 이론적으로 가능하지만 트레이닝은 할 수 없는 것으로 간주되었습니다.

 

Computational Graph

Computational Graph는 일련의 연산에 대해 컴퓨터가 계산하는 방법을 "Graph" 라는 형식으로 나타낸 것을 말합니다.
(Graph에 대한 상세한 설명은 여기서는 다루지 않으나, 아래 그림을 통해 직관적인 이해가 가능할 것입니다.)

아래는 $H(x) = wx + b$ 연산의 Computational Graph를 나타낸 것입니다.

$\array{ \array{w \\ x} \otimes \Rightarrow & g \\ & b} \oplus \Rightarrow f$
($\otimes$ = node1, $\oplus$ = node2)

 

이하의 Feed Forward와 Backpropagation에 대한 설명은 이 Graph를 통해 설명합니다.

 

How to Update Parameters

NN의 파리미터를 업데이트하는 방법에는

1. Feed Forward
2. Backpropagation

이 있습니다.

 

Feed Forward

$\textbf{1. Feed Forward}$ : 그래프를 정방향으로 진행해서 아웃풋이 어떻게 나오는지 계산

파라미터는 각각 $w = -2, ~b=3$이고
인풋은 $x = 5$ 일 때

위 Computational Graph를 따라가면서 계산하면,

$g = -2 \times 5 = -10 \\ f = -10 + 3 = -7$

 

Backpropagation with Chain Rule

$\textbf{2. Backpropagation}$ : 그래프를 역방향으로 편미분하여 계산

 

(1)
우리가 최종적으로 구하려는 값은 다음과 같습니다.

1. w에 대한 파라미터를 업데이트하기 위해서 w가 Loss에 얼마나 큰 영향을 미치는지
2. b에 대한 파라미터를 업데이트 하기 위해서 b가 Loss에 얼마나 큰 영향을 미치는지

즉, $\bigg( \dfrac{dL}{dw}, \dfrac{dL}{db} \bigg)$ 입니다.

 

(2)
여기에서 손실함수 L의 입력값인 y_pred와 y_true를 생각해보면, y_true는 이미 주어져있는 상수입니다.
반면, y_pred는 Computational Graph가 최종적으로 출력하는 f와 같은 것을 알 수 있습니다.

결국 우리가 최종적으로 구하려는 값은 w와 b가 f에 얼마나 큰 영향을 미치는지 입니다. $\bigg( \dfrac{df}{dw}, \dfrac{df}{db} \bigg)$

 

(3)
위 Computational Graph에서 각 node의 연산을 살펴보면

$\begin{eqnarray} f &=& g+b & ~~~~~\text{(node2)} \\ g &=& wx & ~~~~~\text{(node1)} \end{eqnarray}$

인 것을 알 수 있습니다.

 

(4)
node2에 대해서 각각 미분을 하면 아래와 같습니다.

$\dfrac{df}{dg}=1, ~\mathbf{\dfrac{df}{db}=1}$

node1에 대해서 각각 미분을 하면 아래와 같습니다.

$\dfrac{dg}{dw} = x, ~\dfrac{dg}{dx} = w$

 

(5) 아래는 Chain rule에 의해

$\array{ \mathbf{\dfrac{df}{dw}} &=& \dfrac{df}{dg} & \cdot & \dfrac{dg}{dw} \\ && \text{(node2)} & \rightarrow & \text{(node1)} & \text{Backpropagation} \\ &=& 1 & \cdot & x & \\ &\mathbf{=}& \mathbf{x} }$

(위 수식의 Bold된 부분을 확인하세요.)

(1)에서 정의했던 우리가 알고자 하는 값을 모두 계산했습니다.
w의 Gradient는 x, b의 Gradient는 1입니다.

이와 같은 방법으로 아무리 복잡한 구조라할지라도 Computational Graph를 그려서
각각의 파라미터가 Loss값에 얼마나 영향을 주는지, 즉 Gradient가 얼마나 되는지를 계산해 낼 수 있습니다.
계산된 Gradient에 lr을 곱해서 최종 Loss를 줄이는 방향으로 각각 파라미터를 업데이트하면 됩니다.

(참고로 파라미터는 Layer별로 따로 업데이트하지 않고, 한번에 업데이트 함)

'Basic fundamentals' 카테고리의 다른 글

(6) Overfitting  (0) 2020.01.13
(5) Model Capacity  (0) 2020.01.13
(3) What is Neural Network?  (0) 2020.01.06
(2) What is Gradient Descent? (Optimization)  (0) 2020.01.05
(1) What is Loss Function?  (0) 2020.01.05
Comments