Machine Learning

신경망 학습 - (3) 오차 역전파(Backpropagation)

BEOKS 2020. 1. 20. 23:47

글의 목적

이전 글에서는 신경망 학습을 위한 매개변수(가중치, 편향)의 기울기를 산출하기 위해서 손실 함수(error function)를 수치 미분하였습니다.  수치 미분은 구현하기 쉽지만 계산이 오래 걸렸습니다. 역전파는 이보다 빠르게 모든 매개변수의 기울기를 산출할 수 있습니다. 이번 글에서는 오차 역전파(backpropagation)에 대해서 알아보도록 하겠습니다. 

 

목차

1. 계산그래프란?
2. 역전파의 기본 과정
3. 활성화 함수의 계층 구현하기
4. (어파인 변환) Affine transformation
5. Softmax & Error function( MSE, CEE )
6. 역전파( backpropagation )  vs 수치 미분 (numerical differential) 장단점

 

1. 계산 그래프란?

역전파를 위해서는 우선 계산 그래프에 대해서 설명해야 합니다.

계산 그래프는 안드레 카페시가 고안하였으며 노드에는 연산자 엣지에는 피연산자를 표현하여 계산식을 하나의 그래프로 설명한 것입니다.

출처 : https://excelsior-cjh.tistory.com

특징

계산 그래프는 왼쪽에서 오른쪽으로 순전파를 진행하여 계산의 결괏값을 도출할 수 있습니다.

또한 간단한 국소적 계산( 전체의 일부분 )을 여러 번 진행하여 복잡한 전체 계산을 할 수 있는 분할성을 가지고 있습니다. 이를 통해서 식의 단순화가 가능하며 계산 중간에 결괏값을 저장할 수도 있습니다.

 

역전파?

역전파는 위에서 언급했던 순전파의 반대로 오른쪽에서 왼쪽으로 계산하는 것을 의미합니다. 

결괏값이 1이라고 가정하고 거꾸로 계산을 함으로써 각 피연산자의 변화량이 결괏값에 얼마나 영향을 끼치는지(미분값)알아 낼 수 있습니다. 계산그래프의 특징( 국소적 계산을 통한 식의 단순화 )을 통해서 오른쪽에서 왼쪽으로 역전파를 진행하면서 결과값에 가까운 매개변수부터 미분 값을 빠르게 계산할 수 있습니다. 

 

2. 역전파의 기본과정

출처 : https://excelsior-cjh.tistory.com

역전파는 뒤쪽(왼쪽)에 있는 피연산자(매개변수)에 대한 앞에 있는 결괏값의 미분 값을 계산하는 과정입니다.

위와 같이 앞에 있는 x에 대한 y의 미분값은 간단히 함수를 미분함으로써 알아낼 수 있습니다. 그러나 결괏값에 도달하기 위해서는 이 앞에도 여러가지 노드와 엣지가 연산을 해야 할 수 있습니다. 지금은 바로 앞에 있는 매개변수에 대한 미분값만 알 수 있지만 우리가 원하는 것은 마지막 결과값에 대한 미분 값입니다. 이는 연쇄 법칙을 통해서 알아 낼 수 있습니다.

 

아래의 z가 y보다 앞에 있는 매개변수라고 정합시다.

 

연쇄법칙 덕분에 매개변수의 위치가 어디에 있든 바로앞에 있는 값의 미분값을 알아낸다면 가장 앞에 있는 결괏값에 대한 미분 값을 얻을 수 있습니다. 아래의 그림이 이 과정을 설명한 것입니다.

출처 : https://excelsior-cjh.tistory.com

f(x, y)=xy에서 편미분에 의해 f(x, y)/dx는 y를 f(x, y)/dy는 x를 가짐으로써 위 곱셈 노드에 참여한 두 개의 피연산자(매개변수)는 서로 반대의 값을 곱하여 앞의 역전파된 엣지 값이 되어 역전파가 진행됩니다. 

