프로필사진

IT Anthology/encyclopedia

[밑러닝] 이보다 더 쉬울 수는 없다! 오차역전파(back-propagation)법 완벽 파헤치기

다각 2020. 3. 29. 16:36

* 이 글은 <밑바닥부터 시작하는 딥러닝2 (저자: 사이토 고키)> 책을 읽으며 정리한 글입니다.
* 나중에라도 제가 참고하기 위해 정리해 두었으며, 모든 내용을 적은 것이 아닌,
필요하다고 생각되는 부분만 추려서 정리한 것임을 미리 밝힙니다.


목차

  1. 계산 그래프(computational graph)란?
  2. 계산 그래프 사용의 장점
  3. 계산 그래프의 역전파(back-propagation)

1. 계산 그래프(computational graph)란?

오차역전파를 쉽게 설명하기 위해 계산 그래프를 도입한다. (이 설명 방식은 안드레 카페스(Andreg Karpathy)의 블로그와 그와 페이페이 리(Fei-Fei Li) 교수가 진행한 cs231n 수업을 참고한다.)

 

계산 그래프(computational graph)란 계산 과정을, 복수의 노드(node)와 엣지(edge)가 있는 그래프로 나타낸 것이다. 예를 들면 다음과 같다.

슈퍼에서 사과를 2개, 귤을 3개 샀습니다. 사과는 1개에 100원, 귤은 1개 150원입니다. 소비세가 10%일 때 지불 금액을 구하시오.

위와 같은 문제가 있을 때, 어렸을 때 구몬 학습지를 열심히 푼 사람이라면 암산으로도 답을 구할 수 있다. 이 때, 우리가 암산한 방식을 생각해보자. 우리는 100원짜리 사과에 개수인 '2'를 곱하고, 150원짜리 귤에 개수인 '3'을 곱했다. 이 두 가격을 합하고 소비세인 1.1을 곱했다.

 

이러한 일련의 과정을 계산 그래프로 나타내면 다음과 같다.

이 때 우리는 무의식적으로 계산을 왼쪽부터 오른쪽으로 진행했는데, 이렇게 왼쪽에서 오른쪽으로($\to$) 계산을 진행하는 것을 순전파(forward propagation) 라고 한다. 이름에서 알 수 있듯이, 그럼 역전파는 뭘까? 오른쪽에서 왼쪽으로($\gets$) 계산하는 것이다!

2. 계산 그래프 사용의 장점

그럼 이런 순전파니 역전파니 하는 것들을 왜 사용하는 것일까?
계산 그래프는 두 가지의 장점을 지니고 있다. 첫번째는 (1) 국소적 계산이 가능하다는 점이다. 위의 계산 그래프에서, 추가적으로 포도도 구매하고 싶다면, 사과와 귤이 계산된 노드를 냅두고 포도만 추가할 수 있다. 다음과 같이 말이다.

즉, 전체 계산이 얼마나 복잡하든 각 노드 개별의 문제로 분리해내어 문제를 단순화시킬 수 있다.

 

두번째 장점은, (2) 역전파를 통해 '미분'을 효율적으로 계산할 수 있다는 점이다. 이제 드디어 '역전파'의 개념이 등장할 차례이다.

 

3. 계산 그래프의 역전파(back-propagation)

3-(1). '역전파(back-propagation)을 통한 미분'의 개념 잡기

계속 예시로 들었던, 과일의 가격 계산으로 생각해보자. 문제를 단순화하기 위해 사과의 예시만 들고 왔다.

사과가 천년만년 100원이면 좋겠지만, 여러가지 이유로 가격은 끊임없이 인상된다. 만약 사과의 가격이 1원 인상되었다고 해보자. 그럼 총 가격은 얼마가 될까? 101원짜리 사과가 두개, 소비세 10% 붙었다~ 라는 식으로 계산할 수도 있지만, 그보다 더 쉽게, '1원'이라는 정보만 가지고 최종 금액이 얼마 올라야 하는지 예측할 수 있다. 다음과 같이 말이다.

다시 그린 굵은 검은선은 역전파를 나타내며, 국소적 미분 값이 화살표 아래에 표기되었다. 생각해보면, '미분'이라는 개념 자체가 "$x$가 1 올랐대 $y$는 얼마나 올랐을까?" 라는 질문에 대답할 수 있도록 고안된 것이다. 그걸 노드마다 국소적으로 시행하는 것이다.

 

