Neural Network
역전파(Back Propagation)를 설명하기 앞서 인공 신경망(Neural Network)에 대해 간단하게 설명하고 넘어가 보자.
위 그림에서와 같이 인공 신경망은 입력층, 은닉층(여러 개일 수 있다), 출력층을 가지고 있고, 사람의 뉴런 모양과 비슷한 퍼셉트론으로 이루어져 있다.
이 인공 신경망에서 입력 데이터(x1, x2)를 받아 최적의 출력 데이터(o1, o2)를 계산할 수 있는 각 퍼셉트론의 가중치(w1~w8)들을 업데이트하는 과정을 신경망 학습이라고 할 수 있겠다.
Forward Propagation
순 전파(Forward Propagation)는 입력 데이터를 은닉층을 거쳐 출력층으로 값을 도출하는 것을 의미한다. 순 전파의 과정을 설명하기 위해 입력층과 가중치에 임의의 값을 넣고 계산해보자.
먼저 출력층에서 은닉층까지의 계산 과정을 보자.
z1 = w1 * x1 + w2 * x2 = 0.3 * 0.1 + 0.25 * 0.2 = 0.08
z2 = w3 * x1 + w4 * x2 = 0.4 * 0.1 + 0.35 * 0.2 = 0.11
z1, z2는 각각의 은닉층 뉴런에서 Sigmoid 함수를 지나 다음과 같이 계산된다.
h1 = sigmoid(z1) = 0.51998934
h2 = sigmoid(z2) = 0.52747230
일단은 위 식과 같이 Sigmoid 함수를 지나 값이 저런 식으로 변했다는 것만 알고 있자. (Sigmoid 함수는 활성화 함수(Activation Function)로 선형 값을 비선형 값으로 바꿔주는 비선형 함수이다. 활성화 함수에 대해서는 추후 다른 포스팅에서 자세하게 다루겠다).
출력층도 마찬가지로 이어서 계산할 수 있다.
z3 = w5 * h1 + w6 * h2 = 0.45 * h1 + 0.4 * h2 = 0.44498412
z4 = w7 * h1 + w8 * h2 = 0.7 * h1 + 0.6 * h2 = 0.68047592
o1 = sigmoid(z3) = 0.60944600 (실제 값 0.4)
o2 = sigmoid(z4) = 0.66384491 (실제 값 0.6)
입력층에서 출력층까지 순 전파를 거쳐 나온 결과 값(예측값)이 실제값(Label값)과 차이가 나는 것을 볼 수 있다.
인공 신경망에서는 가중치(w)(실제로는 바이어스(b) 값도 조정해야 한다)를 조정하여 이 차이가 최소가 되는 방향으로 값을 조정해 나간다. ( = 신경망 학습의 목표 )
그렇다면 순 전파 과정을 통해 나온 예측값과 실제값의 오차(E)는 어떻게 구할까?
Loss Function (or Cost Function), MSE
신경망을 통해 구한 예측값과 실제값의 차이를 구할 때는 손실 함수(Loss Function)가 사용된다.
손실 함수(또는 비용 함수(Cost Function))에는 여러 종류가 있는데 이 글에서는 간단하게 평균 제곱 오차(MSE. Mean Squared Error)만 간단하게 설명하도록 하겠다.
MSE를 구하는 공식은 예측값(t)과 실제값(y)의 차를 제곱한 것들의 평균이다. (간단...!)
MSE를 통해 각 출력층 노드의 오차를 구하면 아래 식과 같다.
오차 0.02397190이라는 값이 구해졌다.
Back Propagation
역전파(Back Propagation)는 Loss Fucntion을 통해 나온 오차값(E)을 다시 뒤로 전파해가면서 오차값이 최소가 되도록 각 가중치(w)를 경신하는 알고리즘이다.
말로는 설명이 되는데 도대체 어떻게 뒤로 전파한다는 것인가...?
이를 설명하기 위해선 경사 하강법(Gradient Descent), 미분의 연쇄 법칙(Chain Rule)에 대해 알아야 한다.
1) 경사 하강법(Gradient Descent)
경사 하강법은 함수의 기울기(경사)를 구하고 경사의 절댓값이 낮은 쪽으로 계속 이동시키며 극값에 이르도록 반복시키는 알고리즘이다.
경사 하강법의 수식을 살펴보자.
현재 x값에 현재 x값에 대한 기울기만큼 이동하여 극점으로 점점 이동하는 x'를 구하게 된다. (이때 a는 움직이는 거리 비율, 학습률)
그래서 이 경사 하강법이란 녀석과 역전파가 무슨 상관인 것인가?
다시 위 그림으로 돌아와, MSE로 구한 오차 E를 가중치 W5에 대해 그래프를 그려보자.
가중치와 오차의 그래프를 그리면 위와 같이 2차 함수 모양의 그래프가 되는데 이 그래프의 기울기가 최소인 지점(극값)이 오차(손실) 값의 최소 지점이 되고 이를 경사 하강법으로 찾아 더 나은 가중치를 얻게 된다.
즉 그래프의 기울기인 ∂MSE/∂W(=∂E/∂W)의 최솟값일 때 W값이 최적의 가중치가 되는 것이다.
그럼 이제 오차, 가중치에 대한 기울기를 어떻게 구해야 하는가?
2) 연쇄 법칙(Chain Rule)
기울기를 구하기 전에 먼저 연쇄 법칙에 대해 간단하게 알아보자.
합성함수 y = f( g( x ) )가 t = g( x ), y = f( t )로 분해될 때, 다음이 성립한다는 게 연쇄 법칙이다.
이제 연쇄 법칙에 의해 구하고자 하는 ∂MSE/∂W의 식을 다음과 같이 표현할 수 있게 되었다.
역전파(Back Propagation) 계산
먼저 첫 번째 항을 풀어보자.
다음은 두 번째 항, o1=Sigmoid(z3)인데 시그모이드 함수의 미분은 f(x) * (1-f(x))이다. 그러므로,
마지막 항을 풀면
모든 항을 곱하면
이제 경사 하강법을 통해 W5를 업데이트. (학습률은 0.5)
같은 계산 방법으로 나머지 가중치도 업데이트할 수 있다.
모든 가중치를 업데이트하고, 다시 순 전파를 진행하여 업데이트된 오차를 계산.
계산 결과, 역전파 후 가중치를 업데이트하여 오차가 줄어든 것을 볼 수 있다.
결론
- 역전파(Back Propagation)는 신경망의 예측 결과와 실제 값 사이의 오차를 줄이기 위해 가중치를 업데이트하는 과정.
- 오차를 줄이기 위한 가중치 W는 E, W 함수 그래프의 극점.
- 극점에 접근하기 위해 기울기가 작아지는 방향으로 이동하는 경사 하강법 활용.
- 오차에 대한 각 가중치의 기울기는 연쇄 법칙을 활용하여 계산.
끝.
'DeepLearning > Concept' 카테고리의 다른 글
Dropout (0) | 2021.07.16 |
---|---|
Dilated Convolution(Atrous convolution) (0) | 2021.01.20 |
mAP(mean Average Precision) (0) | 2021.01.06 |
CNN, Convolutional Neural Network, 합성곱 신경망 (0) | 2021.01.04 |
IoU (Intersection over Union) (0) | 2021.01.04 |