마찬가지로 더하기 노드에 참여한 두 피연산자는 f(x, y)=x+y의 편미분(f(x, y)/dx =1)에 의해 앞의 역전파 엣지 값을 그대로 가지게 됩니다.

 

3. 활성화 함수의 계층 구현하기

곱셈(가중치의 곱셈)과 덧셈(편향의 덧셈)의 역전파 미분 값을 구하는 방법을 알았으니 이번에는 활성화 함수의 역전파 미분값을 구하는 방법에 대해서 알아보겠습니다.

 신경망에서는 가중치와 편향의 계산 & 활성화 함수의 계산 & 결괏값의 손실 함수 계산 세 가지가 사용되므로 이 3가지에 대한 역전파 미분 값을 구하는 방법을 알아야만 결과적으로 역전파를 수행할 수 있습니다.

1. ReLU 함수 계층의 계산

https://excelsior-cjh.tistory.com

ReLU의 경우 x가 0보다 크면 x를 0보다 작거나 같으면 0을 출력하는 함수입니다.

이를 미분하면 0보다 클 때 1, 0 이하 일 때 0을 출력하므로 역전파 시 위 그림과 같이 역전파가 진행됩니다.

 시그모이드도 구현하려고 했지만 역전파에서 시그모이드는 gradient vanishing이라는 문제점을 가지고 있어 잘 사용하지 않으므로 생략 하도록 하겠습니다.

4. (어파인 변환) Affine transformation

위에서 역전파를 수행하기 위해서는 가중치와 편향의 역전파법에 대해서 알아보아야 한다고 했습니다. 실제로 프로그래밍을 할 때는 곱셈과 덧셈만 수행하는 것이 아니라 간편화를 위해서 행렬을 통해 계산을 수행합니다.

따라서 affine 계층(가중치와 매개변수를 계산하는 계층)에서 계산하기 위해서는 행렬의 역전파 방법에 대해서 알아야 합니다.

https://excelsior-cjh.tistory.com

이를 위해서는 위에서 했던 방식처럼 행렬의 곱셈에 대한 미분법에 대해서 알아야 합니다. 

행렬에 대한 미분은 복잡하기 대문에 여기에서는 생략하도록 하겠습니다.

5. Softmax & Error function( MSE, CEE )

https://excelsior-cjh.tistory.com

역전파를 통해서 계산할 때 소프트맥스와 교차 엔트로피 손실 함수를 통해서 결과값을 구할 경우 이 두 계층의 최초입력값에 대한 L의 미분은 y(신경망이 예측한 정답의 확률) - t(실제 정답)으로 깔끔하게 떨어집니다. 우연처럼 보일 수 있지만 사실 이 역전파 값을 산출하기 위해서 소프트맥스와 교차 엔트로피 손실함수를 사용했습니다.

회귀를 위해서 사용되는 항등 함수&평균 제곱 오차 또한 역전파를 진행한 경우 위처럼 똑같은 역전파 값을 산출할 수 있습니다.

 

6. 역전파( backpropagation )와 수치 미분 (numerical differential) 장단점

지난 글의 수치 미분에 이어서 이번에는 역전파를 알아보았습니다. 역전파는 지금까지 보았듯 가장 오른쪽 계층부터 국소적 계산을 통해서 단순하고 빠르게 가장 첫 번째 계층까지 차례대로 모두 계산할 수 있다는 장점이 있지만 특정한 하나의 매개변수의 기울기를 계산하기 위해서는 결괏값과 해당 매개변수 사이의 모든 계층을 역전파로 계산해야 한다는 단점이 있습니다.

 

수치 미분은 모든 매개변수의 기울기를 계산하는 것은 역전파보다 느리지만 특정한 하나의 매개변수에 대한 기울기를 계산하는데는 역전파보다 빠르게 계산할 수 있다는 장점이 있습니다.

 

신경망이 학습하기 위해서는 결국 전체적인 매개변수의 기울기 값을 알아야 하므로 최근에는 수치 미분보다 역전파가 주로 사용되고 있습니다.