위의 그림에서, 사과부터 결과까지 각각 1번부터 4번까지의 숫자를 부여하도록 하자. 그리고 각 인접한 번호 사이만 고려해 생각해보자. 3번(두번째 곱셈)에서 1이 오르면 4번(결과)에서도 1이 오른다. 2번(첫번째 곱셈)에서 1이 오르면 3번(두번째 곱셈)에서 1.1이 오른다. 마지막으로, 1번(사과)에서 1이 오르면 2번(첫번째 곱셈)에서는 2가 오른다. 그렇다면 1번에서 4번의 미분 값은 어떻게 될까? 앞서 구한 모든 (인접한 노드끼리의) 미분값을 곱한 결과가 된다. 즉, 1번(사과) 노드에서 1이 오를 때 4번(결과) 노드에서는 총 '1$\times$1.1$\times$2 $=$ 2.2'만큼 오르게 되는 것이다. (놀라운 수학! ㄴㅇㄱ)

 

어떻게 이런 일이 가능한 것일까? 바로 이어서 설명할 '연쇄법칙' 덕분에 가능하게 된다.

3-(2). 연쇄법칙(Chain Rule)

연쇄법칙을 이 글을 읽는 당신이 배웠는지는 모르겠는데, 나는 이것을 배울 당시 신나게 죽죽 그어대며 배운 기억이 있다. 초등학교 때 분자 분모 죽죽 그어가며 약분하던 순간을 떠올리면 된다.

 

예를 들어 $z = t^2$이고 $t = x+y$일 때, $x$에 대한 $z$의 미분값은 다음과 같이 구할 수 있다.
$$
\frac {\partial z}{\partial x} = \frac {\partial z}{\partial t} \frac {\partial t}{\partial x}
$$
이 때 $\frac {\partial z}{\partial t}=2t$이고, $\frac {\partial t}{\partial x}=1$이므로, 구하려던 값은 다음과 같이 구할 수 있다.
$$
\frac {\partial z}{\partial x} = \frac {\partial z}{\partial t} \frac {\partial t}{\partial x} = 2t \cdot 1 = 2(x+y)
$$

이렇게, 합성 함수의 미분을 합성 함수를 구성하는 각 함수의 미분의 곱으로 나타내는 것을 연쇄법칙이라고 한다.

3-(3). 연쇄법칙과 계산 그래프

위에서 너무나도 자연스럽게 수식으로 연쇄법칙을 설명했다. 위의 예제를 계산 그래프로 시각화 해보자. 다음과 같이 그려질 것이다.

각 미분의 결과식을 넣어주면 다음과 같다.

위의 예제를 계속 가져가며, 덧셈 노드와 곱셈 노드에서 역전파가 어떻게 전달되는지 조금 더 파고들어 보자.

 

ㄱ. 덧셈 노드에서의 역전파
덧셈 노드에서의 역전파는 그 값을 그대로 흘려보낸다. $z = x+y$일 떄, $z$에 대한 $x$의 미분값은 1이다 ($y$도 마찬가지이다). 어떤 값에 1을 곱하면 자기 자신이다. 즉, 뒤에서 들어온 미분값을 변동 없이 그대로 전달하는 것이다.

 

ㄴ. 곱셈 노드에서의 역전파
한편, $z = xy$의 식을 살펴보자. 계산 그래프로 그리면 다음과 같다.

한편, $\frac {\partial z}{\partial x} = y$이며, $\frac {\partial z}{\partial y} = x$이다. 이 결과를 위의 그래프에서 대입하면 다음과 같은 결과가 나온다.

(놀랍게도) 곱셈 식은 상대의 변수만큼을 그 계산 값으로 취한다. (실제로 곱셈 노드를 구현할 때는, 역전파에서 활용할 수 있도록 순전파의 입력 신호를 변수에 저장한다.)

 


 

정리
지금까지 계산 그래프와 연쇄법칙, 그리고 그를 이용한 미분을 알아보았다. 그러고보니 정작 '오차역전파'에 대해서 정의를 내리지 않았다.하지만 지금까지 배운 내용으로 '오차역전파법'이 무엇인지 추측할 수 있다.

 

앞선 포스팅에서 우리는 계속 손실 함수의 값, 즉 거칠게 말하면 '오차'를 줄이기 위해 수치 미분이니 경사하강법이니 하는 것들을 잔뜩 배웠다. 이를 토대로 '오차역전파법'을 다음과 같이 정리할 수 있겠다.

"결과에서 발생한 오차를 역전파로 전달하여 초기 매개변수의 값을 업데이트하는 방식"

정리된 말이 너무 어려워 보여도 걱정하지 말자. 다음 포스트에서 간단한 역전파 알고리즘을 구현하면서 역전파의 개념에 대해 신물나게 반복하며 체득해보도록 하자.