이전 게시물들에서 신경망의 가중치 매개변수에 대한 손실 함수의 기울기는 수치 미분을 사용해 구한다고 설명하였습니다. 수치 미분은 단순하고 구현하기 쉽지만 계산 시간이 오래 걸린다는 단점이 있습니다. 이번에는 가중치 매개변수의기울기를 효율적으로 계산하는 '오차역전파(backpropataion, backward propagation of errors)'에 대해 설명하겠습니다. 오차역전파는 말 그대로 오차를 점점 거슬러 올라가면서 다시 전파하는 것입니다.
이를 설명하기 위해 간단한 문제를 계산 그래프를 이용해 풀어보도록 하겠습니다. 계산 그래프는 계산 과정을 그래프로 나타낸 것을 말합니다.
위 문제를 계산 그래프로 표현해 해결해보겠습니다.
이 계산 그래프에서 계산을 왼쪽에서 오른쪽으로 진행하는 것을 순전파(forward propagatioin)이라고 합니다. 그리고 오른쪽에서 왼쪽으로 진행하는 것을 역전파(backward propagation)라고 합니다.
역전파에 대해 본격적으로 설명하기 전에 연쇄법칙(chain rule)에 대해 설명하겠습니다.
▶ 연쇄법칙(chain rule)이란?
합성함수 미분법의 성질 중 하나입니다. 즉, 합성 함수의 미분은 합성 함수를 구성하는 각 함수의 미분의 곱으로 나탸낼 수 있다는 성질입니다. 합성 함수를 미분할 때 꼬리에 꼬리를 물며 연속적으로 미분 값을 곱하는 과정을 거치는데 이를 chain이라 표현하여 chain rule이라는 이름이 붙은 것입니다. 여기서 합성 함수란 여러 함수로 구성된 함수입니다.
합성 함수를 사용한 간단한 예시로 설명해보겠습니다. 예를 들어, z=(x+y)^2 이라는 식은 아래 처럼 두개의 식으로 구성됩니다.
위 식을 연쇄법칙을 사용해 미분 az/ax를 구해보겠습니다. 먼저 위 식을 편미분합니다.
최종적으로 구하고싶은 az/ax는 위에서 구한 두 미분을 곱해 계산할 수 있습니다.
이제 이 연쇄 법칙의 계산을 계산 그래프로 표현해보겠습니다.
역전파의 계산에서는 노드로 들어온 입력에 그 노드의 편미분을 곱하고 다음 노드에 전달합니다. '**2' 노드에서의 입력은 az/az이고 이의 편미분인 az/at입니다. 편미분이 az/at인 이유는 순전파시에 입력이 t이고 출력이 z이기 때문입니다. 이 편미분을 곱하고 다음 노드로 넘기는 것입니다. 가장 왼쪽의 역전파는 연쇄법칙에 따르면 아래와 같은 식이 나옵니다.
즉, 위와 같은 식이 성립되기 때문에 'x에 대한 z의 미분'이 됩니다. 다시말해 역전파가 하는 일은 연쇄 법칙과 같은 것입니다.
▶ 역전파에 대해서
이제 가장 위의 사과 문제로 돌아와 역전파에 대해 좀 더 집중하여 설명해보겠습니다. 사과 문제의 계산 그래프에도 똑같이 연쇄 법칙을 적용하겠습니다. 사과 문제에는 덧셈 노드와 곱셈 노드가 혼합해 있기 때문에 각 노드의 역전파 방식에 대해 먼저 설명하겠습니다.
- 덧셈 노드의 역전파
: 덧셈 노드의 역전파는 상류에서 전해진 미분에 1을 곱하여 하류로 흘립니다.
- 곱셈 노드의 역전파
: 곱셈 노드의 역전파는 상류의 값에 순전파 때의 입력 신호들을 서로 바꾼 값을 곱해서 하류로 전파합니다.
이제 사과 문제의 역전파 계산 그래프를 보겠습니다.
앞서 설명한 것들을 모두 적용한 계산 그래프입니다. 결과를 보면 사과 가격의 미분은 2.2, 사과 개수의 미분은 110, 소비세의 미분은 200입니다. 소비세와 사과 가격이 같은 양만큼 오르면 최종적으로는 소비세가 200의 크기로 , 사과 가격이 2.2의 크기로 영향을 준다고 해석할 수 있습니다.(사과 값이 1원 오르면 최종 금액은 2.2원 오르는 것입니다.) 귤의 역전파도 동일합니다. 이렇게 역전파는 각 노드가 최종 값에 얼마만큼의 영향을 주었는지 판단하고 그 값에 맞게 가중치에 영향을 줄 수 있도록 합니다.
▶계산 그래프를 신경망에 적용해보기
Affine/Softmax 계층을 구현해보겠습니다. 사용할 변수들은 아래와 같습니다.
X = (2, ) => 입력
W = (2, 3) => 가중치
B = (3, ) => 편향
위와 같은 변수들이 있을 때, 신경망의 가중치의 합은 Y=dot(X, W)+B입니다. 이것은 신경망의 순전파입니다. 이제 이 계산을 계산그래프로 그려보겠습니다.
이제 이 행렬들의 역전파에 대해 생각해보겠습니다. 행렬을 사용하는 역전파도 행렬의 원소를 전개하면 결국 지금까지 봤던 계산그래프와 같은 순서로 생각할 수 있습니다. 위 식을 전개하여 미분해보면 아래와 같은 식이 도출됩니다.
W^T는 T의 전치행렬을 뜻합니다. 전치행렬은 W의 (i, j)위치의 원소를 (j, i)위치로 바꾼것을 말합니다. 이 식을 바탕으로 계산 그래프의 역전파를 구해보겠습니다.
계산 그래프에서는 각 변수의 형상에 주의해야합니다. X와 aL/aX는 같은 형상이고, W와 aL/aW도 같은 형상입니다. 이는 식을 통해서도 확인할 수 있습니다.
행렬 곱에서는 대웅하는 차원의 원소수를 일치시켜야 하는데, aL/aX=(aL/aY)*W^T와 같은 식을 사용해야하는 경우가 생기기 때문입니다. 따라서, 행렬곱의 역전파는 행렬의 대응하는 차원의 원소수가 일치하도록 곱을 조립하여 구할 수 있습니다.
지금까지의 그래프는 입력 데이터로 X하나만 주어지는 경우에 대한 설명이었습니다. 입력데이터로 N개를 묶어 순전파하는 경우의 계산그래프는 아래와 같습니다.
마지막으로 손실함수인 cross-entropy loss와 softmax 계층을 포함하는 계산 그래프를 그려보겠습니다.
식과 함께 좀 더 자세하게 그린 계산 그래프는 아래 그림입니다.
'AI Research > Deep Learning' 카테고리의 다른 글
[딥러닝 기본지식] 가중치(weight)와 편향(bias) (0) | 2023.03.04 |
---|---|
[딥러닝 기본지식] 평가 지표(Metrics) (0) | 2023.03.04 |
[딥러닝 기본지식] 최적화 함수(optimizer)의 이해 - 최적화 함수의 정의와 다양한 종류들 (0) | 2023.03.03 |
[딥러닝 기본지식] 경사 하강법(Gradient Descent)의 이해 - 정의 (0) | 2023.03.03 |
[딥러닝 기본지식] 손실 함수(Loss Function)의 이해 - 손실 함수의 정의와 다양한 종류들 (0) | 2023.03.03 |